[shell基礎]——整數比較;字串比較;檔案測試;邏輯測試符

Jelly_lyj發表於2017-03-18

整數比較
方法一:[  ] 或 [[  ]]
   (1) 此方法需要使用整數比較運算子。[標註:equal 等於   greater 大於   less-then 小於]

    

  (2) 使用時一定要注意前後一定要有的空格:[  num1 -eq num2  ]   [[  num1 -eq num2  ]]

方法二:((  ))
  (1) 此方法使用的是類似數學運算比較的運算子:==  >=  <=  !=  

# a=2;b=3
# [ $a -eq $b ];echo $?
1
# [ $a -lt $b ];echo $?
0
# (($a==$b));echo $?
1
# (($a<=$b));echo $?
0
# (($a!=$b));echo $?
0
# ((10-2==8));echo $?
0
# ((10-2!=8));echo $?
1

 


字串比較

方法一:[ ] 或 [[  ]] 

  (1) 使用的比較運算子是:=  !=
  (2) 如果要使用萬用字元,要用[[ ]]
  (3) 寫的時候一定要注意等號兩邊都要有空格

# string0="";string1="abc"
===判斷字串是否為空===
# [ -z $string0 ];echo $?
0
# [ -z $string1 ];echo $?
1

# [ $string1 = "abc" ];echo $?
0
# [ $string1 != "abc" ];echo $?
1

# [[ $string1 = ??? ]];echo $?
0
# [[ $string1 = a* ]];echo $?
0

方法二:test

-z  判斷字串是否為空,若為空則為真
-n  判斷字串是否為不空,若為不空則為真
 

檔案測試

檔案型別判斷:
-e   測試目錄或檔案是否存在(exist)
-f    測試該檔名是否存在且為檔案(file)
-d   測試該檔名是否存在且為目錄(directory)
-L   測試該檔名是否存在且為連結檔案(Link)
-b   測試該檔名是否存在且為塊裝置(block)
-c   測試該檔名是否存在且為字元裝置
-p   測試該檔名是否存在且為管道檔案

檔案許可權判斷:
-s   測試檔案是否存在且內容非空(應當注意有1個空格也是非空)
-r    測試當前使用者是否有可讀許可權
-w   測試當前使用者是否有可寫許可權
-x    測試當前使用者是否有可執行許可權
-u    測試檔名是否存在並且具有SUID屬性
-g    測試檔名是否存在並且具有SGID屬性
-k    測試檔名是否存在並且具有Sticky屬性

 

 


 

邏輯操作符

-a 邏輯與:操作符兩邊均為真,結果為真,否則為假。
-o 邏輯或:操作符兩邊一邊為真,結果為真,否則為假。
!   邏輯否:條件為假,結果為真.

測試判斷常配合if/else語句使用,看看寫法:
if [ -w file1 -a -w file2 ]
if [ $? -eq 0 ]
then
    echo "file1 file2 have write permisson"
else
    echo "file1 file2 have not w permisson"
fi

if [ -d /tmp/dir1 ]
then
    echo "the dir1 is existed"
else
    echo "the dir1 is not existed"
    mkdir /tmp/dir1
fi

 


 



相關文章