shell測試判斷
阿新 • • 發佈:2018-11-25
測試
測試結構
測試命令一般有2種方式:
test
test expression
- [ ]
bash
[ expression ]
這種方式一般與if case while配合使用
整數比較運算子
運算子 | 描述 | 示例 |
---|---|---|
num1 -eq num2 | 等於 | [ 3 -eq $mynum ] |
num1 -ne num2 | 不等於 | [ 3 -ne $mynum ] |
num1 -lt num2 | 小於 | [ 3 -lt $mynum ] |
num1 -le num2 | 小於或等於 | [ 3 -le $mynum ] |
num1 -gt num2 | 大於 | [ 3 -gt $mynum ] |
num1 -ge num2 | 大於或等於 | [ 3 -ge $mynum ] |
字串運算子
運算子 | 描述 | 示例 |
---|---|---|
-z string | 如果 string 長度為零,則為真 | [ -z “$myvar” ] |
-n string | 如果 string 長度非零,則為真 | [ -n “$myvar” ] |
string1 = string2 | 如果 string1 與 string2 相同,則為真 | [ “$myvar” = “one two three” ] |
string1 != string2 | 如果 string1 與 string2 不同,則為真 | [ “$myvar” != “one two three” ] |
string | 判斷字串是否為空 | [ $str ] |
檔案操作符
運算子 | 描述 | 示例 |
---|---|---|
-e filename | 如果 filename 存在,則為真 | [ -e /var/log/syslog ] |
-d filename | 如果 filename 為目錄,則為真 | [ -d /tmp/mydir ] |
-f filename | 如果 filename 為常規檔案,則為真 | [ -f /usr/bin/grep ] |
-L filename | 如果 filename 為符號連結,則為真 | [ -L /usr/bin/grep ] |
-r filename | 如果 filename 可讀,則為真 | [ -r /var/log/syslog ] |
-w filename | 如果 filename 可寫,則為真 | [ -w /var/mytmp.txt ] |
-x filename | 如果 filename 可執行,則為真 | [ -L /usr/bin/grep ] |
filename1 -nt filename2 | 如果 filename1 比 filename2 新,則為真 | [ /tmp/install/etc/services -nt /etc/services ] |
filename1 -ot filename2 | 如果 filename1 比 filename2 舊,則為真 | [ /boot/bzImage -ot arch/i386/boot/bzImage ] |
邏輯運算子
運算子 | 描述 | 示例 |
---|---|---|
! expression | not | |
expr1 -a expr2 | and | |
expr1 -o expr2 | or |
判斷
簡單if結構
#then不另起行
if [ "$aa" = "$bb" -o "$cc" = "$dd" ] ; then
echo "yes"
fi
#then 另起行
if [ "$aa" = "$bb" -o "$cc" = "$dd" ]
then
echo "yes"
fi
exit命令
exit status
引數被儲存在$?變數中
if/else結構
if [ "$aa" = "$bb" -o "$cc" = "$dd" ]; then
echo "yes"
else
echo "no"
fi
if/else巢狀
if/elif/else巢狀
if [ "$aa" = "$bb" -o "$cc" = "$dd" ]
then
echo "yes"
elif [ "$aa" = 3 ]
echo "no"
fi
case結構
echo 'Input a number between 1 to 4'
echo 'Your number is:\c'
read aNum
case $aNum in
1) echo 'You select 1'
#-----注意;;
;;
2) echo 'You select 2'
;;
3) echo 'You select 3'
;;
4) echo 'You select 4'
;;
*) echo 'You do not select a number between 1 to 4'
;;
esac
運算子
算數運算子
運算子 | 說明 | 舉例 |
---|---|---|
+ | 加法 | expr $a + $b 結果為 30。 |
- | 減法 | expr $a - $b 結果為 10。 |
* | 乘法 | expr $a \* $b 結果為 200。 |
/ | 除法 | expr $b / $a 結果為 2。 |
% | 取餘 | expr $b % $a 結果為 0。 |
** | 取冪 | 5**3 |
= | 賦值 | a=$b 將把變數 b 的值賦給 a。 |
== | 相等。 | 用於比較兩個數字,相同則返回 true。 [
|
!= | 不相等。用於比較兩個數字,不相同則返回 true。 | [
|
算數符合運算子
運算子 | 說明 | 舉例 |
---|---|---|
+= | 加法 | expr $a + $b 結果為 30。 |
-= | 減法 | expr $a - $b 結果為 10。 |
*= | 乘法 | expr $a \* $b 結果為 200。 |
/= | 除法 | expr $b / $a 結果為 2。 |
%= | 取餘 | expr $b % $a 結果為 0。 |
**= | 取冪 | 5**3 |
位運算子
運算子 | 說明 | 舉例 |
---|---|---|
<< | 左移 | value=4>>2 4左移2位,value值為16 |
>> | 右移 | value=8<<2 8右移2位,value值為2 |
& | 按位與 | value=8&&4 8按位與4,value值為0 |
| | 按位或 | value=8 |
\~ | 按位非 | value=~8 按位非8,value值為-9 |
^ | 按位異或 | value=10^3 10按位異或3,value值為9 |
自增自減運算子
i++運算後加1,i–運算後減1
++i運算前加1,–i運算前減1
數字常量
Linux Shell預設將數字作為十進位制進行處理,當使用0字首表示八進位制,0x字首表示十六進位制,同時可以使用num#形式
let "num=40"
let "num=027"
let "num=0x35"
let "num=2#11111000"
let "num=8#2735"
let "num=16#ffee"