條件測試基礎
條件測試通過$?返回值判斷命令執行狀態,0表示成功,非0表示失敗。
兩種測試格式:
test 條件表達式[ 條件表達式 ](方括號內必須保留空格)
文件測試操作
常用操作符:
-e:文件/目錄存在性-d:是否為目錄-f:是否為普通文件-rwx:讀寫執行權限-L:是否為符號鏈接
示例:
[ -f /etc/passwd ] && echo "文件存在"
數值比較
操作符:
-eq(等於)-ne(不等於)-gt(大於)-lt(小於)-ge(大於等於)-le(小於等於)
示例:
[ $a -gt 10 ](( $a > 10 ))(算術擴展語法)
字符串比較
關鍵操作:
=或==:字符串相等!=:字符串不等-z:字符串為空-n:字符串非空
示例:
[ "$str" = "hello" ]注意:變量建議用雙引號包裹,避免空格導致語法錯誤。
邏輯測試
組合條件方式:
-a或&&:邏輯與-o或||:邏輯或!:邏輯非
示例:
[ $a -gt 1 -a $a -lt 5 ][[ $a > 1 && $a < 5 ]](推薦使用[[ ]]避免語法問題)
流程控制結構
單分支if:
if [ 條件 ]; then
命令序列
fi
雙分支if:
if [ 條件 ]; then
命令序列1
else
命令序列2
fi
多分支if:
if [ 條件1 ]; then
命令序列1
elif [ 條件2 ]; then
命令序列2
else
默認命令序列
fi
case語句:
case $變量 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
*)
默認命令序列
esac
實用腳本示例
- 網絡檢測腳本:
ping -c 3 -W 2 $1 &> /dev/null && echo "$1在線" || echo "$1離線"
- 分數評級腳本:
read -p "輸入分數:" score
if [ $score -ge 85 ]; then
echo "優秀"
elif [ $score -ge 70 ]; then
echo "合格"
else
echo "不合格"
fi
- 服務管理case示例:
case $1 in
start) systemctl start service ;;
stop) systemctl stop service ;;
*) echo "用法: $0 {start|stop}"
esac
注意事項
[ ]是test的別名,要求嚴格空格分隔[[ ]]是Bash擴展,支持更靈活的條件(如&&、||)- 算術比較推薦使用
(( )),字符串操作推薦[[ ]] - 變量引用始終加雙引號避免空格分割問題