shell腳本學(xué)習(xí)2-分支語(yǔ)句

???????上一節(jié)的內(nèi)容都是從上到下執(zhí)行的順序語(yǔ)句,本節(jié)介紹shell中的分支語(yǔ)句,滿足一些邏輯判斷的使用。shell中分支語(yǔ)句主要是兩種:一種是if語(yǔ)句,另一種是case語(yǔ)句。

1. if語(yǔ)句

?1.1 簡(jiǎn)單的if語(yǔ)句

if后面的指令,首先會(huì)被執(zhí)行,然后根據(jù)指令的返回狀態(tài)碼進(jìn)入對(duì)應(yīng)的分支。如果狀態(tài)碼為0,也就是指令執(zhí)行成功,就進(jìn)去then的部分;非0則進(jìn)入其他分支。舉例,建立腳本如下:

#!/bin/bash? ??

if date;then

? ? echo "date return $?"

fi

運(yùn)行結(jié)果如下:

2019年 12月 07日 星期六 23:00:25 CST

date return 0

再舉一個(gè)返回碼非零的例子,建立腳本test10.sh如下:

#/bin/bash

if abcdefg;then

? ? echo "success->abcdefg return $?"

else

? ? echo "failed->abcdefg return $?"

fi

運(yùn)行結(jié)果如下:

./test10.sh: 行 2: abcdefg: 未找到命令

failed->abcdefg return 127

1.2 條件判斷

上面的返回值是通過(guò)指令的狀態(tài)碼來(lái)選擇分支,還有一種用的比較多的就是條件判斷。

1.2.1 數(shù)學(xué)相關(guān)的判斷

數(shù)學(xué)比較指的是對(duì)兩個(gè)數(shù)字的大小進(jìn)行判斷,其中-eq判斷是否相等(equal),-ge判斷大于等于(getter equal),-gt判斷大于(getter),-le判斷小于等于(lower equal),-lt判斷小于(lower),-ne判斷不等于(not equal)。

舉個(gè)例子:

#/bin/bash

var1=34

var2=35

if [ $var1 -eq $var2 ];then

? ? echo "$var1 and $var2 is equal"

else

? ? echo "not equal"

fi

輸出結(jié)果:

not equal

注意:這些比較只能用在整數(shù)里面。

注意:有時(shí)候我們想在if判斷中使用大于小于號(hào)這種符號(hào)進(jìn)行判斷,那么可以使用雙小括號(hào)的形式。舉例如下:

#/bin/bash

var=3

if (( $var ** 2 >= 9 ));then

? ? (( var2 = $var ** 2 ))

? ? echo "var2 = $var2"

fi

運(yùn)行結(jié)果:

var2 = 9

1.2.2 字符串相關(guān)的判斷

字符串比較包括?

(1) 字符串是否相等 :? str1 = str2

? (2)? ? 字符串是否不等: str1 != str2

? (3)? ?字符串大小,也就是字典順序,越靠后越大:str1 > str2或者str1 < str2,注意:這里的符號(hào)要轉(zhuǎn)義,否則變成了重定向了。

? (4) 字符串長(zhǎng)度是否為0 :-z str

? ?(5)? 字符串長(zhǎng)度是否非0: -n str


a)比較相等的舉例:

#/bin/bash

name=wulinwaizhuan

name2=$name

if [ $name = $name2 ];then

? ? echo "$name and $name2 is equal"

else

? ? echo "$name and $name2 is not equal"

fi

運(yùn)行結(jié)果:

wulinwaizhuan and wulinwaizhuan is equal

b)比較字典序

#/bin/bash

var1="wulinwaizhuan"

var2="Wulinwaizhuan"

if [ $var1 \< $var2 ];then

? ? echo "$var1 is less than $var2"

else

? ? echo "$var2 is less than $var1"

fi

運(yùn)行結(jié)果:

Wulinwaizhuan is less than wulinwaizhuan

這說(shuō)明大寫(xiě)字母排在字典的后面(類(lèi)似于ascii的大小)。

