shell中判斷語句if中-z 和 -n
[ -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” 開啟則為真。
[ -z STRING ] “STRING” 的長度為零則為真。
[ -n STRING ] or [ STRING ] “STRING” 的長度為非零 non-zero則為真。
[ STRING1 == STRING2 ] 如果2個字符串相同。 “=” may be used instead of “==” for strict POSIX compliance則為真。
[ STRING1 != STRING2 ] 如果字符串不相等則為真。
[ STRING1 < STRING2 ] 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale則為真。
[ STRING1 > STRING2 ] 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale則為真。
[ ARG1 OP ARG2 ] “OP” is one of -eq, -ne, -lt, -le, -gt or -ge. These arithmetic binary operators return true if “ARG1” is equal to, not equal to, less than, less than or equal to, greater than, or greater than or equal to “ARG2”, respectively. “ARG1” and “ARG2” are integers.
bash中如何實現條件判斷
-條件測試類型
-整數測試
-字符測試
-文件測試
條件測試的表達式
[ expression ] 括號兩端必須要有空格
[[ expression ]] 括號兩端必須要有空格
test expression
組合測試條件:
-a : and
-o : or
! : not
整數比較
-eq 測試兩個整數是否相等
-ne 測試兩個整數是否不等
-gt 測試一個數是否大於另一個數
-lt 測試一個數是否小於另一個數
-ge 大於或等於
-le 小於或等於
命令間的邏輯關系, 邏輯與:&& , 邏輯或:||
字符串比較
== 等於 兩邊要有空格
!= 不等
> 大於
< 小於
文件測試
-z string 測試指定字符是否為空,空着真,非空為假
-n string 測試指定字符串是否為不空,空為假 非空為真
-e FILE 測試文件是否存在
-f file 測試文件是否為普通文件
-d file 測試指定路徑是否為目錄
-r file 測試文件對當前用戶是否可讀
-w file 測試文件對當前用戶是否可寫
-x file 測試文件對當前用戶是都可執行
-z 是否為空 為空則為真
-a 是否不空
if語法
單分支if語句
if 判斷條件;then
statement1
statement2
.......
fi
雙分支的if語句:
if 判斷條件;then
statement1
statement2
.....
else
statement3
statement4
fi
注意:
if語句進行判斷是否為空
[ "$name” = "" ]
等同於
[ ! "$name" ]
[ -z "$name" ]
使用if語句的時候進行判斷如果是進行數值類的判斷,建議使用let(())進行判斷,對於字符串等使用test[ ] or [[ ]] 進行判斷
(())中變量是可以不使用$來引用的
for example:表述數字范圍的時候 可以使用if可以是使用case
if [ $x -gt 90 -o $x -lt 100 ]
case $x in
100)
9[0-9])
這個語句的意思是如果$name為空,那么X=X成立折執行下面的結果;
if [ "X$name" != "x" ]
寫腳本的時候很多時候需要用到回傳命令,$?如果上一個命令執行成功,回傳值為0,否則為1~255之間的任何一個,0為真,非0為假。
條件測試的寫法
1、執行一個命令的結果
if grep -q "rm" fs.sh;then
2、傳回一個命令執行結果的相反值
if !grep -q "rm" fs.sh;then
3、使用復合命令((算式))
if ((a>b));then
4、使用bash關鍵字 [[判斷式]]
if [[ str > xyz ]];then
5、使用內置命令:test 判斷式
if test "str" \> "xyz";then
6、使用內置命令:[判斷式] 類似test
if [ "str" \> "xyz" ];then
7、使用-a -o進行邏輯組合
[ -r filename -a -x filename ]
8、命令&&命令
if grep -q "rm" fn.sh && [ $a -lt 100 ];then
9、命令||命令
if grep -q "rm" fn.sh || [ $a -lt 100 ];then