目录
一、Shell的变量
1.1、系统变量
常用的系统变量如下:
按键:$?,作用:执行上一个指令或函数的返回值
按键:$#,作用:命令行参数的格式
按键:$n,作用:当前程序的第n个参数,n=1,2,3,4,...,9
按键:$0,作用:当前程序的名称
按键:$*,作用:以“参数1参数2...”形式保存所有参数
按键:$@,作用:以“参数1“”参数2...”形式保存所有参数
按键:$$,作用:本程序的(进程ID号)PID
按键:$!,作用:上一个命令的PID
按键:$-,作用:显示Shell使用的当前选项,与set命令功能相同
示例:
vim编辑t1.sh文件并查看
运行shell脚本并赋值变量
1.2、环境变量
按键PATH,作用:命令搜索路径,以冒号为分隔符。但当前目录不在系统路径里
按键HOME,作用:用户root目录的路径名,是cd命令的默认参数
按键COLUMNS,作用:定义了命令编辑模式下可以使用命令行的长度
按键EDITOR,作用:默认的行编辑器
按键VISUAL,作用:默认的可视编辑器
按键FCEDIT,作用:命令fc使用的编辑器
按键HISTFILE,作用:命令历史文件
按键HISTSIZE,作用:命令历史文件中最大可包含的命令条数
按键HISTFILESI,作用:命令历史文件中包含的最大行数
按键HISTORY,作用:显示历史命令
按键IFS,作用:定义Shell使用的分隔符
按键LONGAME,作用:用户登录名
按键MAIL,作用:执行一个需要Shell监视修改时间的文件。当该文件修改后,Shell发送消息You have mail给用户
按键MAILCHECK,作用:Shell检查MAIL文件的周期,单位是s
按键MAILPATH,作用:功能与MAIL类似,但可以用一组文件,以冒号分隔,每个文件后可跟一个问号和一条发向用户的信息
按键SHELL,作用:Shell的路径名
按键TERM,作用:终端类型
按键TMOUT,作用:Shell自动退出的时间,单位为s,0为禁止Shell自动退出
按键PROMPT_COMMAND,作用:指定在主命令提示符前应执行的命令
按键PS1,作用:主命令提示符
按键PS2,作用:二级命令提示符,命令执行过程中要求输入数据时使用
按键PS3,作用:select的命令提示符
按键PS4,作用:调试命令提示符
按键MANPATH,作用:寻找手册页的路径,以冒号分隔
按键LD_LIBRARY_PATH,作用:寻找库的路径,以冒号分隔
示例:使用env命令查看环境变量
1.3、自定义变量
1.3.1、命名规则
1)首个字符必须为字符(a-z,A-z)
2)中间不能有空格,可以使用下划线(_)
3)不能使用标点符号
4)不能使用BASH中的关键字(可用help命令查看保留关键字)
自定义变量合法命名示例:
book123 MY_name_is_dashuaibi
自定义变量不合法命名示例:
123xxx x#@ math
错误点:数字开头,名称包含特色字符
1.3.2、自定义变量使用
注意点:
1)变量赋值,直接用=即可
2)使用变量需要加上$符合
3)输出变量需要使用echo命令
4)变量包含在字符串中,要使用需要加上{}符合括起来
1.3.3、变量的赋值和替换
1)赋值方式:变量名=值
注意点:
1)给变量赋值,不能在=两边留空格
错误的使用:(=号两边不能留空格)
2)多次给变量赋值-->变量的值为:最后一次赋值的值
3)清空变量的值-->使用unset命令
4)变量的替换,替换条件放在{}中
情况一:变量未定义或者值为空时,返回值为value的内容。否则返回变量的值,格式为${变量:-值}
情况二:变量未定义或者值为空,在返回时value的值的同时value赋值给变量。格式为${变量:=值}
情况三:变量已赋值,值才用value替换,否则不进行任何替换。格式为${变量:+值},值替代变量。
二、Shell的数组
2.1、数组声明与赋值
2.1.1、数组声明
命令:declare,作用,对数组进行声明
格式:
declare [+/-] [选项] 变量
[+/-]含义:
+/-:指定或关闭变量的属性
选项含义:
a:定义后面名为变量的类型为数组(array)类型
i:定义后面为变量的类型为整型数字(integer)类型
x:将后面的变量变成环境变量
r:将变量设置成readonly类型
f:将后面的变量定义为函数
数组声明示例:
2.1.2、数组赋值
在Shell中,用括号来表示数组,数组元素用空格符号分隔开
1)定义数组的形式一:连续赋值
数组名={值1 值2 值3 ... 值n},数组连续赋值,每个值以空格符号分隔开
2)形式二:单独赋值数组各个分量,可以使用不连续的下标,而且下标范围没有限制
如:数组名[序号]=值
示例:
x[0]=值1
x[2]=值2
x[5]=值3
3)形式三:对数组声明并赋值
declare -a 数组名={值1 值2 值3 值n}
2.2、数组的读取与长度
2.2.1、数组读取
格式:${数组名[下标]}
1)取数组的单个元素的时候,语法形式为:echo ${数组名[下标]}
2)取数组全部元素,使用:echo ${数组名[@]}或echo ${数组名[*]}
2.2.2、数组长度
1)使用echo ${#数组名[@]}或echo ${#数组名[*]}可以获取数组长度
2)用#{#数组名[n]}取得单个元素的长度
三、Shell的输入/输出
3.1、输入命令read
使用read语句从键盘或文件的某一行文本读入信息,并将其赋给一个变量。
格式:
read 变量名称 变量名称
注意点:
1)Shell用空格作为多个变量之间的分隔符
2)Shell将输入文本域超长部分赋值给最后一个变量
3.2、输出命令echo
用法:echo [选项] 字符串
选项可选参数:
-n,作用:输出后不自动换行
-e,作用:启用“\”字符的转化
-\,作用:字符的转化
-\a,作用:发出警告声
-\b,作用:删除前一个字符
-\c,作用:最后不加上换行符号
-\f,作用:换行但光标仍然停留在原来的位置
-\n,作用:换行且光标移至行首
-\r,作用:光标移至行首,但不换行
-\t,作用:插入Tab
-\v,作用:与\f相同
-\\,作用:插入\字符
-\x,作用:插入示例十六进制数所代表的ASCII字符
四、Shell的运算符与特殊字符
4.1、运算符
4.2、特殊字符
4.2.1、反斜杠
反斜杠是转义字符,它告诉我们Shell不要对其后面的那个字符进行特殊处理,只当做普通字符即可
4.2.2、双引号
由双引号括起来的字符,除了$、反斜杠和反引号几个字符任是特殊字符并保留其功能外,其余字符视为普通字符
4.2.3、单引号
由单引号括起来的字符都作为普通字符出现
4.2.4、反引号
Shell把反引号括起来的字符串解释为命令行后首先执行,并以它的标准输出结果取整取代整个反引号部分
4.2.5、注释符
以#开头的正文行表示注释行
五、Shell语句
5.1、test命令
作用:检查某个条件是否成立,如果条件为真,返回一个0值,如果条件不为真,则返回一个大于0的值。
格式:test expression 或者 [expression]
5.1.1、整数运算符
5.1.2、字符串运算符
5.1.3、文件运算符
5.1.4、逻辑运算符
5.2、if语句
5.2.1、单分支if
5.2.2、双分支if
5.2.3、多分支if
5.3、case语句
5.4、while语句
5.5、until语句
5.6、for语句
5.7、循环控制语句
5.7.1、break
使用:for、while、until中,作用:让脚本忽略循环体其它语句,强制退出循环
5.7.2、continue
使用:for、while、until中,作用:让脚本跳过其后面的语句,执行下一次循环
六、综合应用实例
6.1、应用一
编写Shell脚本,执行后,打印一行提示“Please input a number:”,依次打印用户输入的值,直到用户输入end为止。