bash shell中測試命令

来源:http://www.cnblogs.com/Sunzz/archive/2017/05/22/6891008.html
-Advertisement-
Play Games

bash shell中測試命令 test命令提供了if-than語句中測試不同條件的途徑。如果test命令中列出的條件成立,test命令就會退出並返回退出狀態嗎0 。這樣if-than語句就與其他編程語言中的if-than語句類似的方式工作了。如果條件不成立,test命令就會退出並返回非零的退出狀態 ...


bash shell中測試命令

    test命令提供了if-than語句中測試不同條件的途徑。如果test命令中列出的條件成立,test命令就會退出並返回退出狀態嗎0 。這樣if-than語句就與其他編程語言中的if-than語句類似的方式工作了。如果條件不成立,test命令就會退出並返回非零的退出狀態碼,使得if-than語句不會被執行。

1    test 命令的基本格式

    test        condition

        conditiontest命令要測試的一系列參數和值。

2用在if-than語句中,格式是這樣的:

        if     test     condition

        then

            commands

        fi

    如果不寫condition部分,它會以非零的退出狀態碼退出。then 語句塊不會被執行,並執行else語句塊。

[root@local data]# cat test6.sh
#!/bin/bash
#
if    test
then
    echo "No expressing returns a Ture"
else
    echo "No expressing returens a False"
fi

[root@local data]# bash test6.sh

    "No expressing returens a False"

3 bash shell 的另一種常用的測試條件

    if    [    condition        ]

    then

        commands

    fi

    方括弧定義了測試條件。

    test命令可以判斷三類條件:

    (1)數值比較

    2)字元串比較

    3)文件比較

註意:方括弧之後和第二個方括弧之前必須加上一個空格,否則會報錯。

4    數值比較

    下表列出了測試兩個值時可用的條件參數

比較

描述

n1 -eq n2

檢查n1是否等於n2

n1 -ge n2

檢查n1是否大於或等於n2

n1 -gt n2

檢查n1是否大於n2

n1 -le n2

檢查是否小於等於n2

n1 -lt n2

檢查n1是否小於n2

n1 -ne n2

檢查n1是否不等於n2

註意:測試命令中只能處理整數

[root@local data]# cat number_test.sh
#!/bin/bash
value1=10 #定義變數value1、value2
value2=11
if [ $value1 -gt 5 ]    #測試value1的值是否大於5
then
    echo "The test value $value1 is greater than 5"
fi
if [ $value1 -eq $value2 ]        #測試value1的值是否和變數value2的值相等。
then
    echo "The values are equal"
else
    echo "The values are different"
fi

[root@local data]# bash number_test.sh

The test value 10 is greater than 5

The values are different

5    字元串比較

    條件測試運行字元串比較,下表列出了字元串附加測試

比較

描述

str1 = str2

檢查str1是否和str2 相同

str1 != str2

檢查str1是否和str2不同

str1 < str2

檢查str1 是否比str2

str1 > str2

檢查str1 是否比str2

-n str1

檢查str1的長度是否非0

-z str1

檢查str1的長度是否為0

    要測試一個字元串是否比另一個字元串大是一個麻煩的問題,主要有一下兩個問題:

1)大於號和小於號必須轉義,否則SHELL會把它們當做重定向符號,把字元串值當作文件名;

2)大於和小於順序和sort命令所採用的不同。

在字元串比較測試中,大寫字母被認為是大於小寫字母的;比較測試中使用的是標準的ASCII順序,根據每個字元的ASCII數值來決定排序結果。

[root@local data]# cat str_comparison.sh
#!/bin/bash
var1=baseball
var2=hockey
if [ $var1 \> $var2 ]
then
    echo "$var1 is greater than $var2"
else
    echo "$var1 is lees than $var2"
fi

[root@local data]# bash str_comparison.sh

baseball is lees than hockey

6    文件比較

    測試Linux上文件系統上文件和目錄的狀態。

比較

描述

-d file

檢查file 是否存在並是一個目錄

-e file

檢查file是否存在

-f file

檢查file是否存在並是一個文件

-r file

檢查file是否存在並可讀

-s file

檢查file是否存在並非空

-w file

檢查file是否存在並可寫

-x file

檢查file是否存在並可執行

-O file

檢查file是否並屬當前用戶所有

-G file

檢查file 是否存在且預設組與當前用戶相同

file1 –nt file2

檢查file1是否比file2

file1 –ot file2