注意:sort 命令會(huì)把小寫(xiě)字母放在前面。

c)字符串是否為空

#/bin/bash

var1="wulinwaizhuan"

var2=""

if [ -n $var1 ];then

? ? echo "$var1 is not empty"

fi

if [ -z $var2 ];then

? ? echo 'var is empty'

fi

運(yùn)行結(jié)果:

wulinwaizhuan is not empty

var is empty

注意:有時(shí)候想在字符串比較的時(shí)候使用正則表達(dá)式,可以使用雙方括號(hào),舉例如下:

#/bin/bash

name=wulin345

if [[ $name == wulin[1-5]* ]];then

? ? echo "OK"

fi

運(yùn)行如下:

OK

1.2.3 文件相關(guān)的判斷

(1) -f file 判斷file是否存在并且是一個(gè)文件

(2) -d file 判斷file是否存在并且是一個(gè)文件夾

(3) -e file 判斷file是否存在

(4)-s file判斷file是否存在并且非空

(5) -r file 判斷file是否存在并且可讀

(6) -w file 判斷file是否存在并且可寫(xiě)

(7) -x file判斷是否存在并且可執(zhí)行

(8) -O file判斷file是否存在并且屬于當(dāng)前用戶所有

(9) -G file 判斷file是否存在并且默認(rèn)組與當(dāng)前用戶相同

(10) file1 -nt file2 判斷file1是否比f(wàn)ile2新

(11)file2 -ot file2 判斷file1是否比f(wàn)ile2舊

舉例如下:

1)判斷文件tmp.txt是否存在

#/bin/bash

file=tmp.txt

if [ -e $file ];then

? ? echo "file $file is exist"

fi

運(yùn)行如下:

file tmp.txt is exist8.

2 )判斷目錄/bin是否存在

#/bin/bash

directory=/bin

if [ -d $directory ];then

? ? echo "$directory exists"

else

? ? echo "$directory not exists"

fi

運(yùn)行結(jié)果如下:

/bin exists

1.2.4 多個(gè)條件組合

條件判斷可以用兩種組合,一個(gè)是邏輯與(&&),另一個(gè)是邏輯或(||)

舉例如下:

#/bin/bash

if [ -d /home ] && [ -e /bin ];then

? ? echo "home and bin directory exist"

fi

if [ 3 -gt 2 ] || [ 3 -lt 2 ];then

? ? echo "OK"

fi

運(yùn)行如下:

home and bin directory exist

OK

2. case語(yǔ)句

if語(yǔ)句經(jīng)常用在分支不是很多的場(chǎng)景下,當(dāng)分支較多時(shí)可以考慮使用case語(yǔ)句。

#/bin/bash

fruit=apple

case $fruit in

apple|banaba)

? ? echo "fruit is $fruit"

? ? echo "case 1";;

waterwalemon)

? ? echo "case 2";;

orange)

? ? echo "case 3";;

*)

? ? echo "case default"

esac

運(yùn)行如下:

fruit is apple

case 1deng

注意:可以用豎線把多個(gè)選項(xiàng)并在一起;

可以用*號(hào)匹配最后的其余情況;

每個(gè)case的結(jié)尾要用兩個(gè);;表示結(jié)束,當(dāng)然最后一個(gè)可寫(xiě)可不寫(xiě)。

3 總結(jié)與展望

3.1總結(jié)

(1)如何寫(xiě)簡(jiǎn)單的if語(yǔ)句;

(2)判斷條件中怎么寫(xiě)數(shù)學(xué)相關(guān)的比較,比如大于小于等;

? (3)? 判斷條件中怎么寫(xiě)字符串相關(guān)的比較,比如兩個(gè)字符串是否相等,字符串是否為空等;

? (4)? 文件相關(guān)的判斷,比如文件是否存在

? (5)? 多個(gè)條件組合,比如條件與和條件或

(6)case語(yǔ)句的注意點(diǎn)

3.2 展望

下次更新將學(xué)習(xí)使用shell中的循環(huán)語(yǔ)句怎么寫(xiě)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容