如何在 Bash 腳本中使用強大的 Linux test 指令
Linux 的 test 指令是 Shell 內建指令,用來偵測某個條件是否成立。 test 常與 if 語句一起使用,大多數 if 語句都依賴 test。它可以將一個元素與另一個元素進行比較,但更常用於 BASH shell 腳本中,作為控制邏輯和程式流程的條件語句的一部分。
test 指令有許多選項,可以進行數值、字串和檔案三方面的偵測。

一個基本的範例
#在終端機視窗中嘗試這些命令。
linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ test 1 -eq 2 && echo "yes" || echo "no" no linuxmi@linuxmi /home/linuxmi/www.linuxmi.com ⚡ test 1 -eq 1 && echo "yes" || echo "no" yes
上面的指令分解如下:
-
- test:執行比較的指令
- 1:您要比較的第一個元素。在此範例中,它是數字1,但它可以是任何數字,也可以是引號內的字串。
- – eq:比較方法。在本例中,您正在測試一個值是否等於另一個值。
- 2:您要比較第一個元素的元素。在這個例子中,它是數字2。
- # **&&**:依序將指令連結在一起的 Linux 快捷方式。測試鏈的輸出到隨後的命令。當前面的命令的退出狀態為 0 時,將執行雙與號,這是表示命令沒有失敗的一種奇特方式。
- echo “yes”:比較成功時執行的指令。在這種情況下,我們所做的只是要求echo命令將單字“yes”列印到標準輸出,但是如果測試結果證明為真,您可以在此處運行任何將執行的命令。
- || : 在某種程度上,與 &&; 正好相反 只有在它前面的命令失敗(退出狀態不是 0)時,雙管道才會執行。
- **echo “no”**:比較不符時運行的命令。
#小貼士:從shell 提示字元運行,test*不會將值傳回標準輸出,它只會傳回退出狀態代碼。這就是為什麼需要連結 echo 命令的原因。 *

本質上一樣的,該指令將1 與2 進行比較,如果它們匹配,則執行echo“yes”語句並顯示“yes”,如果它們不匹配,則執行echo“no”語句,顯示“no”。
比較數字
如果要比較解析為數字的元素,可以使用以下比較運算子:
- -eq:值 1 等於值 2
- #-ge : 值 1 大於或等於值 2
- -gt : 值 1 大於值 2
- #-le : 值 1 小於或等於值 2
- -lt : 值 1 小於值 2
- #-ne : 值 1 不等於值 2
#範例測試
#test 1 -eq 2 && echo "yes" || echo "no"
(在螢幕上顯示“no”,因為 1 不等於 2)
test 1 -ge 2 && echo "yes" || echo "no"
(在螢幕上顯示“no”,因為 1 不大於或等於 2)
test 1 -gt 2 && echo "yes" || echo "no"
(在螢幕上顯示“no”,因為 1 不大於 2)

test 1 -le 2 && echo "yes" || echo "no"
(在螢幕上顯示“yes”,因為 1 小於或等於 2)
test 1 -lt 2 && echo "yes" || echo "no"
(在螢幕上顯示“yes”,因為 1 小於或等於 2)
test 1 -ne 2 && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为 1 不等于 2)

比较文本
比较解析为字符串的元素时,请使用以下比较运算符:
- **=**:字符串 1 匹配字符串 2
- != : 字符串 1 与字符串 2 不匹配
- -n:字符串长度大于0
- -z:字符串长度等于 0
例子
test "string1" = "string2" && echo "yes" || echo "no"
(在屏幕上显示“no”,因为“string1”不等于“string2”)
test "string1" != "string2" && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为“string1”不等于“string2”)
test -n "string1" && echo "yes" || echo "no"
(在屏幕上显示“yes”,因为“string1”的字符串长度大于零)
test -z "string1" && echo "yes" || echo "no"
(在屏幕上显示“no”,因为“string1”的字符串长度大于零)

