條件測試命令

 條件測試(test)命令共有三類條件測試表達式:node

第一類是進行數值的比較,第二類是進行字符串的比較,第三類是進行文件的測試,例如測試一個文件是否存在等等。
shell


 1.數值測試,須要兩個操做數進行比較,即爲雙目測試符;express

-eq:測試兩個數值是否相等;相等爲真,不等爲假;bash

-ne:測試兩個數值是否不等;不等爲真,相等爲假;ide

-lt:小於,測試左邊數值是否小於右邊的數值;小於爲真,不小於爲假;測試

-gt:大於,測試左邊數值是否大於右邊的數值;大於爲真,不大於爲假;編碼

-le:小於等於,測試左邊數值是否不大於右邊數值;不大於爲真,大於爲假;spa

-ge:大於等於,測試左邊數值是否不小於右邊數值;不小於爲真,小於爲假;code

總結:eq相等,ne不相等,gt大於,lt小於,le小於等於,ge 大於等於orm

例如:

[root@localhost ~]# test 1 -eq 2 

[root@localhost ~]# echo $?

1

[root@localhost ~]# test 1 -ne 2 

[root@localhost ~]# echo $?

0

[root@localhost ~]# test 1 -lt 2 

[root@localhost ~]# echo $?

0

[root@localhost ~]# test 1 -gt 2 

[root@localhost ~]# echo $?

1

[root@localhost ~]# test 1 -le 2 

[root@localhost ~]# echo $?

0

[root@localhost ~]# test 1 -ge 2 

[root@localhost ~]# echo $?

1

也能夠用 [   ]

例如:

[root@localhost ~]# [ 1 -eq 2 ]

[root@localhost ~]# echo $?

1

 效果是同樣的,要注意的是若是使用[]或[[]]進行條件判斷,在表達式的兩端都有留有空白字符,以區分命令和參數之間的關係;


  注意:這類命令通常沒有執行結果,只有執行狀態返回值,因此當咱們要查看比對結果的時候須要使用echo命令將執行的結果顯示出來。



2.字符串測試:

 雙目操做符:

 ==|=:被測試的兩個字符串是否相等,相同爲真,不一樣爲假;

    例如:

  ~]$ [[ abc == abc ]]
  ~]$  echo   $?

0


  ~]$ [[ abc == aba ]]
  ~]$  echo   $?
1

 !=:被測試的兩個字符是否不相同,不一樣爲真,相同爲假; 這個符號的功能與==相反;

   例如:

~]$ [[ abc != abc ]]
  ~]$  echo   $?
1

~]$ [[ abc != aba ]]
~]$  echo   $?

   0

 

>:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串對應的ASCII編碼大;大於爲真,小於爲假;

<:測試左邊的字符串所對應的ASCII編碼是否比右邊的字符串對應的ASCII編碼小;小於爲真,大於爲假;

例如:

  ~]$ [[ abc < abd ]]
  ~]$  echo   $?
0

    

  ~]$ [[ abc < abb ]]
  ~]$  echo   $?
1

 =~:被測試的兩個字符串,左邊字符串可否被右邊的字符串匹配,能匹配爲真,不能匹配爲假;

例如:

  ~]$ [[ abc =~ aba ]]

 ~]$ echo $?

1

  ~]$ [[ abcdef =~ abc ]]
  ~]$  echo   $?
0


 注意:>, <, =~這三類測試操做符只能用在[[ expression ]]測試語句中,在單個[  ]是使用不了的;

 單目操做符:

-z 'STRING':測試STRING是否爲空串;空串爲真,不空爲假;

-n 'STRING':測試STRING是否爲非空串;不空爲真,空串爲假;


注意:

1) 一般狀況下,字符串是要用引號引用的,單引號或雙引號均可以,只有在特定的狀況下,只能選擇單引號或雙引號之一;

2) []和[[]]在某些狀況下,意義不徹底相同,要區分對待;

3) 若是使用[]或[[]]進行條件判斷,在表達式的兩端都有留有空白字符,以區分命令和參數之間的關係;

4) 全部的雙目測試操做符和參數之間也要留有空白字符空間;



3.文件測試:


 1)文件存在性測試

  -a file:測試的文件存在爲真,不存在爲假;

  -e file:測試的文件存在爲真,不存在爲假;


  2)文件類型測試

  -b file:被測試的文件是否存在而且是否爲塊設備;

  -c file:被測試文件是否存在而且爲字符設備;

  -d file:被測試文件是否存在而且爲目錄設備;

  -f file:被測試文件是否存在而且爲普通文件;

  -h|-L file:被測試的文件是否存在而且是否爲符號連接文件;

  -s FILE:測試文件是否存在且其大小大於0;

  -S file:被測試文件是否存在而且是否爲套接字文件;

    -t  file:測試文件描述符是否在終端上被打開;


 3)文件的訪問權限設置:

  -r file:被測試文件是否存在,而且當前有效用戶是否可讀;

  -w file:被測試文件是否存在,而且當前有效用戶是否可寫;

  -x file:被測試文件是否存在,而且當前有效用戶是否可執行;


 4)文件特殊權限標識測試:

 -u file:被測試的文件是否存在而且設置了SUID權限;

 -g file:被測試文件是否存在而且設置了SGID權限;

 -k file:被測試的文件是否存在而且是否設置了sticky權限;


  5)文件全部權測試:

  -O file:被測試的文件是否存在而且其屬主是否爲當前有效用戶;

  -G file:被測試的文件是否存在而且其屬組是否爲當前有效用戶的所在組;


 6)時間戳測試:

  -N file:被測試文件自從上一次被修改以後,是否被修改過;


  7)雙目測試:

  file1 -ef file2 :測試的兩個文件是否指向同一個文件系統的相同inode的

  

 8)硬連接測試:

  file1 -nt file2:被測試的兩個文件,file1是否比file2更新;

  file1 -ot file2:被測試的兩個文件,file1是否比file2更舊;




測試語句中能夠添加邏輯運算:

 第一種表達式:

[ expression1 ] && [ expression2 ]

[ expression1 ] || [ expression2 ]

! [ expression ]


 第二種表達式:

[ expression1 -a expression2 ]

[ expression1 -o expression2 ]

[ ! expression ]

   

     在命令執行後會有一個結果的返回值,這個返回值分兩種,第一種是正常的命令的輸出結果,第二種是這個命令執行的狀態,有的時候可能會沒有第一種返回值,但必定會有第二種狀態返回值。狀態返回值的數字保存在「?」這個變量中,能夠經過「echo $?」命令進行查看。根據不一樣的狀態返回值的數字,咱們能夠判斷命令執行的狀態,命令的執行結果以下:

    0:成功

    1,2,127:爲系統保留的狀態返回值,在咱們本身編寫腳本的時候儘可能避開這些

    3-126,128-255:用戶自定義的執行狀態返回值

注意:

當shell腳本運行時,一旦遇到exit命令,將當即結束運行此腳本的shell進程,同時此腳本的運行也會中止,其後續的全部命令都不會再被解釋執行;所以,包含了exit命令的腳本,不要使用source命令來執行;

相關文章
相關標籤/搜索