注意:表示式前後必須有空白字元
[05:19:35 root@c8-3-55 ~]#help test
test: test [表示式]
對條件表示式進行估值。
根據 expr 表示式的估值以狀態 0 (真) 或 1 (偽) 退出。
表示式可以是一元或者二元的。一元表示式通常用於檢測
檔案狀態。同時還有字串操作符和數字比較操作符。
檔案操作符:
-a 檔案 如果檔案存在則為真。
-b 檔案 如果檔案為塊特殊檔案則為真。
-c 檔案 如果檔案為字元特殊檔案則為真。
-d 檔案 如果檔案為目錄則為真。
-e 檔案 如果檔案存在則為真。
-f 檔案 如果檔案存在且為常規檔案則為真。
-g 檔案 如果檔案的組屬性設定開啟則為真。
-h 檔案 如果檔案為符號鏈結則為真。
-l 檔案 如果檔案為符號鏈結則為真。
-k 檔案 如果檔案的粘滯 (sticky) 位設定則為真。
-p 檔案 如果檔案為命名管道則為真。
-r 檔案 如果檔案對於您是可讀的則為真。
-s 檔案 如果檔案存在且不為空則為真。
-s 檔案 如果檔案是套接字則為真。
-t 檔案描述符 如果檔案描述符在乙個終端上開啟則為真。
-u 檔案 如果檔案的使用者數行設定開啟則為真。
-w 檔案 如果檔案對您是可寫的則為真
-x 檔案 如果檔案對您是可執行的則為真。
-o 檔案 如果檔案是被您所有的則為真。
-g 檔案 如果檔案被您的組所有則為真。
-n 檔案 如果檔案上次被讀取之後修改過則為真。
file1 -nt file2 如果 file1 檔案新於 file2 檔案則為真(根據
修改日期)。
file1 -ot file2 如果 file1 檔案舊於 file2 檔案則為真。
file1 -ef file2 如果 file1 檔案是 file2 檔案的硬鏈結則為真。
字串操作符
-z 字串 如果字串為空則為真。
-n 字串
字串 如果字串不為空則為真。
string1 = string2
如果 string1 和 string2 字串相同則為真。
string1 != string2
如果 string1 和 string2 字串不相同則為真。
string1 < string2
如果按字典排序 string1 在 string2 串之前則為真。
string1 > string2
如果按字典排序 string1 在 string2 串之前則為真。
其他操作符:
-o 選項 如果指定 shell 選項啟用則為真。
-v var 如果指定 shell 變數 var 已賦值則為真。
-r var 如果指定 shell 變數 var 已賦值且為名稱引用則為真。
! expr 如果表示式 expr 為假則為真。
expr1 -a expr2 如果 expr1 和 expr2 都為真則為真。
expr1 -o expr2 如果 expr1 和 expr2 有乙個為真則為真。
arg1 op arg2 算術測試。op操作符可以是 -eq、-ne、
-lt、-le、-gt、或 -ge 中的乙個。
二元算術操作返回真,如果 arg1 引數等於、不等於、
小於、小於等於、大於、或者大於等於 arg2 引數。
退出狀態:
如果 expr 表示式估值為真則返回成功;如果 expr 表示式估值
為假或者使用了無效的引數則返回失敗。
[05:20:45 root@c8-3-55 ~]#help [
[: [ 引數... ]
估值條件表示式。
是內建命令 "test" 的同義詞,但是最後乙個引數必須是
字元 `]',以匹配起始的 `['。
[05:22:27 root@c8-3-55 ~]#x=10 ;y=20 ;test $x = $y ;echo $?
1[05:22:41 root@c8-3-55 ~]#x=20 ;y=20 ;test $x = $y ;echo $?
0[05:22:49 root@c8-3-55 ~]#x=20 ;y=20 ;[ $x = $y ];echo $?
0
[05:28:32 root@c8-3-55 ~]#a=10;echo $a;[ -z "$a" ];echo $?101
[05:28:45 root@c8-3-55 ~]#a=10;echo $a;unset a;[ -z "$a" ];echo $?
100
1 #!/bin/bash
2 wl=75
3 used=`df | grep '^/dev/sd' | grep -eo '[0-9]+%' | tr -d % | sort -nr | head -1`
4 [ $used -ge $wl ] && echo disk is "$wl"% used! | mail -s "disk warning" 123456@789.com
[05:55:49 root@c8-3-55 ~]#vim cheak_ip.sh
[05:56:25 root@c8-3-55 ~]#cat cheak_ip.sh
#!/bin/bash
ip=$1
ping -c5 -w5 $ip &> /dev/null && echo $ip is up || echo $ip is down | mail -s "host $ip is down !" 12345@678.com
[05:56:32 root@c8-3-55 ~]#bash cheak_ip.sh 10.0.0.55
10.0.0.55 is up
echo 10.0.0. | tr -s ' ' '\n' > ip.log;cat ip.log
支援萬用字元和正規表示式
[06:20:01 root@c8-3-55 ~]#help [[
[[ ... ]]: [[ 表示式 ]]
執行條件命令。
根據條件表示式 expression 的估值返回狀態0或1。表示式按照
`test' 內建的相同條件組成,或者可以有下列操作符連線而成:
( expression ) 返回 expression 表示式的值
! expression 如果 expression表示式為假則為真,否則為假
expr1 && expr2 如果 expr1 和 expr2 表示式均為真則為真,否則為假
expr1 || expr2 如果 expr1 和 expr2 表示式中有乙個為真則為真,否則為假
當使用 `==' 和 `!=' 操作符時,操作符右邊的字串被用作模式並且執行乙個
匹配。當使用 `=~' 操作符時,操作符右邊的字串被當作正規表示式來進行
匹配。操作符 && 和 || 將不對 expr2 表示式進行估值,如果 expr1 表示式足夠確定
整個表示式的值。
退出狀態:
根據 expression 的值為0或1。
Shell指令碼程式設計基礎之shell指令碼退出狀態碼
exit 在指令碼中本身是退出的作用 根據程式執行的結果,返回對應的狀態碼,幫助實現條件判斷 21 15 48 root c8 3 55 grep q root etc passwd echo grep q admin etc passwd echo grep q root abc echo gre...
shell 程式設計 shell 指令碼基礎
shell 是乙個命令直譯器,它在作業系統的最外層,負責直接與使用者進行對話,把使用者的輸入解釋給作業系統,並處理各種各樣的作業系統的輸出結果,輸出到螢幕反饋給使用者。把 linux 命令或語句放在乙個檔案中,通過這個程式檔案去執行,這個程式為 shell 指令碼或 shell 程式 可以在指令碼中...
shell指令碼程式設計基礎
1.使用多個命令 2.建立shell指令碼檔案 shell指令碼中注釋一般以 開頭,shell指令碼不會處理注釋的行。但是,shell指令碼的第一行是例外。後的 會告訴shell用哪個shell來執行指令碼,shell會根據命令在檔案 現的先後順序進行處理。下面是建立指令碼名為demo的檔案。bin...