<del id="nnjnj"></del><track id="nnjnj"></track>

<p id="nnjnj"></p>

<address id="nnjnj"></address>

    <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

      <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>

      • 自動秒收錄
      • 軟件:1973
      • 資訊:57811|
      • 收錄網站:279872|

      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
      • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
        0閱讀 0條評論 個贊
        在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
      • 國產核心板全志T507助力消防系統升級
        0閱讀 0條評論 個贊
        9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 從PG15開始WAL壓縮優化
        0閱讀 0條評論 個贊
        PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
      • 深入了解美團葉子發射器開源方案
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
      發表評論 共有條評論
      用戶名: 密碼:
      驗證碼: 匿名發表
      • 如何使用helm優雅地安裝prometheus-operator并監控k8s集群微服務
        0閱讀 0條評論 個贊
        前言:隨著云原生概念盛行,對于容器、服務、節點以及集群的監控變得越來越重要。Prometheus作為Kubernetes監控的事實標準,有著強大的功能和良好的生態。但是它不支持分布式,不支持數據……
      • Hadoop(簡介)大數據技術概述 運行環境構建 運行模式
        0閱讀 0條評論 個贊
        文章目錄1Hadoop概述1.1Hadoop是什么1.2Hadoop優勢1.3Hadoop組成(面試重點)1.3.1HDFS架構概述1.3.2YARN架構概述1.3.3Map……
      • 滲透攻擊和防御網絡-簡單的SQL注入
        0閱讀 0條評論 個贊
        1背景京東SRC(SecurityResponseCenter)收錄大量外部白帽子提交的sql注入漏洞,漏洞發生的原因多為sql語句拼接和Mybatis使用不當導致。2手工檢測2.1前置知識……
      • 開發者如何在應用后臺直接控制用戶的運動狀態?
        18閱讀 0條評論 個贊
        酷暑終于過去,很多人伴著涼爽的秋風開啟了新一輪的健身計劃。當用戶進行戶外運動或使用跑步機、橢圓機等器械時,他們會希望在運動健康類App里點擊即可開啟運動并記錄運動數據。而對于開發者自己開發的應用來說,……
      • 基于 網絡6的輕量級Webapi框架緊固點
        0閱讀 0條評論 個贊
        大家好,我是等天黑。FastEndpoints是一個基于.NET6開發的開源webapi框架,它可以很好地替代.NETMinimalAPIs和MVC,專門為開發效率而生,帶來了全……
      • 教大家如何處理Spring Boot易流中的用戶和群體!
        0閱讀 0條評論 個贊
        1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
      • 這三個特點讓G1取代CMS!
        0閱讀 0條評論 個贊
        大家好,我是樹哥。之前我們聊過CMS回收器,但那時候我們說CMS回收器已經落伍了,現在應該是用G1回收器的時候了。那么G1回收器到底有什么魔力,它比CMS回收器相比強在哪里呢?今天……
      • 談ASP.NET核心認證與授權
        0閱讀 0條評論 個贊
        使用asp.netcore開發應用系統過程中,基本上都會涉及到用戶身份的認證,及授權訪問控制,因此了解認證和授權流程也相當重要,下面通過分析asp.netcore框架中的認證和授權的源碼來分析……
      • i.MX8MQ自制背板無PCIe問題詳解
        9閱讀 0條評論 個贊
        在飛凌嵌入式OKMX8MQ-C開發板上有兩個PCIe接口,對應著兩個PCIe差分時鐘,兩路PCIe分別用作了M.2接口卡槽KEYE(P37)和KEYM(P34)。很多使用FETMX8MQ-C核心板的用……
      • 你知道信息架構圖和功能架構圖的區別嗎?
        0閱讀 0條評論 個贊
        .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
      • MQ系列5:5的發送模式:RocketMQ消息
        0閱讀 0條評論 個贊
        在之前的篇章中,我們學習了RocketMQ的原理,以及RocketMQ中命名服務ServiceName的運行流程,本篇從消息的生產、消費來理解一條消息的生命周期。1消息生產在RocketMQ中……
      • SQL Server表變量和臨時表的區別
        0閱讀 0條評論 個贊
        一、表變量表變量在SQLServer2000中首次被引入。表變量的具體定義包括列定義,列名,數據類型和約束。而在表變量中可以使用的約束包括主鍵約束,唯一約束,NULL約束和CHECK約束(外鍵……
      • c#異步高級————通道[1]
        0閱讀 0條評論 個贊
        前言該系列為異步編程的進階篇,其實也不能這么講。世界上本沒有進階篇,只能說是高級篇(高級篇不能說多高級,是對底層的封裝的意思),只要是加深理解都是進階。本章先介紹一下channel。正文下面沒什么好說……
      • 人工智能OPS的莫拉維克悖論
        3閱讀 0條評論 個贊
        莫拉維克的悖論是人工智能和機器人研究人員觀察到,與傳統假設相反,推理需要很少的計算,但感覺運動和感知技能需要大量的計算資源。該原則由HansMoravec、RodneyBrooks、Marvin……
      • SQL SERVER存儲過程學習筆記
        6閱讀 0條評論 個贊
        將常用的或很復雜的工作,預先用SQL語句寫好并用一個指定的名稱存儲起來,那么以后要叫數據庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令。存儲過程的優點1.存儲……
      • SQL Server動態生成分區腳本
        0閱讀 0條評論 個贊
        一、前言前段時間使用表分區比較多,雖然已經寫了SQLServer合并(刪除)分區解惑、SQLServer2005分區模板與實例,但是在實踐中一直感覺修改SQL腳本的時間比較多,一直想抽個時間來把……
      • 中國臺灣的建設:有效登陸中國臺灣的六脈神劍
        0閱讀 0條評論 個贊
        在數字化時代,數字化體系的建設需要的是系統化的規劃和產品化的迭代的模式,基于企業核心業務能力體系,做中臺化的持續建設與落地,則是一種不錯的選擇。所以,企業業務中臺的建設和落地,是關系到企業數字化戰略成……
      • MySQL性能調優和優化技術
        0閱讀 0條評論 個贊
        介紹MySQL是一種流行的開源數據庫應用程序,它以一種有意義且易于訪問的方式存儲和構造數據。對于大型應用程序,龐大的數據量可能會導致性能問題。本指南提供了一些關于如何提高MySQL數據庫性能的調……
      • Oracle服務器遷移的一些經驗
        3閱讀 0條評論 個贊
        前言通過此文章來分享一下Oracle服務器遷移過程中的一些經驗,希望對大家有些許幫助。本文旨在幫助更多的同學,會提及一些基本命令或技巧,但不贅述,后續有機會再進一步分享各個細節。背景之前因機房遷移……
      • 碼頭工人日常工作的常用命令
        0閱讀 0條評論 個贊
        容器生命周期管理Docker創建新容器并運行[run]語法:dockerrun[OPTIONS]IMAGE[COMMAND][ARG...]OPTIONS說明:-astdin:指定標準輸入……
      最近發布資訊
      更多
      警花高潮嗷嗷叫
      <del id="nnjnj"></del><track id="nnjnj"></track>

      <p id="nnjnj"></p>

      <address id="nnjnj"></address>

        <pre id="nnjnj"><pre id="nnjnj"></pre></pre>

          <noframes id="nnjnj"><ruby id="nnjnj"><ruby id="nnjnj"></ruby></ruby>