天天看點

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      

繼續閱讀