test(或 [ ])是 Shell 腳本中進行條件判斷的核心命令,支援檔案屬性、字串比較、整數比較等測試。本文整理常用檔案測試運算子、返回值機制與實戰範例,幫助你撰寫健壯的條件判斷邏輯。

0 代表真(True/成功),非零代表假(False/失敗/錯誤碼)。echo $?test -f file ⇔ [ -f file ](注意括號內側須有空格)。| 運算子 | 說明 | |
|---|---|---|
| -e | 檔案/目錄存在 | |
| -f | 一般檔案 | |
| -d | 目錄 | |
| -r | 可讀 | |
| -w | 可寫 | |
| -x | 可執行 | |
| -s | 檔案大小 > 0 | |
| -L / -h | 符號連結 | |
| -S | Socket | |
| -b | 區塊裝置 | |
| -c | 字元裝置 | |
| -p | 命名管道 (FIFO) | |
| -O | 擁有者為當前使用者 | |
| -G | 群組為當前群組 | |
| -nt | file1 比 file2 新 | |
| -ot | file1 比 file2 舊 | |
| -ef | 同一 inode (硬連結) |
| 類型 | 運算子 | 說明 |
|---|---|---|
| 字串 | = / != | 相等 / 不相等 |
| -z | 長度為零 | |
| -n | 長度非零 | |
| < / > | 字典序比較(需在 [[ ]] 中使用) | |
| =~ | 正則比對(需 [[ ]]) | |
| 整數 | -eq / -ne | 等於 / 不等於 |
| -lt / -le | 小於 / 小於等於 | |
| -gt / -ge | 大於 / 大於等於 |
[[ ]](Bash/Zsh/Ksh),支援 && || < > =~ 且不需轉義。"$VAR",避免空值導致語法錯誤。-e 先確認存在,再測試型別/權限。熟練掌握 test/[ ]/[[ ]] 的檔案測試、字串/整數比較與返回值判斷,是撰寫可靠 Shell 腳本的基石。建議收藏常用運算子表,實作時速查。