天天看點

[Shell]test指令使用指南

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。 https://blog.csdn.net/SunnyYoona/article/details/73330973

Shell中的 test 指令用于檢查某個條件是否成立,它可以進行數值、字元和檔案三個方面的測試。

https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB17db121f19641ccdd5db6d4b88f44af2%3Fmethod%3Ddownload%26read%3Dtrue#1-%E6%95%B0%E5%80%BC 1. 數值

參數 說明
-eq 等于則為真
-ne 不等于則為真
-gt 大于則為真
-ge 大于等于則為真
-lt 小于則為真
-le 小于等于則為真

Example:

num1=100
num2=100
if test $[num1] -eq $[num2]
then
    echo '兩個數相等'
else
    echo '兩個數不相等'
fi
# 兩個數相等           

https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB17db121f19641ccdd5db6d4b88f44af2%3Fmethod%3Ddownload%26read%3Dtrue#2-%E5%AD%97%E7%AC%A6%E4%B8%B2 2. 字元串

=
!= 不相等則為真
-z 字元串 字元串的長度為零則為真
-n 字元串 字元串的長度不為零則為真
str1="2016-11-21"
str2="2016-11-22"
if test ${str1} = ${str2}
then
    echo '兩個日期相同'
else
    echo '兩個日期不相同'
fi
# 兩個日期不相同           

備注

如果上面的使用方法中,字元串中有空格,則會報錯:

str1="2016-11-22 12:34:21"
str2="2016-11-22 12:34:21"
if test ${str1} = ${str2}
then
    echo '兩個日期相同'
else
    echo '兩個日期不相同'
fi           

輸出:

兩個日期不相同
/home/xiaosi/code/openDiary/BaseOperation/src/main/sh/sh_test.sh: 第 6 行: test: 參數太多           

解決方案:

str1="2016-11-22 12:34:21"
str2="2016-11-22 12:34:21"
if test "${str1}" = "${str2}"
then
    echo '兩個日期相同'
else
    echo '兩個日期不相同'
fi           
兩個日期相同           

https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB17db121f19641ccdd5db6d4b88f44af2%3Fmethod%3Ddownload%26read%3Dtrue#3-%E6%96%87%E4%BB%B6 3. 檔案

-e 檔案名 如果檔案存在則為真
-r 檔案名 如果檔案存在且可讀則為真
-w 檔案名 如果檔案存在且可寫則為真
-x 檔案名 如果檔案存在且可執行則為真
-s 檔案名 如果檔案存在且至少有一個字元則為真
-d 檔案名 如果檔案存在且為目錄則為真
-f 檔案名 如果檔案存在且為普通檔案則為真
-c 檔案名 如果檔案存在且為字元型特殊檔案則為真
-b 檔案名 如果檔案存在且為塊特殊檔案則為真
if test -e /home/xiaosi/error.txt
then
    echo '檔案存在'
else
    echo '檔案不存在'
fi
# 檔案存在
if test -r /home/xiaosi/error.txt
then
    echo '檔案可讀'
else
    echo '檔案不可讀'
fi
# 檔案可讀
if test -s /home/xiaosi/error.txt
then
    echo '檔案不為空'
else
    echo '檔案為空'
fi
# 檔案為空
if test -d /home/xiaosi
then
    echo '檔案為目錄'
else
    echo '檔案不為目錄'
fi
# 檔案為目錄           

https://note.youdao.com/md/preview/preview.html?file=%2Fyws%2Fapi%2Fpersonal%2Ffile%2FWEB17db121f19641ccdd5db6d4b88f44af2%3Fmethod%3Ddownload%26read%3Dtrue#4-%E9%80%BB%E8%BE%91%E6%93%8D%E4%BD%9C 4. 邏輯操作

Shell還提供了與( -a )、或( -o )、非( ! )三個邏輯操作符用于将測試條件連接配接起來,其優先級為:"!"最高,"-a"次之,"-o"最低。

str="2016-11-21"
if test "${str}" = "2016-11-21" -a -s /home/xiaosi/error.txt
then
    echo '日期正确 并且 檔案不為空'
else
    echo '日期錯誤 或者 檔案為空'
fi
# 日期錯誤 或者 檔案為空