• 自動秒收錄
  • 軟件:1973
  • 資訊:56215|
  • 收錄網站:181187|

IT精英團

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

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

瀏覽次數:
評論次數:
編輯: 樂詠
信息來源: ITPUB
更新日期: 2022-05-20 21:39:09
摘要

Linuxtest命令是Shell內置命令,用來檢測某個條件是否成立。test通常和if語句一起使用,并且大部分if語句都依賴test??梢詫⒁粋€元素與另一個元素進行比較,但它更常

  • 正文開始
  • 相關閱讀
  • 推薦作品

Linux test命令是Shell的內置命令,用來檢查某個條件是否為真。Test通常與if語句一起使用,大多數if語句都依賴于test。您可以將一個元素與另一個元素進行比較,但是它更常用于BASH shell腳本中,作為控制邏輯和程序流的條件語句的一部分。

test命令中有很多選項,可以用來檢測值、字符串和文件。

一個基本例子

在終端窗口中嘗試這些命令。

Linux mi @ Linux mi/home/Linux mi/www . Linux mi.com

test1-eq2回顯“是”| |回顯“否”

Linux mi @ Linux mi/home/Linux mi/www . Linux mi.com

test1-eq1echo'yes'||echo'no '

上面的命令分解如下:

測試:執行比較的命令。

1:要比較的第一個元素。在本例中,它是數字1,但也可以是任何數字或引號中的字符串。

情商:比較法。在本例中,您將測試一個值是否等于另一個值。

2:你要比較第一個元素的元素。在本例中,它是數字2。

:將命令按順序鏈接在一起的Linux快捷方式。測試鏈對后續命令的輸出。當前一個命令的退出狀態為0時,將執行雙and符號,這是一種特殊的方式來顯示命令沒有失敗。

Echo 'yes ':比較成功時運行的命令。在這種情況下,我們所做的只是要求echo命令將單詞“yes”打印到標準輸出中,但是如果測試結果證明是真的,您可以運行將在這里執行的任何命令。

||| 3360某種程度上,用;相反,只有在前一條命令失敗時(退出狀態不為0),才會執行雙流水線。

Echo 'no ':比較不匹配時要運行的命令。

提示:從shell提示符運行,test不會將值返回到標準輸出,它只會返回退出狀態代碼。這就是為什么需要鏈接echo命令的原因。

A8CF2743454C.jpg" width="928" src="https://image.z.itpub.net/zitpub.net/JPG/2022-05-20/AD2C6E56F1A53A2786E6A8CF2743454C.jpg">

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

標簽:文件 命令 存在
真正的建筑設計是什么樣子的?
? 上一篇 2022-05-20
前端面試必須解決網絡中的跨域問題
下一篇 ? 2022-05-20
  • 胡迪核心知識點詳解(好文章合集)
    1閱讀 0條評論 個贊
    以下文章來源于公眾號-3分鐘秒懂大數據,作者在IT中穿梭旅行在Flink實時流中,經常會通過FlinkCDC插件讀取Mysql數據,然后寫入Hudi中。所以在執行上述操作時,需要了解……
  • 前端面試必須解決網絡中的跨域問題
    0閱讀 0條評論 個贊
    什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
  • 真正的建筑設計是什么樣子的?
    1閱讀 0條評論 個贊
    什么是架構和架構本質在軟件行業,對于什么是架構,都有很多的爭論,每個人都有自己的理解。此君說的架構和彼君理解的架構未必是一回事。因此我們在討論架構之前,我們先討論架構的概念定義,概念是人認識這個世界的……
  • 10分鐘了解云原生 值得收藏~
    0閱讀 0條評論 個贊
    文章轉載:奇妙的Linux世界我們已經進入云計算下半場,不再像上半場在糾結要不要上云,而是討論怎么上云?才能把云計算的價值發揮到淋漓盡致。如何把云計算與不同的業務場景深度結合?如何讓技術真正作用于企業……
  • 你可能不知道PostgreSQL能做的8件有趣的事!
    0閱讀 0條評論 個贊
    1整行引用您是否嘗試過運行以下語句?SELECTmy_tableFROMmy_table;這可能看起來很奇怪,但它所做的是將所有列作為行類型返回到單個列中?,F在你為什么要這樣做?好吧,您很可……
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
  • Spring Boot的表現太差了 我教你幾招輕松搞定
    0閱讀 0條評論 個贊
    文章……
  • 碼頭工人搭建彈性搜索集群教程
    1閱讀 0條評論 個贊
    寫在前面:為什么要用ElasticSearch?我們的應用經常需要添加檢索功能,開源的ElasticSearch是目前全文檢索引擎的首選。它可以快速的存儲、搜索和分析海量數據。ElasticSear……
  • 透徹理解數據資產、數據資源、數據管理、數據治理等概念的區別
    1閱讀 0條評論 個贊
    以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生數據成為生產要素后,各種跟數據相關的概念就出來了,其實很多概念沒有權威定義,大家各有各的理解,這導致了理解上的歧義。數據管理、數據治理、數據資源……
  • PostgreSQL并行框架分析
    3閱讀 0條評論 個贊
    作者簡介施博文,目前就職于騰訊云PG團隊概覽PostgreSQL并行框架提供了一系列方便的函數,支持在插件或內核中直接調用相關函數,啟動若干個后臺進程進行并行操作。目前,PG的并行框架主要用來……
  • 前端面試必須解決網絡中的跨域問題
    0閱讀 0條評論 個贊
    什么是跨域瀏覽器有一個重要的安全策略,稱之為「同源策略」其中,源=協議+主機+端口源=協議+主機+端口源=協議+主機+端口,兩個源相同,稱之為同源,兩個源不同,稱之為跨源或跨域比如:源1源2是否同……
  • 說說春云的全鏈路灰度發布方案~
    1閱讀 0條評論 個贊
    以下文章來源于公眾號-碼猿技術專欄,作者不才陳某大家好實際生產中如有需求變更,并不會直接更新線上服務,最通常的做法便是:切出線上的小部分流量進行體驗測試,經過測試后無問題則全面的上線。這樣做的好處也是……
  • MYSQL如果索引優化僅僅是添加索引 太年輕而不簡單
    1閱讀 0條評論 個贊
    MYSQL的索引優化,如果此時此刻看到索引的優化,僅僅想到添加適合的索引,是不完全的,索引的優化本身就具有很多的不確定性。1索引會隨著時間的推移,有性能的衰減2索引會隨著數據量的增加,有性能的衰……
  • 甲骨文(第11代)單實例-室內空調(第11代)遷移模擬測試
    1閱讀 0條評論 個贊
    Oracle11.2.0.4單實例----Oracle19C-RAC遷移模擬測試總體思想:通過RMAN物理備份在備庫恢復主庫數據,后續通過在主庫停業務后,將從備份后的所有日志都同步到新庫應用,重新配置……
  • 采訪者:告訴我們SpringAOP的底層代理模型
    2閱讀 0條評論 個贊
    來源|Java技術指北(ID:javanorth)代理模式相信大家經常聽說,在設計模式中相對而言是比較難理解的。這次指北君來給大家通俗的介紹介紹。1、什么是代理模式Provideasurrog……
  • Linux中的交互式進程查看命令htop
    1閱讀 0條評論 個贊
    htop界面展示HtopLinux進程監控工具“Htop是一個用于Linux/類Unix系統的交互式實時進程監控應用程序,也是top命的替代品,它是所有Linux操作系統上預裝的默……
  • Linux的10個最危險的命令
    0閱讀 0條評論 個贊
    rm-rf命令該命令可能導致不可恢復的系統崩壞。>rm-rf/#強制刪除根目錄下所有東西。>rm-rf*#強制刪除當前目錄的所有文件。>rm-rf.#強制刪除當前文件夾及其子文件夾。執行rm-r……
  • 數據治理 區分系統、機制、流程的概念很重要
    0閱讀 0條評論 個贊
    以下文章來源于公眾號-大魚的數據人生,作者討厭的大魚先生我們剛接觸數據的時候,從事的大多是具體的數據管理活動,無論是數據的采集、開發和開放,或是元數據管理、數據質量管理或是數據安全管理等等,但當你想更……
  • 納尼?數據也是立法的嗎?
    1閱讀 0條評論 個贊
    編輯:彭文華來源:大數據架構師(ID:bigdata_arch)彭友們好,我是老彭。最近忙瘋了,天天給客戶寫方案,都沒時間寫文章了。趁著五一假期,跟彭友們嘮嘮新鮮事兒。今天這個,真的是顛覆我的認知,……
  • 運維數字化轉型的幾點思考
    1閱讀 0條評論 個贊
    這個月底要召開一個企業運維數字化轉型的研討會,昨天一個合作伙伴和我討論一些研討會的話題問題。數字化轉型是近期十分熱門的話題,各大國企央企也把數字化轉型作為未來幾年的工作重點。不過針對于IT運維,數字化……
  • 記得網上一個K8s Ingress訪問故障排除 最后卻不是帖子的鍋
    1閱讀 0條評論 個贊
    具體現象應用遷移至我們的PaaS平臺后會出現偶發性的502問題,錯誤見圖片:相比于程序的請求量,錯誤肯定是比較少的,但是錯誤一直在發生,會影響調用方的代碼,需要檢查下問題原因。為啥我們只看到了POST……
  • MYSQL VS POLARDB唯一索引死鎖及應用設計
    1閱讀 0條評論 個贊
    #issue68021MySQLuniquecheck問題-知乎(zhihu.com)事情的開始是這樣的,最近和阿里云密切聯系,也成為他們的大客戶,(我們當然是大客戶,BIGBIG……
  • 如何執行超過100M的SQL腳本?
    2閱讀 0條評論 個贊
    技術_菜鳥https://www.cnblogs.com/hai-ping/p/3939150.html最近遇到一個問題,在SQLServer的查詢分析器里面執行一個超過100MB的數據庫腳本,發現……
  • 服務器端高并發分布式架構的演進之路
    1閱讀 0條評論 個贊
    1.概述本文以淘寶作為例子,介紹從一百個到千萬級并發情況下服務端的架構的演進過程。同時列舉出每個演進階段會遇到的相關技術,讓大家對架構的演進有一個整體的認知。文章最后匯總了一些架構設計的原則。特別說……
  • 7 種提升Spring Boot吞吐量神技!
    0閱讀 0條評論 個贊
    一、異步執行實現方式二種:1.使用異步注解@aysnc、啟動類:添加@EnableAsync注解2.JDK8本身有一個非常好用的Future類——CompletableFuture@AllArg……
  • 在Linux中檢查磁盤空間的12個有用的df命令
    1閱讀 0條評論 個贊
    1.檢查文件系統磁盤空間使用情況這df命令顯示文件系統上的設備名稱、總塊數、總磁盤空間、已用磁盤空間、可用磁盤空間和掛載點信息。[root@local~]#dfFilesystem1K-bloc……
最近發布資訊
更多
十八禁试看120秒做受