Shell入門:Shell運算子,入門shell運算子
Shell入門(二)之Shell運算子Shell基本運算子
Shell和其他程式設計語言一樣,支援多種運算子,包括:
算術運算子
關係運算子
布林運算子
字串運算子
原生的bash不支援簡單的數學運算,但是可以通過其他命令來實現,例如:awk和expr,expr最為常用。
如:
val=`expr 2 + 3`echo $val
輸出:5
注意,2 + 3之間需要有一個空格
算術運算子
a變數為10,b變數為20。
| 運算子 |
說明 |
舉例 |
| + |
加號 |
`expr $a + $b`,結果:30 |
| - |
減號 |
`expr $a - $b`,結果:-10 |
| * |
乘號 |
`expr $a * $b`,結果:200 |
| / |
除號 |
`expr $b / $a`,結果:2 |
| % |
取餘 |
`expr $b % $a`,結果:0 |
| = |
賦值 |
var=$a,把變數a賦值給var |
| == |
等於 |
[$a == $b],結果為0 |
| != |
不等於 |
[$a != $b],結果為1 |
eg:
[zhang@localhost home]$ a=10[zhang@localhost home]$ b=20[zhang@localhost home]$ echo $a + $b = `expr $a + $b`10 + 20 = 30[zhang@localhost home]$ echo $a - $b = `expr $a - $b`10 - 20 = -10[zhang@localhost home]$ echo $a \* $b = `expr $a \* $b`10 * 20 = 200[zhang@localhost home]$ echo $a / $b = `expr $a / $b`10 / 20 = 0[zhang@localhost home]$ echo $b / $a = `expr $b / $a`20 / 10 = 2[zhang@localhost home]$ echo $b % $a = `expr $b % $a`20 % 10 = 0[zhang@localhost home]$ var=$a[zhang@localhost home]$ echo $var10[zhang@localhost home]$ echo $[$a == $b]0[zhang@localhost home]$ echo $[$a != $b]1[zhang@localhost home]$ echo $[$a == 10]1
註:$[$a == $b]的寫法,可以使用$[a == b]替代,如:
[zhang@localhost ~]$ a=10[zhang@localhost ~]$ b=20[zhang@localhost ~]$ echo $[a + b]30[zhang@localhost ~]$ echo $[a - b]-10[zhang@localhost ~]$ echo $[a * b]200[zhang@localhost ~]$ echo $[a / b]0[zhang@localhost ~]$ echo $[a == b]0[zhang@localhost ~]$ echo $[a != b]1[zhang@localhost ~]$ echo $[a >= b]0[zhang@localhost ~]$ echo $[a <= b]1[zhang@localhost ~]$ echo $[a % b]10
關係運算子
| 運算子 |
說明 |
舉例 |
| -eq |
檢測2個數是否相等,相等返回true。 |
[$a -eq $b]返回false |
| -ne |
檢測2個數是否不相等,相等返回true。 |
[$a -ne $b]返回true |
| -gt |
檢測左邊的數是否大於右邊的,如果是,則返回true |
[$a -gt $b]返回false |
| -lt |
檢測左邊的數是否小於右邊的,如果是,則返回true |
[$a -lt $b]返回true |
| -ge |
檢測左邊的數是否大於等於右邊的,如果是,則返回true |
[$a -ge $b]返回false |
| -le |
檢測左邊的數是否小於等於右邊的,如果是,則返回true |
[$a -le $b]返回true |
eg:
#!/bin/basha=10b=20if [ $a -eq $b ]then echo "$a -eq $b : a is equal to b"else echo "$a -eq $b: a is not equal to b"fiif [ $a -ne $b ]then echo "$a -ne $b : a is not equal to b"else echo "$a -ne $b : a is equal to b"fiif [ $a -gt $b ]then echo "$a -gt $b : a is greater than b"else echo "$a -gt $b : a is not greater than b"fiif [ $a -lt $b ]then echo "$a -lt $b : a is less than b"else echo "$a -lt $b : a is not less than b"fiif [ $a -ge $b ]then echo "$a -ge $b : a is greater or equal to b"else echo "$a -ge $b : a is not greater or equal to b"fiif [ $a -le $b ]then echo "$a -le $b : a is less or equal to b"else echo "$a -le $b : a is not less or equal to b"fi
輸出結果:
10 -eq 20: a is not equal to b10 -ne 20 : a is not equal to b10 -gt 20 : a is not greater than b10 -lt 20 : a is less than b10 -ge 20 : a is not greater or equal to b10 -le 20 : a is less or equal to b
布林運算子
| 運算子 |
說明 |
舉例 |
| ! |
非運算,運算式為true,則返回false,否則返回true |
[!false]返回true |
| -o |
或運算,有一個運算式為true,則返回true |
[ $a -lt 20 -o $b -gt 100],返回true |
| -a |
與運算,2個運算式都為true,才返回true |
[$a -lt 20 -a $b -gt 100],返回false |
eg:
#!/bin/basha=10b=20if [ $a != $b ]then echo "$a != $b"else echo "$a == $b"fiif [ $a -lt 20 -o $b -gt 100 ]then echo "$a less than 20 or $b greater than 100 : return true"else echo "$a less than 20 or $b greater than 100 : return false"fiif [ $a -lt 20 -a $b -gt 100 ]then echo "$a less than 20 and greater than 100 : return true"else echo "$a less than 20 and greater than 100 : return false"fi
輸出結果:
10 != 2010 less than 20 or 20 greater than 100 : return true10 less than 20 and greater than 100 : return false
邏輯運算子
| 運算子 |
說明 |
舉例 |
| && |
邏輯的and |
[[ $a -lt 100 && $b -gt 100 ]] 返回 false |
| || |
邏輯的 OR |
[[ $a -lt 100 || $b -gt 100 ]] 返回 true |
eg:
#!/bin/basha=10b=20if [[ $a -lt 100 && $b -gt 100 ]]then echo "return true"else echo "return false"fiif [[ $a -lt 100 || $b -gt 100 ]]then echo "return true"else echo "return false"fi
輸出結果:
return falsereturn true
字串運算子
a變數為”abc”,b變數為”efg”。
| 運算子 |
說明 |
舉例 |
| = |
檢測兩個字串是否相等,相等返回true |
[ $a = $b ],返回false |
| != |
檢測兩個字串是否相等,不相等返回true |
[ $a != $b ],返回true |
| -z |
檢測字串長度是否為0,不為0返回true |
[ -z $a ]返回false |
| -n |
檢測字串長度是否為0,不為0返回true |
[ -n $a ]返回true |
| str |
檢測字串是否為空白,不為空白返回true |
[$a]返回true |
eg:
#!/bin/basha="abc"b="efg"if [ $a = $b ]then echo "$a equal $b"else echo "$a not equal $b"fiif [ $a != $b ]then echo "$a != $b"else echo "$a == $b"fiif [ -n $b ]then echo "$b length ${#b}"else echo "$b length 0"fi# eg: strif [ $a ]then echo "$a not null"else echo "$a is null"fi
結果:
abc not equal efgabc != efgabc length 3efg length 3abc not null