一、常见变量
不同于一些编译型语言,shell中变量不需要声明,直接使用,如:a=5。调用变量时,则通过$a或${a}对变量进行引用。
$a与${a}的区别,如:a=1,$a表示1,$a23,则不存在;${a}表示1,${a}23,则表示123
$$ :shell本身的PID
$!:shell最后运行的后台PID
$0:shell脚本的文件名
$1 ~ $n:shell脚本的各个参数值,如$1表示第一个参数,$2表示第二个,以此类推
$#:shell脚本的参数个数
$?:上一条命令返回的结束代码(0表示正常,其他表示异常)
$*:shell脚本的所有参数的列表,若$*用""括起来,即"$*"表示以"$1 $2 ... $n"形式输出所有参数
$@:shell脚本的所有参数的列表,若$@用""括起来,即"$@"表示以"$1" "$2" ... "$n"形式输出所有参数
$*和$@没用用引号包含起来时是一样的,都为"$1 $2 ... $n"形式输出
$() 等同于反引号``,运行一段命令
$(()) 进行数字运算,如echo $((a+b+c))
二、常见符号
> :重定向输出,会覆盖原有的内容
>> : 重定向输出,在原有内容后追加
< : 重定向输入,打开一个文件作为输入使用
<< : 重定向输入,表示接受一个输入结束的标识,当输入这个标识就结束输入。如果定界符以任何一种形式引号括起来,shell便不会处理输入的内容
; :命令分隔符
| :管道符,将上一条命令的输出传递给后面
&& :与符号,前面的命令执行结果为非0时,后面的才会继续执行
|| :或符号,前面的命令执行结果为0时,后面的才会继续执行
" " : 双引号中有命令、变量等,会先把变量、命令解析出结果,再输出。除$(美元符号)、\(反斜杠)、’(单引号)、和”(双引号)这几个字符仍是特殊字符并保留其特殊功能外,其余字符仍作为普通字符对
' ' : 单引号括起来的字符都作为普通字符出现,特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释
` ` :反引号, 表示里面需要执行的是命令。与$()相同。反引号是一个老的用法,$()才是新的用法
无引号 : 定义字符串时,字符串不能包含空白字符(如Space或Tab),一般连续的字符串,数字,路径等可以不加引号。
2>/dev/null :将错误输出重定向给/dev/null这个文件的,即所有错误的输出都会被丢弃
1>/dev/null :将标准输出重定向给/dev/null这个文件的,即所有正确的输出都会被丢弃
三、数字运算
expr命令可以实现数值运算、数值或字符串比较、字符串匹配、字符串提取、字符串长度计算等功能。
1、整数运算
加:expr 10 + 2 expr $a + $b
echo $[10 - 2] echo $[$a + $b]
echo $((10 + 2)) echo $(($a + $b))
减:expr 10 - 2 expr $a - $b
echo $[10 - 2] echo $[$a - $b]
echo $((10 - 2)) echo $(($a - $b))
乘:expr 10 \* 2 expr $a \* $b
echo $[10 \* 2] echo $[$a \* $b]
echo $((10 \* 2)) echo $(($a \* $b))
除:expr 10 / 2 expr $a / $b
echo $[10 / 2] echo $[$a / $b]
echo $((10 / 2)) echo $(($a / $b))
取余:expr 10 % 2 expr $a % $b
echo $[10 % 2] echo $[$a % $b]
echo $((10 % 2)) echo $(($a % $b))
注:乘法须有转义符\
expr运算时,运算符左右必须有空格,其余两种可以不用。如:expr 10+2 非法。
2、小数运算
bc计算器,为linux内置科学计算器。
保留小数位数可以通过scale关键字控制。如:scale=2,表示运算结果小数点后保留两位。只进行加减是scale不生效,这时只要再除以1就可以了。
进制转换可以通过ibase、obase关键字控制。如:ibase=10;obase=2,表示输入为10进制,运算结果按照2进制输出
四、常见的条件判断
[ 表达式 ]
文件或者路径:
-e :文件是否存在,如果是,则返回true
-d : 文件是否为目录,如果是,则返回true
-f : 文件是否为普通文件(不是目录,也不是设备文件),如果是,则返回true
权限:
-r : 是否有读取权限
-w : 是否有写入权限
-x : 是否有执行权限
整数关系运算:
-eq : 等于(equal)
-ne : 不等于(not equal)
-gt : 大于(greater than)
-lt : 小于(lesser than)
-ge : 大于或等于(greater or equal)
-le : 小于或等于(lesser or equal)
字符串:
= : 相等
!= : 不相等
-z : 字符串长度是否为0,为0则返回true
-n : 字符串长度是否为0,部位0则返回true
$a : 字符串是否为空,不为空则返回true
[ ]与表达式之间必须有空格
小数:
使用bc命令,如:[ `echo '1.2 < 1.3' | bc` -eq 1 ]
命令需要用` `或$()包含,bc计算器可以使用浮点型和<或>符号