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 ] |
来看一个关系运算符的例子:
a=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 ] |
a=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
|
|
|
||
---|---|---|---|---|
运算符 | 说明 | 举例 | ||
= | 检测两个字符串是否相等,相等返回 true。 | [ $a = $b ] | ||
!= | 检测两个字符串是否相等,不相等返回 true。 | [ $a != $b ] | ||
-z | 检测字符串长度是否为0,为0返回 true。 | [ -z $a ] | ||
str | 检测字符串是否为空,不为空返回 true。 | [ $a ] |
a=$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 ] |
File=$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