知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
表 22.1. 檔案目錄表達式
Primary | 意義 |
---|---|
[ -a FILE ] | 如果 FILE 存在則為真。 |
[ -b FILE ] | 如果 FILE 存在且是一個塊特殊檔案則為真。 |
[ -c FILE ] | 如果 FILE 存在且是一個字特殊檔案則為真。 |
[ -d FILE ] | 如果 FILE 存在且是一個目錄則為真。 |
[ -e FILE ] | 如果 FILE 存在則為真。 |
[ -f FILE ] | 如果 FILE 存在且是一個普通檔案則為真。 |
[ -g FILE ] | 如果 FILE 存在且已經設置了SGID則為真。 |
[ -h FILE ] | 如果 FILE 存在且是一個符號連接則為真。 |
[ -k FILE ] | 如果 FILE 存在且已經設置了粘制位則為真。 |
[ -p FILE ] | 如果 FILE 存在且是一個名字管道(F如果O)則為真。 |
[ -r FILE ] | 如果 FILE 存在且是可讀的則為真。 |
[ -s FILE ] | 如果 FILE 存在且大小不為0則為真。 |
[ -t FD ] | 如果檔案描述符 FD 打開且指向一個終端則為真。 |
[ -u FILE ] | 如果 FILE 存在且設置了SUID (set user ID)則為真。 |
[ -w FILE ] | 如果 FILE 如果 FILE 存在且是可寫的則為真。 |
[ -x FILE ] | 如果 FILE 存在且是可執行的則為真。 |
[ -O FILE ] | 如果 FILE 存在且屬有效用戶ID則為真。 |
[ -G FILE ] | 如果 FILE 存在且屬有效用戶組則為真。 |
[ -L FILE ] | 如果 FILE 存在且是一個符號連接則為真。 |
[ -N FILE ] | 如果 FILE 存在 and has been mod如果ied since it was last read則為真。 |
[ -S FILE ] | 如果 FILE 存在且是一個套 |
[ FILE1 -nt FILE2 ] | 如果 FILE1 has been changed more recently than FILE2, or 如果 FILE1 exists and FILE2 does not則為真。 |
[ FILE1 -ot FILE2 ] | 如果 FILE1 比 FILE2 要老, 或者 FILE2 存在且 FILE1 不存在則為真。 |
[ FILE1 -ef FILE2 ] | 如果 FILE1 和 FILE2 指向相同的設備和節點號則為真。 |
表 22.2. 字元串表達式
Primary | 意義 |
---|---|
[ -o OPTIONNAME ] | 如果 shell選項 “OPTIONNAME” 開啟則為真。 |
[ -z STRING ] | “STRING” 的長度為零則為真。 |
[ -n STRING ] or [ STRING ] | “STRING” 的長度為非零 non-zero則為真。 |
[ STRING1 == STRING2 ] | 如果2個字元串相同則為真。 |
[ STRING1 != STRING2 ] | 如果字元串不相等則為真。 |
[ STRING1 < STRING2 ] | 如果 “STRING1” sorts before “STRING2” lexicographically in the current locale則為真。 |
[ STRING1 > STRING2 ] | 如果 “STRING1” sorts after “STRING2” lexicographically in the current locale則為真。 |
[ ARG1 OP ARG2 ] | “OP” 為 -eq, -ne, -lt, -le, -gt or -ge. |
Arithmetic relational operators
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
表 22.3. 組合表達式
操作 | 效果 |
---|---|
[ ! EXPR ] | 如果 EXPR 是false則為真。 |
[ ( EXPR ) ] | 返回 EXPR的值。這樣可以用來忽略正常的操作符優先順序。 |
[ EXPR1 -a EXPR2 ] | 如果 EXPR1 and EXPR2 全真則為真。 |
[ EXPR1 -o EXPR2 ] | 如果 EXPR1 或者 EXPR2 為真則為真。 |
if [ ! -d /directory/to/check ]; then mkdir -p /directory/toc/check fi
例 22.4. Basic conditional example if .. then
#!/bin/bash if [ "foo" = "foo" ]; then echo expression evaluated as true fi
例 22.5. Conditionals with variables
#!/bin/bash T1="foo" T2="bar" if [ "$T1" = "$T2" ]; then echo expression evaluated as true else echo expression evaluated as false fi
(( $# != 1 )) && bool=0 || bool=${1} [[ -f /tmp/test ]] && echo "True" || echo "False"
case 高級用法, 匹配 Yes,YES,YeS,yES,yEs ...
read -p "Do you want to continue [Y/n]?" BOOLEAN case $BOOLEAN in [yY][eE][sS]) echo 'Thanks' $BOOLEAN ;; [yY]|[nN]) echo 'Thanks' $BOOLEAN ;; 'T'|'F') echo 'Thanks' $BOOLEAN ;; [Tt]ure|[Ff]alse) echo 'Thanks' $BOOLEAN ;; *) exit 1 ;; esac
例 22.6. case
case "$1" in start) start ;; stop) stop ;; status) status ;; restart) stop start ;; condrestart) condrestart ;; *) echo $"Usage: $0 {start|stop|restart|condrestart|status}" exit 1 esac