Linux shell脚本 (七)Shell运算符

时间:2022-07-14 15:35:58

Shell运算符

​ Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。

9.1 算术运算符

  • 也可以使用表达式$(( )) 或 $[]

运算符 说明 举例
+ 加法 $(($a + $b))
- 减法 $(($a - $b))
* 乘法 $(($a * $b))
/ 除法 $(($a / $b))
% 取余 $(($a % $b))
= 赋值 a=$b 将把变量 b 的值赋给 a。

 #!/bin/sh a=10 b=20 val=$(($a + $b)) echo "a + b : $val" val=$(($a - $b)) echo "a - b : $val" val=$(($a * $b)) echo "a * b : $val" val=$(($a / $b)) echo "a / b : $val" val=$[$a % $b] echo "a % b : $val"

9.2 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ]
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ]
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ]
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ]
== 用于比较两个数字,相同则返回 true。 [ a == b ]
!= 用于比较两个数字,不相同则返回 true。 [ a != b ]

注意:条件表达式要放在方括号之间,并且要有空格,例如 [expression] 是错误的,必须写成 [ expression ]。

来看一个关系运算符的例子:

#!/bin/sha=10b=20if [ $a -eq $b ]then   echo "a is equal to b"else   echo "a is not equal to b"fiif [ $a -ne $b ] then   echo "a is not equal to b"else   echo "a is equal to b"fiif [ $a -gt $b ]then   echo "a is greater than b"else   echo "a is not greater than b"fiif [ $a -lt $b ]then   echo "a is less than b"else   echo "a is not less than b"fiif [ $a -ge $b ]then echo "a is greater than or equal to b"else    echo "a is not greater than or equal to b"fiif [ $a -le $b ]then   echo "$a -le $b: a is less than or equal to b"else   echo "$a -le $b: a is not less than or equal to b"fi

运行结果:

a is not equal to ba is not equal to ba is not greater than ba is less than ba is not greater than or equal to ba is less than or  equal to b

9.3 逻辑运算符

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ]
-ne 检测两个数是否相等,不相等返回 true。 [ $a -ne $b ]
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ]
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ]
-ge 检测左边的数是否大等于右边的,如果是,则返回 true。 [ $a -ge $b ]
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ]
== 用于比较两个数字,相同则返回 true。 [ a == b ]
!= 用于比较两个数字,不相同则返回 true。 [ a != b ]
#!/bin/basha=10b=20if [ ! $a -lt 100 ]then echo "! $a -lt 100 : return true"else echo  "! $a -lt 100 : return false"fiif [ $a -lt 100 -a $b -gt 15 ]then   echo "$a -lt 100 -a $b -gt 15 : return true"else   echo "$a -lt 100 -a $b -gt 15 : return false"fiif [ $a -lt 100 -o $b -gt 100 ]then   echo "$a -lt 100 -o $b -gt 100 : return true"else   echo "$a -lt 100 -o $b -gt 100 : return false"fiif [ $a -lt 5 -o $b -gt 100 ]then   echo "$a -lt 100 -o $b -gt 100 : return true"else   echo "$a -lt 100 -o $b -gt 100 : return false"fi

运行结果:

! 10 -lt 100 : return false10 -lt 100 -a 20 -gt 15 : return true10 -lt 100 -o 20 -gt 100 : return true10 -lt 5 -o 20 -gt 100 : return false

9.4 字符串运算符

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ]
!= 检测两个字符串是否相等,不相等返回 true。 [ $a != $b ]
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ]
str 检测字符串是否为空,不为空返回 true。 [ $a ]

看一个例子:

#!/bin/basha=$1b=$2if [ $a = $b ]then   echo "a = b"else   echo "a != b"fiif [ $a != $b ]then   echo "a != b"else   echo "a = b"fiif [ -z $a ]then   echo "a length is zero"else   echo "a length is not zero"fiif [ $b ]then   echo "b is not empty"else   echo "b is empty"fi

运行结果:

abc = efg: a is not equal to babc != efg : a is not equal to b-z abc : string length is not zeroabc : string is not empty

9.5 文件测试运算符

文件测试运算符用于检测 linux文件的各种属性。

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ]
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -b $file ]
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ]
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ]
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ]
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ]
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ]
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ]
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ]
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ]

例如,下面的代码,将检测该文件的各种属性:

#!/bin/bashFile=$1if [ -r $File ]then   echo "$File has read permission"else   echo "$File not have read permission"fiif [ -w $File ]then   echo "$File has write permission"else   echo "$File not have write permission"fiif [ -x $File ]then   echo "$File has execute permission"else   echo "$File not have execute permission"fiif [ -f $File ]then   echo "$File is regular file"else   echo "$File is special file"fiif [ -d $File ]then   echo "$File is directory"else   echo "$File is not directory"fiif [ -s $File ]then   echo "$File size is not zero"else   echo "$File size is zero"fiif [ -e $File ]then   echo "$File exist"else   echo "$File not exist"fi

运行结果:

File has read accessFile has write permissionFile has execute permissionFile is  ordinary fileThis is not  directoryFile size is zeroFile exists