一、shell特殊字符
1、一般通配符
2、模式表达式
3、引号
在shell中引号分为三种,单引号、双引号和倒引号。
3.1、双引号
由双引号括起来的字符(除$,倒引号(),和反斜杠(\)外),其余字符均视为普通字符。对这三种字符仍然保持特殊功能。$表示变量替换,倒引号(
)表示命令替换,反斜杠表示转移字符。
例:i=10;
echo “
i”输出:103.2、单引号由单引号括起来的字符均视为普通字符。例:echo‘
i’
输出:echo $i
3.3、倒引号
倒到引号括起来的字符串被shell解释为命令行,在执行时,shell会先执行该命令行,并用他的结果替换整个倒引号部分。
例: echo “pwd
”
打印当前目录,并显示出来。
4、注释、管道符、后台命令
在shell脚本里面除了第一行以”#!”开头的表示所使用的脚本的绝对路径。其余以”#”开头的表示注释。
管道线是以”|”隔开的若干命令所组成的序列。一个管道线中可以包含多条命令。
在可执行文件名的后面加上”&”表示在后台运行命令。
5、命令执行操作符。
可以使用逻辑与”&&”把两个命令联系到一起。
例:命令1&&命令2
在命令1执行成功的前提下才执行命令2.
可以使用逻辑或”||”把两个命令联系到一起。
例:命令1||命令2
在命令1执行失败的情况下才去执行命令2.
6、成组命令
以{}括起来的全部命令可以视为语法上的一条命令,出现在管道符的一边。
例:
注意:左括弧”{“后面要有一个空格,右括弧”}”前面要有一个分号”;”。
成组命令也可以用”()”括起来。
例:
如果用”()”括起来组成命令时,左括号”(“后不必有空格,右括号”)”前也不必有分号”;”。
“{}”和”()”的区别就是,”{}”在本shell内执行命令表,而”()”是创建一个子进程后让子进程去执行命令表。
二、shell变量
1、shell变量
shell中的变量类型都是弱类型,可以不用声明直接就使用,shell会将所有的变量都解释成字符串。变量的命名方法和C语言是相同的。
2、变量赋值
变量赋值的一般形式是:变量名=字符串。注意等号两边一定不能有空格,不然会被shell解释成命令。
3、引用变量值
在变量名前面加一个
符号,它告诉shell对变量进行值替换。例:i=10echo
i
4、命令替换
在shell中有两种命令替换的方式,分别是倒引号”“”和$(),shell会将他们括起来的字符串解释成命令。
例:
5、数组
shell中的数组都是一维数组,下标从0开始,下标可以是整数或算术表达式其值应该大于0。
用户可以用赋值语句给数组进行赋值:
例:
还可以使用圆括号()进行组合赋值。
读取元素值的形式一般是:${数组名[下标]}。若没有给出数组下标,则数组名表示下标为0的数组元素,如nums就等价于nums[0]。而使用*或@作为下标的时候,则表示数组的所有元素。
例:
他们的区别就是
nums[∗]会将数组所有元素解释成一个字符串,而
{nums[@]}会将每个元素解释成一个单独的字符串。
6、read命令可以从键盘上读取数据,然后赋给指定变量。
read命令的一般格式是:read 变量1 变量2 …
例:
如果read后面的变量个数大于输入的参数,则后面的变量的值是空:
如果read后面的变量个数小于输入的参数,则多余的参数都会赋给最后一个变量:
7、预先定义的特殊变量
7.1、$#:表示命令行上参数的个数,但不包括shell脚本名本身。
7.2、$?:表示上一条命令执行之后的返回值。如果成功的话,则就是0,失败的话非0。
7.3、$$:表示当前进程的进程号。
7.4、$!:表示上一个后台命令对应的进程号。