test命令的使用以及判斷語法


test命令

Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。

語法:test EXPRESSION 或者 [ EXPRESSION ]

  字符串判斷(用於看用戶有沒有輸入指定的變量 指定用戶輸入目錄 如沒填)

  -n 字符段長度是否非零的 如果結果為真值 返回值為0 如果結果為假值返回值非0

數值測試

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

實例演示:

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

 

輸出結果:

兩個數相等!

代碼中的 [ ] 執行基本的算數運算,如:

#!/bin/bash

a=5
b=6

result=$[a+b] # 注意等號兩邊不能有空格
echo "result 為: $result"

 

結果為:

result 為: 11

字符串測試

參數 說明
= 等於則為真
!= 不相等則為真
-z 字符串 字符串的長度為零則為真
-n 字符串 字符串的長度不為零則為真

實例演示:

num1="ru1noob"
num2="runoob"
if test $num1 = $num2
then
    echo '兩個字符串相等!'
else
    echo '兩個字符串不相等!'
fi

 

輸出結果:

兩個字符串不相等!

文件測試

參數 說明
-e 文件名 如果文件存在則為真
-r 文件名 如果文件存在且可讀則為真
-w 文件名 如果文件存在且可寫則為真
-x 文件名 如果文件存在且可執行則為真
-s 文件名 如果文件存在且至少有一個字符則為真
-d 文件名 如果文件存在且為目錄則為真
-f 文件名 如果文件存在且為普通文件則為真
-c 文件名 如果文件存在且為字符型特殊文件則為真
-b 文件名 如果文件存在且為塊特殊文件則為真

實例演示:

cd /bin
if test -e ./bash
then
    echo '文件已存在!'
else
    echo '文件不存在!'
fi

 

輸出結果:

文件已存在!

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

cd /bin
if test -e ./notFile -o -e ./bash
then
    echo '至少有一個文件存在!'
else
    echo '兩個文件都不存在'
fi

條件判斷語句

1、基本語法:

if [ command ]; then
     符合該條件執行的語句
fi

 

2、擴展語法:

if [ command ];then
     符合該條件執行的語句
elif [ command ];then
     符合該條件執行的語句
else
     符合該條件執行的語句
fi

 

 3、語法說明:
      bash shell會按順序執行if語句,如果command執行后且它的返回狀態是0,則會執行符合該條件執行的語句,否則后面的命令不執行,跳到下一條命令。
當有多個嵌套時,只有第一個返回0退出狀態的命令會導致符合該條件執行的語句部分被執行,如果所有的語句的執行狀態都不為0,則執行else中語句。
返回狀態:最后一個命令的退出狀態,或者當沒有條件是真的話為0。

 常用參數:

文件/目錄判斷:

 

常用的:
[ -a FILE ] 如果 FILE 存在則為真。
[ -d FILE ] 如果 FILE 存在且是一個目錄則返回為真。
[ -e FILE ] 如果 指定的文件或目錄存在時返回為真。
[ -f FILE ] 如果 FILE 存在且是一個普通文件則返回為真。
[ -r FILE ] 如果 FILE 存在且是可讀的則返回為真。
[ -w FILE ] 如果 FILE 存在且是可寫的則返回為真。(一個目錄為了它的內容被訪問必然是可執行的)
[ -x FILE ] 如果 FILE 存在且是可執行的則返回為真。

不常用的:
[ -b FILE ] 如果 FILE 存在且是一個塊文件則返回為真。
[ -c FILE ] 如果 FILE 存在且是一個字符文件則返回為真。
[ -g FILE ] 如果 FILE 存在且設置了SGID則返回為真。
[ -h FILE ] 如果 FILE 存在且是一個符號符號鏈接文件則返回為真。(該選項在一些老系統上無效)
[ -k FILE ] 如果 FILE 存在且已經設置了冒險位則返回為真。
[ -p FILE ] 如果 FILE 存並且是命令管道時返回為真。
[ -s FILE ] 如果 FILE 存在且大小非0時為真則返回為真。
[ -u FILE ] 如果 FILE 存在且設置了SUID位時返回為真。
[ -O FILE ] 如果 FILE 存在且屬有效用戶ID則返回為真。
[ -G FILE ] 如果 FILE 存在且默認組為當前組則返回為真。(只檢查系統默認組)
[ -L FILE ] 如果 FILE 存在且是一個符號連接則返回為真。
[ -N FILE ] 如果 FILE 存在 and has been mod如果ied since it was last read則返回為真。
[ -S FILE ] 如果 FILE 存在且是一個套接字則返回為真。
[ FILE1 -nt FILE2 ] 如果 FILE1 比 FILE2 新, 或者 FILE1 存在但是 FILE2 不存在則返回為真。
[ FILE1 -ot FILE2 ] 如果 FILE1 比 FILE2 老, 或者 FILE2 存在但是 FILE1 不存在則返回為真。
[ FILE1 -ef FILE2 ] 如果 FILE1 和 FILE2 指向相同的設備和節點號則返回為真。

 

 字符串判斷

[ -z STRING ] 如果STRING的長度為零則返回為真,即空是真
[ -n STRING ] 如果STRING的長度非零則返回為真,即非空是真
[ STRING1 ]  如果字符串不為空則返回為真,與-n類似
[ STRING1 == STRING2 ] 如果兩個字符串相同則返回為真
[ STRING1 != STRING2 ] 如果字符串不相同則返回為真
[ STRING1 < STRING2 ] 如果 “STRING1”字典排序在“STRING2”前面則返回為真。
[ STRING1 > STRING2 ] 如果 “STRING1”字典排序在“STRING2”后面則返回為真。

 

 數值判斷

[ INT1 -eq INT2 ] INT1和INT2兩數相等返回為真 ,=
[ INT1 -ne INT2 ] INT1和INT2兩數不等返回為真 ,<>
[ INT1 -gt INT2 ] INT1大於INT2返回為真 ,>
[ INT1 -ge INT2 ] INT1大於等於INT2返回為真,>=
[ INT1 -lt INT2 ] INT1小於INT2返回為真 ,<
[ INT1 -le INT2 ] INT1小於等於INT2返回為真,<=

邏輯判斷

[ ! EXPR ] 邏輯非,如果 EXPR 是false則返回為真。
[ EXPR1 -a EXPR2 ] 邏輯與,如果 EXPR1 and EXPR2 全真則返回為真。
[ EXPR1 -o EXPR2 ] 邏輯或,如果 EXPR1 或者 EXPR2 為真則返回為真。
[ ] || [ ] 用OR來合並兩個條件
[ ] && [ ] 用AND來合並兩個條件

 

 F高級特性:
雙圓括號(( )):表示數學表達式
在判斷命令中只允許在比較中進行簡單的算術操作,而雙圓括號提供更多的數學符號,而且在雙圓括號里面的'>','<'號不需要轉意。

雙方括號[[ ]]:表示高級字符串處理函數
雙方括號中判斷命令使用標准的字符串比較,還可以使用匹配模式,從而定義與字符串相匹配的正則表達式。

雙括號的作用:
在shell中,[ $a != 1 || $b = 2 ]是不允許出,要用[ $a != 1 ] || [ $b = 2 ],而雙括號就可以解決這個問題的,[[ $a != 1 || $b = 2 ]]。又比如這個[ "$a" -lt "$b" ],也可以改成雙括號的形式(("$a"
 < "$b"))

if語句使用方法

最精簡的 if 命令的語法是:
if TEST-COMMANDS; then CONSEQUENT-COMMANDS; fi

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM