成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何在 Bash 腳本中使用強大的 Linux test 命令

系統 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 命令在腳本中更有用,因為您可以對照另一個變量測試一個變量的值并控制程序流程。在命令行上,使用它來測試文件是否存在。

責任編輯:龐桂玉 來源: Linux公社
相關推薦

2022-11-23 08:14:42

bash 腳本test 命令

2020-04-09 10:18:51

Bash循環Linux

2018-05-16 10:32:06

Linux命令find

2018-06-26 09:15:24

Linux命令history

2022-11-18 10:16:26

Linuxwc 命令

2022-10-25 09:07:28

Linuxxargs命令

2023-09-14 15:05:33

grep正則表達式

2021-07-20 10:00:28

Linuxgrep命令

2021-01-13 09:40:26

Linuxexport命令

2021-07-13 07:52:02

Linuxgrep命令

2021-03-14 09:28:24

Linux Shell腳本

2022-10-09 10:18:44

LinuxShell腳本

2019-09-16 19:00:48

Linux變量

2022-05-25 08:41:48

Linuxfd 命令文件

2018-04-28 09:12:42

Linux

2020-10-13 19:04:58

Bash信號捕獲Shell腳本

2023-01-31 17:36:22

IPLinux網絡

2023-01-09 10:29:41

mv命令Linux

2011-08-23 09:56:52

UnicodeLua

2018-02-01 17:32:30

LinuxUNIXBash Shell
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚州无限乱码 | 午夜三级在线观看 | 一级黄色夫妻生活 | 成人日韩| 天天操操 | 欧美黑人国产人伦爽爽爽 | 国产精品一区一区三区 | 免费观看黄 | 国产精品亚洲一区二区三区在线观看 | 91精品无人区卡一卡二卡三 | 雨宫琴音一区二区在线 | 91高清视频在线观看 | 色天天综合 | 色偷偷噜噜噜亚洲男人 | 欧美日日日日bbbbb视频 | 亚洲精品国产电影 | 亚洲日本视频 | 欧美电影在线观看网站 | 欧美久久免费观看 | 成人免费观看视频 | 亚洲成人一区二区 | 国产成人99久久亚洲综合精品 | 亚洲一区二区三区四区五区中文 | 亚洲精品久久久久久久久久久 | 久久精品视频9 | 日韩欧美国产精品一区二区三区 | 秋霞a级毛片在线看 | 成人三级av | 99久久国产综合精品麻豆 | 久久久久国产精品午夜一区 | 草久久久 | 久久精品视频网站 | 四虎影视免费观看 | 欧美日韩在线综合 | 在线观看国产www | 91精品国产一区二区三区 | 精品久久久久久红码专区 | 亚洲成av人片在线观看无码 | 亚洲 欧美 日韩 精品 | 羞视频在线观看 | 在线视频91 |