Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
生活随笔
收集整理的這篇文章主要介紹了
Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Bash 支持很多運算符,包括算數運算符、關系運算符、布爾運算符、字符串運算符和文件測試運算符。
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數相加:#!/bin/bash val=`expr 2 + 2` echo "Total value : $val"
運行腳本輸出:
Total value : 4
兩點注意:
#!/bin/sh a=10 b=20 val=`expr $a + $b` echo "a + b : $val" val=`expr $a - $b` echo "a - b : $val" val=`expr $a \* $b` echo "a * b : $val" val=`expr $b / $a` echo "b / a : $val" val=`expr $b % $a` echo "b % a : $val" if [ $a == $b ] then echo "a is equal to b" fi if [ $a != $b ] then echo "a is not equal to b" fi
運行結果:
a + b : 30
a - b : -10
a * b : 200
b / a : 2
b % a : 0
a is not equal to b
注意:
算術運算符列表
注意:條件表達式要放在方括號之間,并且要有空格,例如?[$a==$b] 是錯誤的,必須寫成?[ $a == $b ]。
先來看一個關系運算符的例子:
#!/bin/sh a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a is equal to b" else echo "$a -eq $b: a is not equal to b" fi if [ $a -ne $b ] then echo "$a -ne $b: a is not equal to b" else echo "$a -ne $b : a is equal to b" fi if [ $a -gt $b ] then echo "$a -gt $b: a is greater than b" else echo "$a -gt $b: a is not greater than b" fi if [ $a -lt $b ] then echo "$a -lt $b: a is less than b" else echo "$a -lt $b: a is not less than b" fi if [ $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" fi if [ $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 b
10 -ne 20: a is not equal to b
10 -gt 20: a is not greater than b
10 -lt 20: a is less than b
10 -ge 20: a is not greater or equal to b
10 -le 20: a is less or equal to b
關系運算符列表
#!/bin/sh a=10 b=20 if [ $a != $b ] then echo "$a != $b : a is not equal to b" else echo "$a != $b: a is equal to b" fi if [ $a -lt 100 -a $b -gt 15 ] then echo "$a -lt 100 -a $b -gt 15 : returns true" else echo "$a -lt 100 -a $b -gt 15 : returns false" fi if [ $a -lt 100 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : returns true" else echo "$a -lt 100 -o $b -gt 100 : returns false" fi if [ $a -lt 5 -o $b -gt 100 ] then echo "$a -lt 100 -o $b -gt 100 : returns true" else echo "$a -lt 100 -o $b -gt 100 : returns false" fi
運行結果:
10 != 20 : a is not equal to b
10 -lt 100 -a 20 -gt 15 : returns true
10 -lt 100 -o 20 -gt 100 : returns true
10 -lt 5 -o 20 -gt 100 : returns false
布爾運算符列表
#!/bin/sh a="abc" b="efg" if [ $a = $b ] then echo "$a = $b : a is equal to b" else echo "$a = $b: a is not equal to b" fi if [ $a != $b ] then echo "$a != $b : a is not equal to b" else echo "$a != $b: a is equal to b" fi if [ -z $a ] then echo "-z $a : string length is zero" else echo "-z $a : string length is not zero" fi if [ -n $a ] then echo "-n $a : string length is not zero" else echo "-n $a : string length is zero" fi if [ $a ] then echo "$a : string is not empty" else echo "$a : string 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
-n abc : string length is not zero
abc : string is not empty
字符串運算符列表
例如,變量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小為100字節,具有 rwx 權限。下面的代碼,將檢測該文件的各種屬性:#!/bin/sh file="/var/www/tutorialspoint/unix/test.sh" if [ -r $file ] then echo "File has read access" else echo "File does not have read access" fi if [ -w $file ] then echo "File has write permission" else echo "File does not have write permission" fi if [ -x $file ] then echo "File has execute permission" else echo "File does not have execute permission" fi if [ -f $file ] then echo "File is an ordinary file" else echo "This is sepcial file" fi if [ -d $file ] then echo "File is a directory" else echo "This is not a directory" fi if [ -s $file ] then echo "File size is zero" else echo "File size is not zero" fi if [ -e $file ] then echo "File exists" else echo "File does not exist" fi
運行結果:
File has read access
File has write permission
File has execute permission
File is an ordinary file
This is not a directory
File size is zero
File exists
文件測試運算符列表
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
原生bash不支持簡單的數學運算,但是可以通過其他命令來實現,例如 awk 和 expr,expr 最常用。
expr 是一款表達式計算工具,使用它能完成表達式的求值操作。
例如,兩個數相加:
- 表達式和運算符之間要有空格,例如 2+2 是不對的,必須寫成 2 + 2,這與我們熟悉的大多數編程語言不一樣。
- 完整的表達式要被 ` ` 包含,注意這個字符不是常用的單引號,在 Esc 鍵下邊。
算術運算符
先來看一個使用算術運算符的例子:- 乘號(*)前邊必須加反斜杠(\)才能實現乘法運算;
- if...then...fi 是條件語句,后續將會講解。
| + | 加法 | `expr $a + $b` 結果為?30。 |
| - | 減法 | `expr $a - $b` 結果為 10。 |
| * | 乘法 | `expr $a \* $b` 結果為 ?200。 |
| / | 除法 | `expr $b / $a` 結果為?2。 |
| % | 取余 | `expr $b % $a` 結果為?0。 |
| = | 賦值 | a=$b 將把變量 b 的值賦給 a。 |
| == | 相等。用于比較兩個數字,相同則返回 true。 | [ $a == $b ] 返回?false。 |
| != | 不相等。用于比較兩個數字,不相同則返回 true。 | [ $a != $b ] 返回 true。 |
注意:條件表達式要放在方括號之間,并且要有空格,例如?[$a==$b] 是錯誤的,必須寫成?[ $a == $b ]。
關系運算符
關系運算符只支持數字,不支持字符串,除非字符串的值是數字。先來看一個關系運算符的例子:
| -eq | 檢測兩個數是否相等,相等返回 true。 | [ $a -eq $b ] 返回?true。 |
| -ne | 檢測兩個數是否相等,不相等返回 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。 |
布爾運算符
先來看一個布爾運算符的例子:| ! | 非運算,表達式為 true 則返回 false,否則返回 true。 | [ ! false ] 返回 true。 |
| -o | 或運算,有一個表達式為 true 則返回 true。 | [ $a -lt 20 -o $b -gt 100 ] 返回?true。 |
| -a | 與運算,兩個表達式都為 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回?false。 |
字符串運算符
先來看一個例子:| = | 檢測兩個字符串是否相等,相等返回 true。 | [ $a = $b ] 返回 false。 |
| != | 檢測兩個字符串是否相等,不相等返回 true。 | [ $a != $b ] 返回?true。 |
| -z | 檢測字符串長度是否為0,為0返回 true。 | [ -z $a ] 返回 false。 |
| -n | 檢測字符串長度是否為0,不為0返回 true。 | [ -z $a ] 返回 true。 |
| str | 檢測字符串是否為空,不為空返回 true。 | [ $a ] 返回?true。 |
文件測試運算符
文件測試運算符用于檢測 Unix 文件的各種屬性。例如,變量 file 表示文件“/var/www/tutorialspoint/unix/test.sh”,它的大小為100字節,具有 rwx 權限。下面的代碼,將檢測該文件的各種屬性:
| -b file | 檢測文件是否是塊設備文件,如果是,則返回 true。 | [ -b $file ] 返回 false。 |
| -c file | 檢測文件是否是字符設備文件,如果是,則返回 true。 | [ -b $file ] 返回?false。 |
| -d file | 檢測文件是否是目錄,如果是,則返回 true。 | [ -d $file ] 返回 false。 |
| -f file | 檢測文件是否是普通文件(既不是目錄,也不是設備文件),如果是,則返回 true。 | [ -f $file ] 返回?true。 |
| -g file | 檢測文件是否設置了 SGID 位,如果是,則返回 true。 | [ -g $file ] 返回?false。 |
| -k file | 檢測文件是否設置了粘著位(Sticky Bit),如果是,則返回 true。 | [ -k $file ] 返回?false。 |
| -p file | 檢測文件是否是具名管道,如果是,則返回 true。 | [ -p $file ] 返回?false。 |
| -u file | 檢測文件是否設置了 SUID 位,如果是,則返回 true。 | [ -u $file ] 返回?false。 |
| -r file | 檢測文件是否可讀,如果是,則返回 true。 | [ -r $file ] 返回?true。 |
| -w file | 檢測文件是否可寫,如果是,則返回 true。 | [ -w $file ] 返回?true。 |
| -x file | 檢測文件是否可執行,如果是,則返回 true。 | [ -x $file ] 返回?true。 |
| -s file | 檢測文件是否為空(文件大小是否大于0),不為空返回 true。 | [ -s $file ] 返回?true。 |
| -e file | 檢測文件(包括目錄)是否存在,如果是,則返回 true。 | [ -e $file ] 返回?true。 |
總結
以上是生活随笔為你收集整理的Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Shell替换:Shell变量替换,命令
- 下一篇: Shell注释