linux-shell編程3:測試(test)

退出與測試

在linux中,每個命令或者腳本完成後都會有一個退出狀態:
在shell中有一個內部命令test命令用於判斷語句進行測試一種或者幾種狀態條件是否成立
#退出狀態,測試和判斷密切相關

退出狀態:

當命令執行成功後,系統會返回一個退出狀態,這個狀態由數值表示,判斷命令是否正確執行,若退出狀態爲0,表示命令執行成功,若爲其他數值,則表示運行失敗

查看狀態碼用 $?

狀態碼     含義
0           代表運行成功,程序執行ok
1-125       代表執行失敗,腳本,命令,系統命令或傳遞參數失敗
126         找到了命令但無法執行
127         沒找到命令
>128        命令被系統強制結束

ls;echo $?

測試結構

測試命令用於測試表達式的條件的真假,如果條件爲真,則返回0,
如果條件爲假,則返回一個非0數值

#測試結構語法
第一種:
    test expression

    expression爲表達式,該表達式可以是數字,字符串,文本,文件屬性的比較

第二種:
    [ expression ]

    expression爲表達式
    [ 代表測試啓動
    表達式與[]倆邊必須有空格,
    這種方法經常與if,Case,while等語句連用

整數比較運算符

主要用於倆個值的比較,比較簡答

#測試結構
    test 'num'  整數比較運算符  ‘num’
或:
    [ ‘num’ 整數比較運算符 ‘num’ ]

#常用運算符
num1 -eq num2       如果num1等於nunm2,測試結果爲0
num1 -ge num2       如果num1大於等於num2,測試結果爲0
num1 -gt num2       如果num1大於num2,測試結果爲0
num1 -le num2       如果num1小於等於num2,測試結果爲0
num1 -lt num2       如果num1小於num2,測試結果爲0
num1 -ne num2       如果num1不等於num2,測試結果爲0

#一個整數與一個整數常量的比較
[root@localhost ~]# num=15
[root@localhost ~]# [ "$num" -eq 15 ];echo $?
0
[root@localhost ~]# [ "$num" -gt 10 ];echo $?
0
[root@localhost ~]# [ "$num" -gt 20 ];echo $?
1
[root@localhost ~]# [ "$num" -lt 15 ];echo $?
1

#倆個變量作比較
[root@localhost ~]# first_num=99
[root@localhost ~]# second_num=100
[root@localhost ~]# [ "$first_num" -gt "$second_num" ];echo $?
1
[root@localhost ~]# [ "$first_num" -lt "$second_num" ];echo $?
0

#注意:整數比較運算符不適用與浮點型數值比較,這一點與C語言區別
[root@localhost ~]# [ 1.5 -lt 2.2 ];echo $?
-bash: [: 1.5: integer expression expected
2

字符串運算符

字符串運算符可以用來測試字符串是否爲空,倆個字符串是否想等或者不相等,
主要用來測試用戶用戶輸入是否爲空或者判斷計較字符串變量;

#字符串運算符總共有5種

#注意,字符串運算符只能使用test,不能使用[]這種格式
#倆個字符串進行比較時,變量也用雙引號引起來,變量爲空也得用雙引號

string      測試字符串是否不爲空
-n  string      測試字符串是否不爲空(爲空等於長度爲0)
-z  string      測試字符串string是否爲空
string1=string2 測試字符串是否相等
string!=string2 測試字符串是否不相等

    [root@localhost Desktop]# str1="";test "$str1";echo $?
    1
    [root@localhost Desktop]# str1="7";test "$str1";echo $?
    0
    [root@localhost Desktop]# test -n "$str1";echo $?
    0
    [root@localhost Desktop]# test -z "$str1";echo $?
    1
    [root@localhost Desktop]# 

    [root@localhost Desktop]# str1="vi"
    [root@localhost Desktop]# str2="vim"
    [root@localhost Desktop]# [ "$str1" = "$str2" ];echo $?
    1
    [root@localhost Desktop]# [ "$str1" != "$str2" ];echo $?
    0
    [root@localhost Desktop]# 

    [root@localhost Desktop]# str="hello "
    [root@localhost Desktop]# [ "$str" = "hello" ];echo $?
    1
    [root@localhost Desktop]# str="hello"
    [root@localhost Desktop]# [ "$str" = "HELLO" ];echo $?
    1

    num="007"       #給變量賦值,可以當作整數,也可以當作字符串
    [ "$num" -eq "7" ];echo $?      #測試變量num是否等於整數7
    [ "$num" = "7" ];echo $?    #測試變量num的值是否等於字符串7        

文件操作符

可以完成測試文件的各種操作
格式:
    test file_operator file
或:
    [ file_operator file ]

#常用的文件操作符

-d  file        #測試file是否是目錄
-e  file        #測試file是否存在
-f  file        #測試file是否是普通文件
-r  file        #測試file是否可讀
-s  file        #測試file是否不爲空
-w  file        #測試file是否可寫
-x  file        #測試file是否是可執行文件
-h  file        #測試file是否是鏈接文件

[root@localhost ~]# [ -e xasxa ] && echo  "Y"  || echo "N"  && echo $? 
N
0
[root@localhost ~]# 
[root@localhost ~]# [ -f /etc/passwd ] && echo  "Y"  || echo "N"
Y
[root@localhost ~]# [ -f /etc/passwds ] && echo  "Y"  || echo "N"
N
[root@localhost ~]# 
[root@localhost ~]# test -d /etc/ && echo "Y" ||  echo "N"
Y
[root@localhost ~]# 

邏輯運算符

邏輯運算符用於測試多個條件是否爲真爲假,或使用邏輯非運算測試單個表達式

邏輯非,邏輯與,邏輯或

!   expression    #如果expression,整個測試結果爲真
expression1 -a  expression2     #同時爲真則爲真
expression  -o  expression2     #有真則真

[root@localhost ~]# [ -e initial-setup-ks.cfg ];echo $?
0
[root@localhost ~]# [ !  -e initial-setup-ks.cfg ];echo $?
1
[root@localhost ~]# [ -e initial-setup-ks.cfg -a -x anaconda-ks.cfg ];echo $?
1
[root@localhost ~]# 

[root@localhost ~]# num=15
[root@localhost ~]# [ "$num" -lt 20 -o "$num" -gt 30 ];echo $?
0
[root@localhost ~]# 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章