test 檔案運算子
test 檔案運算子
利用這些運算子,您可以在程式中根據對檔案型別的評估結果執行不同的操作:test 檔案運算子利用這些運算子,您
-b file 如果檔案為一個塊特殊檔案,則為真
-c file 如果檔案為一個字元特殊檔案,則為真不同的操作: -b file 如果檔案為
-d file 如果檔案為一個目錄,則為真
-e file 如果檔案存在,則為真
-f file 如果檔案為一個普通檔案,則為真一個塊特殊檔案,則為真 -c file
-g file 如果設定了檔案的 SGID 位,則為真
-G file 如果檔案存在且歸該組所有,則為真
-k file 如果設定了檔案的粘著位,則為真test 檔案運算子利用這些運算子,您
-O file 如果檔案存在並且歸該使用者所有,則為真
-p file 如果檔案為一個命名管道,則為真
-r file 如果檔案可讀,則為真不同的操作: -b file 如果檔案為
-s file 如果檔案的長度不為零,則為真
-S file 如果檔案為一個套接字特殊檔案,則為真
-t fd 如果 fd 是一個與終端相連的開啟的檔案描述符(fd 預設為 1),則為真可以在程式中根據對檔案型別的評估結果執行
-u file 如果設定了檔案的 SUID 位,則為真
-w file 如果檔案可寫,則為真
-x file 如果檔案可執行,則為真一個塊特殊檔案,則為真 -c file
以下示例顯示了此簡單操作的執行情況:
test 檔案運算子利用這些運算子,您$ ls -l
total 33
drwxr-xr-w 2 root root 1024 Dec 5 05:05 LST一個塊特殊檔案,則為真 -c file
-rw-rw-rw- 1 emmett users 27360 Feb 6 07:30 evan
-rwsrwsrwx 1 root root 152 Feb 6 07:32 hannah
drwxr-xr-x 2 emmett users 1024 Feb 6 07:31 karentest 檔案運算子利用這些運算子,您
-rw------- 1 emmett users 152 Feb 6 07:29 kristin
-rw-r--r-- 1 emmett users 152 Feb 6 07:29 spencer
$test 檔案運算子利用這些運算子,您
$ test -r evan
$ echo $?一個塊特殊檔案,則為真 -c file
0
$ test -r walter一個塊特殊檔案,則為真 -c file
$ echo $?
1
$不同的操作: -b file 如果檔案為
由於第一次評估為真 — 檔案存在且可讀 — 返回值為真,或 0。由於第二次評估的檔案不存在,該值為假,返回值不為零。將值指定為零或非零很重要,因為在失敗時不會始終返回 1(雖然這是通常返回的值),可能返回一個非零值。
不同的操作: -b file 如果檔案為正如開頭所提到的,除了使用 test 外,您還可以用方括號 [ ] 將命令括住來向 shell 發出同樣的命令 — 如下所示:
$ [ -w evan ]如果檔案為一個字元特殊檔案,則為真 -d
$ echo $?
0
$ [ -x evan ]test 檔案運算子利用這些運算子,您
$ echo $?
1
$可以在程式中根據對檔案型別的評估結果執行
同樣,第一個表示式為真,第二個表示式為假 — 正如返回值所指示的那樣。您還可以使用以下命令將兩個檔案彼此進行比較:
可以在程式中根據對檔案型別的評估結果執行file1 -ef file2 測試以判斷兩個檔案是否與同一個裝置相連,是否擁有相同的 inode 編號
file1 -nt file2 測試以判斷第一個檔案是否比第二個檔案更新(由修改日期決定)
file1 -ot file2 測試以判斷第一個檔案是否比第二個檔案更舊test 檔案運算子利用這些運算子,您
以下示例顯示了使用這些運算子比較檔案的結果:
test 檔案運算子利用這些運算子,您$ [ evan -nt spencer ]
$ echo $?
0一個塊特殊檔案,則為真 -c file
$ [ karen -ot spencer ]
$ echo $?
1一個塊特殊檔案,則為真 -c file
$
名為 evan 的檔案比名為 spencer 的檔案更新,因而評估為真。類似地,名為 karen 的檔案比名為 spencer 的檔案更新,因此該評估為假。test 檔案運算子利用這些運算子,您
字串比較運算子
一個塊特殊檔案,則為真 -c file 如標題所示,這組函式比較字串的值。您可以檢查它們是否存在、是否相同或者是否不同。
String 測試以判斷字串是否不為空不同的操作: -b file 如果檔案為
-n string 測試以判斷字串是否不為空;字串必須為 test 所識別
-z string 測試以判斷字串是否為空;字串必須為 test 所識別
string1 = string2 測試以判斷 string1 是否與 string2 相同不同的操作: -b file 如果檔案為
string1 != string2 測試以判斷 string1 是否與 string2 不同
對任何變數進行的最有用的測試之一是判斷它的值是否不為空,可以簡單地將其放在 test 命令列中執行這種測試,如下例所示:test 檔案運算子利用這些運算子,您
$ test "$variable"
不同的操作: -b file 如果檔案為強烈建議進行此種測試時用雙引號將變數括住,以讓 shell 識別變數(即使變數為空)。預設情況下執行的基本字串評估和 -n 測試從功能上講是相同的,如以下示例所示:
#example1
if test -n "$1"test 檔案運算子利用這些運算子,您
then
echo "$1"
fi不同的操作: -b file 如果檔案為
執行以上例子中的程式碼將根據 $1 是否存在給出以下結果:
test 檔案運算子利用這些運算子,您$ example1 friday
friday
$不同的操作: -b file 如果檔案為
$ example1
$
如果檔案為一個字元特殊檔案,則為真 -d如果將程式碼更改為以下形式,則結果將相同:
#example2一個塊特殊檔案,則為真 -c file
if test "$1"
then
echo "$1"不同的操作: -b file 如果檔案為
fi
如下所示:可以在程式中根據對檔案型別的評估結果執行
$ example2 friday
friday可以在程式中根據對檔案型別的評估結果執行
$
$ example2
$如果檔案為一個字元特殊檔案,則為真 -d
所有這些表明,通常不需要 -n,它代表預設操作。
不同的操作: -b file 如果檔案為要從一個不同的角度來檢視各種可能性,您可以用另一個選項來替換 -n,並檢查該值是否為空(相對於非空)。這可以用 -z 選項來實現,程式碼為:
#example3test 檔案運算子利用這些運算子,您
if test -z "$1"
then
echo "no values were specified"不同的操作: -b file 如果檔案為
fi
執行如下:不同的操作: -b file 如果檔案為
$ example3
no values were specified如果檔案為一個字元特殊檔案,則為真 -d
$ example3 friday
$
如果檔案為一個字元特殊檔案,則為真 -d如果在沒有命令列引數的情況下執行該程式,而表示式評估為真,那麼將執行程式塊中的文字。如果在命令列中有值,則指令碼退出,不執行任何操作。將評估操作放在指令碼的開頭非常有用,這可以在可能產生錯誤的進一步處理之前預先檢查變數值。
其餘的字串運算子對兩個變數/字串之間的精確匹配或其中的差異(您也可以稱之為等價性和“不等價性”)進行評估。第一個例子對匹配進行測試:不同的操作: -b file 如果檔案為
$ env
LOGNAME=emmett不同的操作: -b file 如果檔案為
PAGER=less
SHELL=/bin/bash
TERM=linux一個塊特殊檔案,則為真 -c file
$
$ [ "$LOGNAME" = "emmett" ]
$ echo $?可以在程式中根據對檔案型別的評估結果執行
0
$
$ [ "$LOGNAME" = "kristin" ]不同的操作: -b file 如果檔案為
$ echo $?
1
$test 檔案運算子利用這些運算子,您
或者,該評估可以以指令碼的形式用於決定是否執行指令碼:
如果檔案為一個字元特殊檔案,則為真 -d#example4
if [ "$LOGNAME" = "emmett" ]
then如果檔案為一個字元特殊檔案,則為真 -d
echo "processing beginning"
else
echo "incorrect user"test 檔案運算子利用這些運算子,您
fi
這種方法可以用來尋找任意的值(如終端型別或 shell 型別),在允許指令碼執行之前這些值必須匹配。請注意,= 或 != 運算子的優先順序高於其它大多數可指定選項,且要求必須伴有表示式。因此,除了比較字串的選項之外,= 或 != 都不能和檢查某種東西(如可讀檔案、可執行檔案或目錄)的存在性的選項一起使用。
相關文章
- 運算子 運算子
- php運算子 比較運算子 邏輯運算子 三元運算子PHP
- 運算子-賦值運算子賦值
- MySQL的四種運算子(算術運算子、比較運算子、邏輯運算子和位運算子)MySql
- 開心檔之C++ 運算子C++
- 8.Golang中的運算子-算術運算子、關係運算子、邏輯運算子、賦值運算子Golang賦值
- 運算子的關係,什麼叫一元運算子,二元運算子,三元運算子,運算子優先順序,以及運算子的
- 運算子
- javascript中&&運算子和||運算子的使用JavaScript
- 算術運算子裡的特殊運算子
- Python 運算子優先順序 運算子Python
- Python學習-算術運算子,賦值運算子和複合運算子Python賦值
- java零基礎自學第一天②,運算子:表示式,算術運算子,+操作,賦值運算子,自增自減運算子,關係運算子,邏輯運算子,三元運算子Java賦值
- php運算子運用之型別運算子該如何使用PHP型別
- C++ 迭代器運算子 箭頭運算子->C++
- JS-11 運算子之布林運算子JS
- Java 運算子Java
- Java運算子Java
- js運算子JS
- JavaScript in 運算子JavaScript
- 身份運算子
- JavaScript運算子JavaScript
- oracle運算子Oracle
- JavaScript -= 運算子JavaScript
- JavaScript += 運算子JavaScript
- JavaScript *= 運算子JavaScript
- JavaScript %= 運算子JavaScript
- JavaScript |= 運算子JavaScript
- JavaScript <<= 運算子JavaScript
- JavaScript >>>= 運算子JavaScript
- JavaScript >>= 運算子JavaScript
- JavaScript &= 運算子JavaScript
- JavaScript ^= 運算子JavaScript
- JavaScript /= 運算子JavaScript
- SHELL運算子
- 位運算子
- mysql運算子MySql
- Python運算子Python
- 如何在VScode 中 除錯 ts 檔案 Unit testVSCode除錯