檢查file1是否比file2

[root@localdata]# cattestfile_exist.sh
#!/bin/bash
item_name=$HOME
echo
echo "The item being checked:$item_name"
echo
if [ -e $item_name ]
then #item_name does exist
    echo "The item,$item_name,does exist"
    echo "But is it a file?"
    echo
if [ -f $item_name ]
then #item_name is a file
    echo "Yes,$item_name is a file"
else #item_name is not a file
    echo "No,$item_name is not a file"
fi
else #item_name does not exist
    echo "The item,$item_name, does not exist"
    echo "Nothing to update"
fi

[root@local data]# bash testfile_exist.sh

The item being checked:/root

The item,/root,does exist

But is it a file?

No,/root is not a file

7    複合條件測試

if-than語句中可以使用布爾邏輯來組合測試

1 [ condition1 ] && [ condition2 ]

2 [ conditon1 ] || [ conditon2 ]

    第一種布爾運算使用AND布爾運算符來組合兩個條件。要讓then部分的命令執行,兩個條件必須都滿足。

    第二種布爾運算使用OR布爾運算符來組合兩個條件。如果任意條件為TRUEthen部分的命令就會執行。

[root@localdata]# catcompund_comparison.sh

#!/bin/bash

#

if [ -d $HOME ] && [ -w $HOME/testing ]

then

    echo "The file exists and you can write to it"

else

    echo "I can not write to the file"

fi

[root@local data]# bash compund_comparison.sh

I can not write to the file

    第一個比較會檢查用戶的$HOME目錄是否存在。第二個比較會檢查在用戶的$HOME目錄下是否有個叫做testing的文件,以及用戶是否有該文件的寫入許可權。如果兩個比較中有一個失敗了,if語句就會失敗,shell就會執行else的部分。如果兩個條件都通過了,則if語句通過,shell會執行then部分的命令。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 怎樣在eclipse開發環境中連接資料庫並測試連接是否成功 1)eclipse開發環境里沒有集成mysql的驅動,需要從以下地址下載連接驅動程式mysql-connector-java-XX-XX-XX.zip: http://dev.mysql.com/downloads/connector/j ...
  • 一、Redis簡介 1.關於關係型資料庫和nosql資料庫 關係型資料庫是基於關係表的資料庫,最終會將數據持久化到磁碟上,而nosql數據 庫是基於特殊的結構,並將數據存儲到記憶體的資料庫。從性能上而言,nosql資料庫 要優於關係型資料庫,從安全性上而言關係型資料庫要優於nosql資料庫,所以在實 ...
  • 在深入學習圖形資料庫之前,首先理解屬性圖的基本概念。一個屬性圖是由頂點(Vertex),邊(Edge),標簽(Lable),關係類型和屬性(Property)組成的有向圖。頂點也稱作節點(Node),邊也稱作關係(Relationship);在圖形中,節點和關係是最重要的實體,所有的節點是獨立存在的 ...
  • 從一個表複製數據,然後把數據插入到另一個新表中。 假設有一個已創建且有數據的orders表,要把orders表備份到還未創建的newOrders表裡 SQL用法:SELECT * INTO newOrders FROM orders 但是mysql使用報錯,ERROR 1327 (42000): U ...
  • SQL Server 2014新功能 -- 延遲事務持久性(Delayed Transaction Durability) SQL Server事務提交預設是完全持久性的(Full Durable),從SQL Server 2014開始,增加了新的功能延遲事務持久性,使得事務提交可設置為延時持久性的 ...
  • windows10啟動優化 啟動時: 1)關閉windows自動更新 2)關閉windows防火牆 3)關閉Windows Defender (1)使用快捷鍵(WIN+R)調出運行工具,然後再輸入組策略命令(gpedit.msc)再點擊確定。 (2)進入組策略在電腦配置下麵的管理模板,Window ...
  • which命令 用於查找並顯示給定命令的絕對路徑,環境變數PATH中保存了查找命令時需要遍歷的目錄。which命令會在環境變數PATH設置的目錄里查找符合條件的文件。也就是說,使用which命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。 whereis命令 用來定位命令的二 ...
  • 編譯安裝httpd 1 去官網下載源碼包 為避免非法軟體,一定要去官網下載http://www.apache.org httpd-2.4.25.tar.gz2 2 安裝開發包組 yum groupinstall "Development tools" 3 解壓httpd-2.4.25.tar.gz2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...