Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux Shell 判斷結構全解析:test、[ ]、[[ ]]、(( )) 與 let

編輯:Linux 系統常見問題解答

核心判斷邏輯

Shell 判斷本質是檢查命令退出狀態碼:0 = 真 (成功),非 0 = 偽 (失敗)。if 可直接跟任意命令:

if grep -q "root" /etc/passwd; then echo "root exists"; fi

四種測試構造對比

構造類型特性適用場景
test expr / [ expr ]命令/內建POSIX 標準,參數分詞、文件名擴展生效,需轉義 < > (重定向)最大兼容性,腳本移植
[[ expr ]]關鍵字 (Bash 2.02+)無詞分裂/路徑擴展,支持 && || < > =~ 正則,變量無需雙引號Bash/Zsh 專用,推薦日常使用
(( expr ))關鍵字算術上下文,C 風格運算符,非零為真,支持 ++ -- ** << >>數值比較、計數器、位運算
let expr內建命令同 (( )),但需轉義特殊字符,返回值同算術結果賦值運算、簡單計算

常用測試運算符速查

# 文件測試 (test/[]) -e 存在 -f 普通文件 -d 目錄 -r/w/x 可讀/寫/執行 -s 非空 -L 符號鏈接 -nt/-ot 比較修改時間# 字符串測試 (推薦 [[)  -z 空串 -n 非空  ==/!= 模式匹配  =~ 正則匹配  < / > 字典序# 數值比較 (test/[])  -eq -ne -lt -le -gt -ge# 數值比較 ((/let))  == != < <= > >=

最佳實踐建議

  1. 默認用 [[ ]]:安全、功能豐富、可讀性高。
  2. 純算術用 (( )):if (( count > 10 ))、for ((i=0;i<10;i++))。
  3. 移植性腳本用 [ ]:嚴格 POSIX,避免 Bashism。
  4. 變量在 [ ] 中必須雙引號:[ -n "$var" ] 防止空值語法錯誤;[[ ]] 無此要求。
  5. 組合條件:[[ -f $file && $size -gt 100 ]] (推薦) vs [ -f "$file" -a "$size" -gt 100 ] (舊式)。
Copyright © Windows教程網 All Rights Reserved