Shell指令碼程式設計基礎之shell指令碼條件測試命令

2022-07-01 11:51:08 字數 3880 閱讀 4211

注意:表示式前後必須有空白字元

[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" [email protected]

[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 !" [email protected]

[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...