退出與測試
在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 ~]#