1. 程式人生 > 其它 >shell中針對數字、filename字串等的判斷引數的總結

shell中針對數字、filename字串等的判斷引數的總結

shell中針對數字、filename字串等的判斷引數的總結,

檔案表示式

-e filename 如果 filename存在,則為真
-d filename 如果 filename為目錄,則為真
-f filename 如果 filename為常規檔案,則為真
-L filename 如果 filename為符號連結,則為真
-r filename 如果 filename可讀,則為真
-w filename 如果 filename可寫,則為真
-x filename 如果 filename可執行,則為真
-s filename 如果檔案長度不為0,則為真
-h filename 如果檔案是軟連結,則為真
filename1 -nt filename2 如果 filename1比 filename2新,則為真。
filename1 -ot filename2 如果 filename1比 filename2舊,則為真。
*linux 下使用man test指令檢視

整數條件表示式,大於,小於,shell裡沒有> 和< ,會被當作尖括號,只有-ge,-gt,-le,lt
-eq -ne -lt -nt只能用於整數,不適用於字串,字串等於用賦值號=

整數變量表達式
-eq 等於
-ne 不等於
-gt 大於
-ge 大於等於
-lt 小於
-le 小於等於

字串變量表達式
If [ $a = $b ] 如果string1等於string2,則為真, 字串允許使用賦值號做等號
if [ $string1 != $string2 ] 如果string1不等於string2,則為真
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 為空,則為真
if [ $sting ] 如果string 非空,返回0 (和-n類似)

邏輯非 ! 條件表示式的相反
if [ ! 表示式 ]
if [ ! -d $num ] 如果不存在目錄$num

邏輯與 –a 條件表示式的並列
if [ 表示式1 –a 表示式2 ]

邏輯或 -o 條件表示式的或
if [ 表示式1 –o 表示式2 ]
邏輯表示式

表示式與前面的= != -d –f –x -ne -eq -lt等合用
邏輯符號就正常的接其他表示式,沒有任何括號( ),就是並列
if [ -z "$JHHOME" -a -d $HOME/$num ]
注意邏輯與-a與邏輯或-o很容易和其他字串或檔案的運算子號搞混了
常用簡單語句:

&& 如果是“前面”,則“後面”
[ -f /var/run/dhcpd.pid ] && rm /var/run/dhcpd.pid 檢查 檔案是否存在,如果存在就刪掉
|| 如果不是“前面”,則後面
[ -f /usr/sbin/dhcpd ] || exit 0 檢驗檔案是否存在,如果不存在就退出


用簡化 if 和$1,$2,$3來檢測引數,不合理就呼叫help
[ -z "$1" ] && help 如果第一個引數不存在(-z 字串長度為0 )
[ "$1" = "-h" ] && help 如果第一個引數是-h,就顯示help

if [ -f file ] 如果檔案存在
if [ -d … ] 如果目錄存在
if [ -s file ] 如果檔案存在且非空
if [ -r file ] 如果檔案存在且可讀
if [ -w file ] 如果檔案存在且可寫
if [ -x file ] 如果檔案存在且可執行

整數變量表達式
if [ int1 -eq int2 ] 如果int1等於int2
if [ int1 -ne int2 ] 如果不等於
if [ int1 -ge int2 ] 如果>=
if [ int1 -gt int2 ] 如果>
if [ int1 -le int2 ] 如果<=
if [ int1 -lt int2 ] 如果<

字串變量表達式
If [ $a = $b ] 如果string1等於string2
字串允許使用賦值號做等號
if [ $string1 != $string2 ] 如果string1不等於string2
if [ -n $string ] 如果string 非空(非0),返回0(true)
if [ -z $string ] 如果string 為空
if [ $sting ] 如果string 非空,返回0 (和-n類似)

s​h​e​l​l​中​條​件​判​斷​i​f​中​的​-​a到​-​z​的​意​思:

主要可以分為三大類:

rwx

user,group,other

f,d,c,b,p,h


[ -a FILE ] 如果 FILE 存在則為真。
[ -b FILE ] 如果 FILE 存在且是一個塊特殊檔案則為真。
[ -c FILE ] 如果 FILE 存在且是一個字特殊檔案則為真。
[ -d FILE ] 如果 FILE 存在且是一個目錄則為真。
[ -e FILE ] 如果 FILE 存在則為真。
[ -f FILE ] 如果 FILE 存在且是一個普通檔案則為真。
[ -g FILE ] 如果 FILE 存在且已經設定了SGID則為真。
[ -h FILE ] 如果 FILE 存在且是一個符號連線則為真。
[ -k FILE ] 如果 FILE 存在且已經設定了粘制位則為真。
[ -p FILE ] 如果 FILE 存在且是一個名字管道(F如果O)則為真。
[ -r FILE ] 如果 FILE 存在且是可讀的則為真。
[ -s FILE ] 如果 FILE 存在且大小不為0則為真。

[ -t FD ] 如果檔案描述符 FD 開啟且指向一個終端則為真。
[ -u FILE ] 如果 FILE 存在且設定了SUID (set user ID)則為真。
[ -w FILE ] 如果 FILE 如果 FILE 存在且是可寫的則為真。
[ -x FILE ] 如果 FILE 存在且是可執行的則為真。
[ -O FILE ] 如果 FILE 存在且屬有效使用者ID則為真。
[ -G FILE ] 如果 FILE 存在且屬有效使用者組則為真。 [ -L FILE ] 如果 FILE 存在且是一個符號連線則為真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read則為真。
[ -S FILE ] 如果 FILE 存在且是一個套接字則為真。
[ FILE1 -nt FILE2 ] 如果 FILE1 has been changed more recently than FILE2,or 如果 FILE1 exists and FILE2 does not則為真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的裝置和節點號則為真。
[ -o OPTIONNAME ] 如果 shell選項 “OPTIONNAME” 開啟則為真。


EQ=Equal =
//等運算子,如果運算子兩邊相同則返回真,否則返回假;

NE(Not Equal to)
//不等運算子,如果運算子兩邊不等則返回真,否則返回假;

GE(Greater than or equal to)
//大於等於運算子,如果運算子兩邊左邊大於等於右邊則返回真,否則返回假;

GT(Greater than)
//大於運算子,如果運算子兩邊左邊大於右邊則返回真,否則返回假;

LE(Less than or equal to)
//小於等於運算子,如果運算子兩邊左邊小於等於右邊則返回真,否則返回假;

LT(Less than)
//小於運算子,如果運算子兩邊左邊大於右邊則返回真,否則返回假;

運算子:
算術運算子 + 、 - 、 * 、 / (或 div )和 % (或 mod )
關係運算符 == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge )
邏輯運算子 && (或 and )、 || (或 or )和 ! (或 not )
驗證運算子 empty