天天看点

Linux shell脚本 (七)Shell运算符

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/sh
a=10
b=20
if [ $a -eq $b ]
then
   echo "a is equal to b"
else
   echo "a is not equal to b"
fi
​
if [ $a -ne $b ] 
then
   echo "a is not equal to b"
else
   echo "a is equal to b"
fi
​
if [ $a -gt $b ]
then
   echo "a is greater than b"
else
   echo "a is not greater than b"
fi
​
if [ $a -lt $b ]
then
   echo "a is less than b"
else
   echo "a is not less than b"
fi
​
if [ $a -ge $b ]
then
    echo "a is greater than or  equal to b"
else
    echo "a is not greater than or equal to b"
fi
​
if [ $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 b
a is not equal to b
a is not greater than b
a is less than b
a is not greater than or equal to b
a 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/bash
a=10
b=20
if [ ! $a -lt 100 ]
then
    echo "! $a -lt 100 : return true"
else
    echo  "! $a -lt 100 : return false"
fi
if [ $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"
fi
​
if [ $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"
fi
​
if [ $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 false
10 -lt 100 -a 20 -gt 15 : return true
10 -lt 100 -o 20 -gt 100 : return true
10 -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/bash
​
a=$1
b=$2
​
if [ $a = $b ]
then
   echo "a = b"
else
   echo "a != b"
fi
if [ $a != $b ]
then
   echo "a != b"
else
   echo "a = b"
fi
if [ -z $a ]
then
   echo "a length is zero"
else
   echo "a length is not zero"
fi
if [ $b ]
then
   echo "b is not empty"
else
   echo "b is empty"
fi      

运行结果:

abc = efg: a is not equal to b
abc != efg : a is not equal to b
-z abc : string length is not zero
abc : 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/bash
File=$1
if [ -r $File ]
then
   echo "$File has read permission"
else
   echo "$File not have read permission"
fi
​
if [ -w $File ]
then
   echo "$File has write permission"
else
   echo "$File not have write permission"
fi
​
if [ -x $File ]
then
   echo "$File has execute permission"
else
   echo "$File not have execute permission"
fi
​
if [ -f $File ]
then
   echo "$File is regular file"
else
   echo "$File is special file"
fi
​
if [ -d $File ]
then
   echo "$File is directory"
else
   echo "$File is not directory"
fi
​
if [ -s $File ]
then
   echo "$File size is not zero"
else
   echo "$File size is zero"
fi
​
if [ -e $File ]
then
   echo "$File exist"
else
   echo "$File not exist"
fi      

运行结果:

File has read access
File has write permission
File has execute permission
File is  ordinary file
This is not  directory
File size is zero
File exists      

继续阅读