Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux Shell 邏輯運算子與條件判斷式完整解析:test、[]、[[]] 效能比較

編輯:Linux 教學

一、邏輯運算子分類

1. 檔案與目錄偵測

運算子用途
-f偵測檔案存在
-d偵測目錄存在
-b區塊裝置
-c字元裝置
-SSocket
-L符號連結
-e檔案/目錄/裝置存在

2. 程式屬性偵測

運算子用途
-G有效 GID 擁有
-O有效 UID 擁有
-p命名管道/FIFO

3. 檔案權限屬性

運算子用途
-r/-w/-x可讀/可寫/可執行
-s非空檔案
-u/-g/-kSUID/SGID/sticky bit

4. 兩檔案比較

運算子含義
file1 -nt file2file1 較新
file1 -ot file2file1 較舊
file1 -ef file2同一檔案(hard link)

5. 邏輯與比較運算子

運算子含義適用場景
= / !=等於/不等於整數或字串;在 [] 中僅字串
< / >小於/大於整數比較;在 [] 中不可用(視為字串)
-eq/-ne/-lt/-gt/-le/-ge整數比較整數專用
-a / -oAND / OR邏輯表示式內部
&& / ||AND / OR命令列或 [[]] 內部
-z / -n空/非空字串字串檢查

二、條件判斷式三種形式

1. test 指令

test EXPRESSION
test 1 = 1 && echo 'ok'
test -d /etc && echo 'ok'
if test 1 = 1; then echo 'ok'; fi

注意:所有運算元與運算子必須以空白分隔。

2. [] 單中括號(POSIX 標準)

[ 1 -eq 1 ] && echo 'ok'
[ 2 -gt 1 -a 3 -lt 4 ] && echo 'ok'   # 使用 -a -o
[ 2 -gt 1 && 3 -lt 4 ] && echo 'ok'   # 錯誤![] 不支援 && ||

在 [] 中 < > 需轉義 \< \>,且為字串比較(ASCII 碼)。

3. [[]] 雙中括號(Bash 擴充,推薦)

[[ 2 < 3 ]] && echo 'ok'           # 直接支援 < >,字串比較
[[ 2 < 3 && 4 > 5 ]] && echo 'ok'  # 支援 && ||

[[]] 為 [] 擴充,相容 < > 等運算子,無需轉義,仍為字串比較。

三、效能比較

$ time (for m in {1..100000}; do test -d .; done)
real 0m0.658s

$ time (for m in {1..100000}; do [ -d . ]; done)
real 0m0.609s

$ time (for m in {1..100000}; do [[ -d . ]]; done)
real 0m0.311s

結論:[[]] 最快(約為 [] 的 2 倍),功能最完整。不考慮舊版 Bash/Sh 相容性時,條件判斷首選 [[]]。

Copyright © Windows教程網 All Rights Reserved