比较文件
比较文件时,请使用以下比较运算符:
- -ef:文件具有相同的设备和 inode 编号(它们是同一个文件)
- -nt : 第一个文件比第二个文件新
- -ot:第一个文件比第二个文件旧
- -b:文件存在并且是块特殊的
- -c:文件存在并且是字符特殊的
- -d:文件存在并且是目录
- -e : 文件存在
- -f : 文件存在并且是普通文件
- -g:文件存在并具有指定的组号
- -G : 文件存在且属于用户组
- -h或**-L**:文件存在并且是符号链接
- -k:文件存在并且设置了粘性位
- -O : 文件存在你是所有者
- -p:文件存在并且是命名管道
- -r:文件存在且可读
- -s:文件存在且大小大于零
- -S : 文件存在并且是一个socket
- -t :在终端上打开文件描述符
- -u:文件存在并且设置了 set-user-id 位
- -w:文件存在且可写
- -x:文件存在且可执行
例子
⚡ test linuxmi -nt linux && echo "yes"

(如果 linuxmi 比 linux 新,则显示“yes”字样,如上图
⚡ test -e /home/linuxmi/linuxmi && echo "yes"

(如果 linuxmi 存在,将显示“yes”)
test -O /home/linuxmi/linuxmi && echo "yes"

(如果您拥有 file1,则显示“yes”字样”)
块特殊:文件是块设备,这意味着数据以字节块的形式读取。这些通常是设备文件,例如硬盘驱动器。
特殊字符:文件在您写入时立即执行,通常是串行端口等设备
比较多个条件
到目前为止,一切都在将一件事与另一件事进行比较,但是如果您想比较两个条件怎么办?
例如,如果一只动物有四条腿并且会发出“哞哞”的声音,它可能是一头奶牛。简单地检查四只腿并不能保证你有一头牛,但检查它发出的声音肯定可以。
要同时测试这两个条件,请使用以下语句:
test 4 -eq 4 -a "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
这里的关键部分是-a标志,它代表and。
有一种更好和更常用的方法来执行相同的测试,如下所示:
test 4 -eq 4 && test "moo" = "moo" && echo "it is a cow" || echo "it is not a cow"
test 命令的分支很重要。如果第一个测试 (4 = 4) 失败,则 *test* 命令以非零退出代码终止。因此,我们跳转到双管道符号并且“it is not a cow”打印到标准输出。但是,如果第一个测试成功并因此 test 导致退出代码0,那么我们跳转到第一个双与号(&&)。下一条语句是另一个测试条件!
如果第二次 test 失败,我们再次跳到双管并从那里继续。然而,如果第二个 test 成功,我们跳转到第二个双& 语句,在这个例子中,它只是将“it is a cow”回显到标准输出,然后终止返回到 shell 提示符。
另一个测试比较两个语句,如果其中一个为真,则输出一个字符串。例如,要检查是否存在名为“linuxmi.txt”的文件或名为“linuxmi.py”的文件,可以使用以下命令:
这里的关键部分是**-o**代表or。
test -e linuxmi.txt -o -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
有一种更好和更常用的方法来执行相同的测试,如下所示:
test -e linuxmi.txt || test -e linuxmi.py && echo "linuxmi exists" || echo "linuxmi does not exist"
排除 test 关键字
您实际上不需要使用单词test来执行比较。您所要做的就是将语句括在方括号中,如下所示:
⚡ [ -e linux.py ] && echo "linux.py exists" || echo "file1 does not exist"linux.py exists
[and**]基本上与****test含义 相同。**

现在您知道这一点,您可以改进比较多个条件,如下所示:
[ 4 -eq 4 ] && [ "moo" = "moo" ] && echo "it is a cow" || echo "it is not a cow" [ -e linuxmi.py ] || [ -e linuxmi.txt ] && echo "linuxmi exists" || echo "linuxmi does not exist"

总结
test 命令在脚本中更有用,因为您可以对照另一个变量测试一个变量的值并控制程序流程。在命令行上,使用它来测试文件是否存在。
以上是如何在 Bash 腳本中使用強大的 Linux test 指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

Linux的主要用途包括:1.服務器操作系統,2.嵌入式系統,3.桌面操作系統,4.開發和測試環境。 Linux在這些領域表現出色,提供了穩定性、安全性和高效的開發工具。

VS Code 終端命令無法使用的原因及解決辦法:未安裝必要的工具(Windows:WSL;macOS:Xcode 命令行工具)路徑配置錯誤(添加可執行文件到 PATH 環境變量中)權限問題(以管理員身份運行 VS Code)防火牆或代理限制(檢查設置,解除限制)終端設置不正確(啟用使用外部終端)VS Code 安裝損壞(重新安裝或更新)終端配置不兼容(嘗試不同的終端類型或命令)特定環境變量缺失(設置必要的環境變量)
