可以在Linux命令行上使用測試命令將一個元素與另一個元素進行比較,但它在BASH shell腳本中更常用作控制邏輯和程序流的條件語句的一部分。
一個基本的例子
您只需打開一個終端窗口即可嘗試這些命令。
測試1 -eq 2 &&迴聲“是”|| 迴聲“不”
上述命令可以細分如下:
- 測試 - 這意味著您即將進行比較
- 1 - 你要比較的第一個元素
- -eq(你如何比較,在這種情況下,你是在測試一個數字是否等於另一個數字)
- 2 - 您正在比較第一個元素的元素
- && - 如果結果為true,請運行以下語句
- echo“yes” - 如果比較返回true,則運行該命令
- || - 如果結果為假,請運行以下語句
- echo“no” - 如果比較返回false,則運行該命令
實質上,該命令比較1到2,並且它們匹配回顯“是”語句被執行,其顯示“是”,並且如果它們不匹配,回顯“否”語句顯示“否”。
比較數字
如果你比較的元素是數字解析,你可以使用下面的比較運算符:
- -eq - 值為1等於2
- -ge - 值1大於或等於值2
- -gt - 值1大於值2
- -le - 值1小於或等於值2
- -lt - 值1小於值2
- -ne - 值1不等於值2
例子:
測試1 -eq 2 &&迴聲“是”|| 迴聲“不”
(因為1不等於2,所以向屏幕顯示“否”)
測試1 -ge 2 && echo“yes”|| 迴聲“不”
(屏幕顯示“否”,因為1不大於或等於2)
測試1 -gt 2 &&迴聲“是”|| 迴聲“不”
(由於1不大於2,因此在屏幕上顯示“否”)
測試1 -le 2 &&迴聲“是”|| 迴聲“不”
(因為1小於或等於2,所以對屏幕顯示“是”)
測試1 -lt 2 &&迴聲“是”|| 迴聲“不”
(因為1小於或等於2,所以對屏幕顯示“是”)
測試1 -ne 2 &&迴聲“是”|| 迴聲“不”
(因為1不等於2,所以對屏幕顯示“是”)。
比較文字
如果您比較解析為字符串的元素,則可以使用以下比較運算符:
- = - 字符串1是否匹配字符串2
- != - 字符串1不同於字符串2
- -n - 是大於0的字符串長度
- -z - 是字符串長度0
例子:
測試“string1”=“string2”&&迴聲“是”|| 迴聲“不”
(因為“string1”不等於“string2”,所以在屏幕上顯示“no”)
測試“string1”!=“string2”&&迴聲“是”|| 迴聲“不”
(因為“string1”不等於“string2”,所以對屏幕顯示“yes”)
test -n“string1”&& echo“yes”|| 迴聲“不”
(對屏幕顯示“yes”,因為“string1”的字符串長度大於零)
測試-z“string1”&&迴聲“是”|| 迴聲“不”
(屏幕顯示“no”,因為“string1”的字符串長度大於零)
比較文件
如果您正在比較文件,則可以使用以下比較運算符:
- -ef - 文件是否具有相同的設備和inode編號(它們是否是相同的文件)
- -nt - 第一個文件比第二個文件更新
- -ot - 第一個文件比第二個文件早
- -b - 文件存在並且是特殊的塊
- -c - 文件存在並且是特殊字符
- -d - 文件存在並且是一個目錄
- -e - 文件存在
- -f - 文件存在並且是常規文件
- -g - 文件存在並具有指定的組號
- -G - 文件存在並由用戶的組擁有
- -h - 文件存在並且是符號鏈接
- -k - 文件存在並設置其粘性位
- -L - 與-h相同
- -O - 文件存在,你是所有者
- -p - 文件存在並且是一個命名管道
- -r - 文件存在並且可讀
- -s - 文件存在並且大小大於零
- -S - 文件存在並且是套接字
- -t - 文件描述符在終端上打開
- -u - 文件存在並且設置了set-user-id位
- -w - 文件存在並且可寫
- -x - 文件存在且可執行
例子:
test / path / to / file1 -n / path / to / file2 && echo“yes”
(如果file1比file2更新,則會顯示“是”一詞)
test -e / path / to / file1 && echo“yes”
(如果file1存在,將顯示“是”一詞)
測試-O / path / to / file1 && echo“yes”
(如果您擁有file1,則顯示“是”一詞)“)
術語
- 特殊塊 - 文件是塊設備,這意味著數據以字節塊讀取。 這些通常是設備文件,例如硬盤。
- 字符特殊 - 文件在寫入時立即執行,通常是串口等設備
比較多個條件
迄今為止,所有事情都是將一件事情與另一件事情進行比較,但如果你想比較兩種情況呢。
例如,如果一隻動物有4條腿並且走向“mo it”,它可能是一頭母牛。 簡單地檢查4條腿並不能保證你有一頭牛,但檢查它確實會做的聲音。
要一次測試兩個條件,請使用以下語句:
test 4 -eq 4 -a“moo”=“moo”&& echo“it is a cow”|| 迴聲“它不是牛”
這裡的關鍵部分是-a代表和。
有一個更好和更常用的方法來執行相同的測試,如下所示:
test 4 -eq 4 && test“moo”=“moo”&& echo“it is a cow”|| 迴聲“它不是牛”
你可能想要做的另一個測試是比較兩個語句,如果兩個語句都是真的,則輸出一個字符串。 例如,如果您想檢查名為“file1.txt”的文件是否存在,或者是否存在名為“file1.doc”的文件,則可以使用以下命令
test -e file1.txt -o -e file1.doc && echo“file1 exists”|| 迴聲“file1不存在”
這裡的關鍵部分是代表“或”的-o。
有一個更好和更常用的方法來執行相同的測試,如下所示:
測試-e file1.txt || test -e file1.doc && echo“file1 exists”|| 迴聲“file1不存在”
消除測試關鍵字
您實際上不需要使用單詞測試來執行比較。 你所要做的就是把這個陳述放在方括號中,如下所示:
[-e file1.txt] && echo“file1 exists”|| 迴聲“file1不存在”
[和]基本上意味著與測試相同。
現在你知道這一點,你可以改進比較多個條件如下:
[4 -eq 4] && [“moo”=“moo”] && echo“it is a cow”|| 迴聲“它不是牛”
[-e file1.txt] || [-e file1.doc] && echo“file1 exists”|| 迴聲“file1不存在”
概要
測試命令在腳本中更加有用,因為您可以測試一個變量與另一個變量的值並控製程序流。 在標準命令行上,您可以使用它來測試文件是否存在或