條件測試基礎

條件測試通過$?返回值判斷命令執行狀態,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
 

實用腳本示例
  1. 網絡檢測腳本

ping -c 3 -W 2 $1 &> /dev/null && echo "$1在線" || echo "$1離線"
 

  1. 分數評級腳本

read -p "輸入分數:" score
if [ $score -ge 85 ]; then  
    echo "優秀"  
elif [ $score -ge 70 ]; then  
    echo "合格"  
else  
    echo "不合格"  
fi
 

  1. 服務管理case示例

case $1 in  
start) systemctl start service ;;  
stop)  systemctl stop service ;;  
*)     echo "用法: $0 {start|stop}"  
esac
 

注意事項
  • [ ]test的別名,要求嚴格空格分隔
  • [[ ]]是Bash擴展,支持更靈活的條件(如&&||
  • 算術比較推薦使用(( )),字符串操作推薦[[ ]]
  • 變量引用始終加雙引號避免空格分割問題