溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Shell腳本中條件判斷語句的語法結(jié)構(gòu)和用法

發(fā)布時間:2020-05-29 09:29:55 來源:億速云 閱讀:316 作者:Leah 欄目:系統(tǒng)運維

這篇文章為大家?guī)碛嘘P(guān)Shell腳本中條件判斷語句的語法結(jié)構(gòu)和用法詳細(xì)介紹。大部分命令和知識點都是大家經(jīng)常用到的,為此分享給大家做個參考。一起跟隨小編過來看看吧。

一、條件判斷語法結(jié)構(gòu)

思考:何為真(true)?何為假(false)?

##1. 條件判斷語法格式

  • 格式1: test 條件表達(dá)式
  • 格式2: [ 條件表達(dá)式 ]
  • 格式3: [[ 條件表達(dá)式 ]]  支持正則 

特別說明:

1)[  親親,我兩邊都有空格,不空打死你呦  ] :imp:

2)[[  親親,我兩邊都有空格,不空打死你呦  ]]:imp:

3)  更多判斷,`man test`去查看,很多的參數(shù)都用來進(jìn)行條件判斷

2. 條件判斷相關(guān)參數(shù)

1)判斷文件類型

判斷參數(shù)含義
-e判斷文件是否存在(任何類型文件)
-f判斷文件是否存在并且是一個普通文件
-d判斷文件是否存在并且是一個目錄
-L判斷文件是否存在并且是一個軟連接文件
-b判斷文件是否存在并且是一個塊設(shè)備文件
-S判斷文件是否存在并且是一個套接字文件
-c判斷文件是否存在并且是一個字符設(shè)備文件
-p判斷文件是否存在并且是一個命名管道文件
-s判斷文件是否存在并且是一個非空文件(有內(nèi)容)

舉例說明:

test -e file                    只要文件存在條件為真
[ -d /shell01/dir1 ]            判斷目錄是否存在,存在條件為真
[ ! -d /shell01/dir1 ]      判斷目錄是否存在,不存在條件為真
[[ -f /shell01/1.sh ]]      判斷文件是否存在,并且是一個普通的文件

2)判斷文件權(quán)限

判斷參數(shù)含義
-r當(dāng)前用戶對其是否可讀
-w當(dāng)前用戶對其是否可寫
-x當(dāng)前用戶對其是否可執(zhí)行
-u是否有suid,高級權(quán)限冒險位
-g是否sgid,高級權(quán)限強制位
-k是否有t位,高級權(quán)限粘滯位

3)判斷文件新舊

說明:這里的新舊指的是文件的修改時間。

判斷參數(shù)含義
file1 -nt  file2比較file1是否比file2新
file1 -ot  file2比較file1是否比file2舊
file1 -ef  file2比較是否為同一個文件,或者用于判斷硬連接,是否指向同一個inode

4)判斷整數(shù)

判斷參數(shù)含義
-eq相等
-ne不等
-gt大于
-lt小于
-ge大于等于
-le小于等于

5)判斷字符串

判斷參數(shù)含義
-z判斷是否為空字符串,字符串長度為0則成立
-n判斷是否為非空字符串,字符串長度不為0則成立
string1 = string2判斷字符串是否相等
string1 != string2判斷字符串是否相不等

6)多重條件判斷

判斷符號含義舉例
-a 和 &&邏輯與[ 1 -eq 1 -a 1 -ne 0 ]     [ 1 -eq 1 ] && [ 1 -ne 0 ]
-o 和 ||邏輯或[ 1 -eq 1 -o 1 -ne 1 ]

特別說明:

&&  前面的表達(dá)式為真,才會執(zhí)行后面的代碼

||   前面的表達(dá)式為假,才會執(zhí)行后面的代碼

;        只用于分割命令或表達(dá)式

① 舉例說明
  • 數(shù)值比較
[root@server ~]# [ $(id -u) -eq 0 ] && echo "the user is admin"
[root@server ~]$ [ $(id -u) -ne 0 ] && echo "the user is not admin"
[root@server ~]$ [ $(id -u) -eq 0 ] && echo "the user is admin" || echo "the user is not admin"

[root@server ~]# uid=`id -u`
[root@server ~]# test $uid -eq 0 && echo this is admin
this is admin
[root@server ~]# [ $(id -u) -ne 0 ]  || echo this is admin
this is admin
[root@server ~]# [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
this is admin
[root@server ~]# su - stu1
[stu1@server ~]$ [ $(id -u) -eq 0 ]  && echo this is admin || echo this is not admin
this is not admin
  • 類C風(fēng)格的數(shù)值比較
注意:在(( ))中,=表示賦值;==表示判斷
[root@server ~]# ((1==2));echo $?
[root@server ~]# ((1<2));echo $?
[root@server ~]# ((2>=1));echo $?
[root@server ~]# ((2!=1));echo $?
[root@server ~]# ((`id -u`==0));echo $?

[root@server ~]# ((a=123));echo $a
[root@server ~]# unset a
[root@server ~]# ((a==123));echo $?
  • 字符串比較
注意:雙引號引起來,看作一個整體;= 和 == 在 [ 字符串 ] 比較中都表示判斷
[root@server ~]# a='hello world';b=world
[root@server ~]# [ $a = $b ];echo $?
[root@server ~]# [ "$a" = "$b" ];echo $?
[root@server ~]# [ "$a" != "$b" ];echo $?
[root@server ~]# [ "$a" !== "$b" ];echo $?        錯誤
[root@server ~]# [ "$a" == "$b" ];echo $?
[root@server ~]# test "$a" != "$b";echo $?

test  表達(dá)式
[ 表達(dá)式 ]
[[ 表達(dá)式 ]]

思考:[ ] 和 [[ ]] 有什么區(qū)別?

[root@server ~]# a=
[root@server ~]# test -z $a;echo $?
[root@server ~]# a=hello
[root@server ~]# test -z $a;echo $?
[root@server ~]# test -n $a;echo $?
[root@server ~]# test -n "$a";echo $?

# [ '' = $a ];echo $?
-bash: [: : unary operator expected
2
# [[ '' = $a ]];echo $?
0

[root@server ~]# [ 1 -eq 0 -a 1 -ne 0 ];echo $?
[root@server ~]# [ 1 -eq 0 && 1 -ne 0 ];echo $?
[root@server ~]# [[ 1 -eq 0 && 1 -ne 0 ]];echo $?
② 邏輯運算符總結(jié)
1. 符號;和&&和||都可以用來分割命令或者表達(dá)式
2. 分號(;)完全不考慮前面的語句是否正確執(zhí)行,都會執(zhí)行;號后面的內(nèi)容
3. `&&`符號,需要考慮&&前面的語句的正確性,前面語句正確執(zhí)行才會執(zhí)行&&后的內(nèi)容;反之亦然
4. `||`符號,需要考慮||前面的語句的非正確性,前面語句執(zhí)行錯誤才會執(zhí)行||后內(nèi)容;反之亦然
5. 如果&&和||一起出現(xiàn),從左往右依次看,按照以上原則

以上就是Shell腳本中條件判斷語句的語法結(jié)構(gòu)和用法的介紹,自己動手嘗試下條件語句的使用方法吧,更多內(nèi)容歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI