1.判斷語法
a) test 條件表達式
b) [ 條件表達式 ]
c) [[ 條件表達式 ]] 可匹配正則 =~
d) 判斷后執行多個命令
[ 條件1 ] && {
命令1
命令2
}
例如:
[ 1 -eq 2 ]&&{
echo aa;
echo bb;
}||{
echo cc
echo dd
}
man test去查看,很多的參數都用來進行條件判斷
2.文件類型判斷
-e 是否存在 不管是文件還是目錄,只要存在,條件就成立 -f 是否為普通文件 -d 是否為目錄 -S socket -p pipe -c character -b block -L 軟link
3.文件內容判斷
-s 是否為非空文件
! -s 表示空文件
4.文件權限判斷
-r 當前用戶對其是否可讀 -w 當前用戶對其是否可寫 -x 當前用戶對其是否可執行 -u 是否有suid -g 是否sgid -k 是否有t位
5.兩個文件的比較判斷
file1 -nt file2 比較file1是否比file2新 file1 -ot file2 比較file1是否比file2舊 file1 -ef file2 比較是否為同一個文件,或者用於判斷硬連接,是否指向同一個inode
6.整數之間的判斷
-eq 相等 -ne 不等 -gt 大於 -lt 小於 -ge 大於等於 -le 小於等於
7.字符串之間的判斷
-z 是否為空字符串 字符串長度為0,就成立
-n 是否為非空字符串 只要字符串非空,就是成立
string1 = string2 是否相等 --等號兩邊要有空格
string1 != string2 不等
! 結果取反
注意
[ "$1" = "abc" ] --判斷字符是否相等,變量也要用雙引號
8.多重條件判斷
邏輯判斷符號:
-a 和 && 邏輯與
只有兩個條件都成立,整個大條件才成立
[ 1 -eq 1 ] && [ 2 -ne 3 ]
[ 1 -eq 1 -a 2 -ne 3 ]
-o 和 || 邏輯或
只要其中一個條件成立,整個大條件就成立
[ 1 -eq 1 -o 2 -ne 2 ]
[ 1 -eq 1 ] || [ 2 -ne 2 ]
! 邏輯非 優先級最低
-a 優先級 比 -o 優先級要高
[[]] 和(())中可以使用&& || 不能使用 -a -o

9.實例
# [ $(id -u) -eq 0 ] && echo "當前是超級用戶" --id -u username 可以查看用戶id
$ [ $UID -eq 0 ] && echo "當前是超級用戶" || echo "you不是超級用戶"
# ((1==2));echo $? --C語言風格的數值比較
# ((1>=2));echo $?
題目:輸入一個路徑,判斷路徑是否存在,而且輸出是文件還是目錄,如果是鏈接文件,還得輸出是有效的連接還是無效的連接
思路:鏈接文件也屬於文件,所以先判斷鏈接文件,再去判斷是否為文件
#!/bin/bash
read -p "Input your path:" path
if [ -e $path -a -L $path ];then
echo "$0 is link file"
elif [ ! -e $path ] && [ -L $path ];then
echo "$0 is not effctive link file"
elif [ -d $path ];then
echo "$0 is a dirctory"
elif [ -f $path ];then
echo " $0 is file"
else
echo "$0 is other file"
fi
ls -L dir -L可以判斷軟鏈接
--無效鏈接用-e判斷會不存在
-L 如果遇到性質為符號鏈接的文件或目錄,直接列出該鏈接所指向的原始文件或目錄;
