Shell條件語(yǔ)句(條件測(cè)試、if語(yǔ)句、case語(yǔ)句)
一.條件語(yǔ)句
條件測(cè)試:判斷某需求是否滿足,需要由測(cè)試機(jī)制來(lái)實(shí)現(xiàn),專用的測(cè)試表達(dá)式需要由測(cè)試命令輔助完成。
測(cè)試過(guò)程,實(shí)現(xiàn)評(píng)估布爾聲明,以便用在條件性環(huán)境下進(jìn)行執(zhí)行
- 若真,則狀態(tài)碼變量 $? 返回0
- 若假,則狀態(tài)碼變量 $? 返回1
1.test命令測(cè)試條件表達(dá)式
格式1:test [操作符選項(xiàng)] 條件表達(dá)式
格式2:[ 操作符 條件表達(dá)式 ]
常見(jiàn)的測(cè)試操作符 | 含義 |
---|---|
-d | 測(cè)試是否為目錄(directory) |
-e | 測(cè)試目錄或文件是否存在(Exist) |
-f | 測(cè)試是否為文件(File) |
-r | 測(cè)試當(dāng)前用戶是否有權(quán)限讀取(Read) |
-w | 測(cè)試當(dāng)前用戶是否有權(quán)限寫(xiě)入(Write) |
-x | 測(cè)試當(dāng)前用戶是否有權(quán)限執(zhí)行(eXcute) |
-L | 測(cè)試是否為軟連接文件 |
-nt | 判斷文件A是否比文件B新 |
-ot | 判斷文件A是否比文件B舊 |
-ef | 判斷兩個(gè)文件是否為同一文件 |
示例1:test [操作符選項(xiàng)] 條件表達(dá)式
示例2:[ 操作符 條件表達(dá)式 ]
2.整數(shù)數(shù)值比較
格式:
[ 整數(shù)1 操作符 整數(shù)2 ]
常見(jiàn)測(cè)試操作符:
操作符 | 含義 |
---|---|
-eq | 等于(Equal) |
-ne | 不等于(Not Equal) |
-lt | 小于(Leser Than) |
-gt | 大于(Greater Than) |
-le | 小于或等于(Lesser or Equal) |
-ge | 大于或等于(Greater or Equal) |
示例1:比較兩個(gè)整數(shù)大小
示例2:查詢當(dāng)前目錄下的文件數(shù)是否大于10,如果大于,則進(jìn)行提示
示例3: 查看系統(tǒng)內(nèi)存是否低于1024M,如果低于則提示
3.字符串比較
格式: [ "字符串1" = "字符串2" ] #判斷是否相等 [ "字符串1" != "字符串2" ] #判斷是否不等 [ -z "字符串" ] #判斷字符串內(nèi)容是否為空 [ -n "字符串" ] #判斷字符是否存在
示例:
4.邏輯測(cè)試(短路運(yùn)算)
格式:
[ 表達(dá)式1 ] 操作符 [ 表達(dá)式2 ]
命令1 操作符 命令2
常見(jiàn)條件
- -a或&&:邏輯與,“而且”的意思全真才為真
- -o或||:邏輯或,“或者”的意思一真即為真
- !:邏輯否
[ 表達(dá)式1 ] && [ 表達(dá)式2 ] 等同于 [ 表達(dá)式1 -a 表達(dá)式2 ] 等同于 [[ 表達(dá)式1 && 表達(dá)式2 ]] [ 表達(dá)式1 ] || [ 表達(dá)式2 ] 等同于 [ 表達(dá)式1 -o 表達(dá)式2 ] 等同于 [[ 表達(dá)式1 || 表達(dá)式2 ]]
三元運(yùn)算符
[ 表達(dá)式 ] && a || b
當(dāng)條件表達(dá)式為真時(shí),取a值;當(dāng)條件表達(dá)式為假時(shí),取b值
二.if語(yǔ)句
1.單分支結(jié)構(gòu)
如果只有一個(gè)判斷式要進(jìn)行,那么我們可以使用單分支的if語(yǔ)句
格式: if [ 條件判斷式 ]; then #當(dāng)條件判斷成立時(shí),可以進(jìn)行的命令工作內(nèi)容 fi #這里將if反過(guò)來(lái)寫(xiě),結(jié)束if語(yǔ)句的意思
2.雙分支結(jié)構(gòu)
格式: if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi
3.多分支結(jié)構(gòu)
格式: if [ 條件判斷式 ]; then 當(dāng)條件判斷成立時(shí),可以進(jìn)行的命令工作內(nèi)容 elif [ 條件判斷式二 ]; then 當(dāng)條件判斷成立時(shí),可以進(jìn)行的命令工作內(nèi)容 else 當(dāng)上面的條件判斷都不成立時(shí),可以進(jìn)行的命令工作內(nèi)容 fi
三.case語(yǔ)句
格式: case 變量名稱 in “第一個(gè)變量?jī)?nèi)容” 程序段 ;; “第二個(gè)變量?jī)?nèi)容” 程序段 ;; *) 不包含第一個(gè)變量?jī)?nèi)容與第二個(gè)變量?jī)?nèi)容的其他程序執(zhí)行段 默認(rèn)程序段 ;; esac
注意點(diǎn):
- case行首必須以單詞“in”,每一模式必須以單個(gè)右括號(hào)")"結(jié)束
- 雙分號(hào)";;"表示命令序列的結(jié)束
- 模式字符串中,可以用方括號(hào)表示一個(gè)連續(xù)的范圍,如"[0-9]";還可以使用豎杠|表示或,比如a|b
- 最后的)表示默認(rèn)模式,其中的相當(dāng)于通配符
四.if語(yǔ)句和case語(yǔ)句腳本小倉(cāng)庫(kù)
1.字符識(shí)別輸入數(shù)字or字母(case
#!/bin/bash read -p "請(qǐng)?jiān)诖颂庉斎耄? key case $key in [0-9]) echo "你輸入的是 數(shù)字" ;; [a-z]|[A-Z]) echo "你輸入的是 字母" ;; *) echo "輸入有誤" bash $0 esac
2.分?jǐn)?shù)等級(jí)分類(if
#!/bin/bash #積分分類 read -p "請(qǐng)輸入積分(0-100):" JF if [ $JF -ge 90 ];then echo '優(yōu)' elif [ $JF -lt 90 ];then echo '差' fi
3.測(cè)試機(jī)器是否在線(for、if
#!/bin/bash for i in {1..254} do { ping -c2 -w2 192.168.91.$i &>/dev/null if [ $? -eq 0 ] then echo host $i is online echo "$i" >> host.txt else echo "host $i is offline" fi }& done wait
4.猜價(jià)格小游戲(while、if
#!/bin/bash p=`echo $[RANDOM%1000+1]` time=0 while true do let time++ read -p "請(qǐng)輸入您猜測(cè)的價(jià)格(1-1000):" h if [ $h -eq $p ] then echo "恭喜您猜中了,您一共猜測(cè)了$time次" exit elif [ $h -gt $p ] then echo "您猜測(cè)的價(jià)格過(guò)高" else echo "您猜測(cè)的價(jià)格過(guò)低" fi done
5.檢查文件是否存在且有執(zhí)行權(quán)限(if
#!/bin/bash #檢查用戶家目錄中的 test.sh 文件是否存在,并且檢查是否有執(zhí)行權(quán) cd /root test -f test.sh if [ $? -eq 0 ];then test -x test.sh if [ $?-eq 0 ];then echo "有test.sh文件且可執(zhí)行" else echo "有test.sh文件但不可執(zhí)行" fi else echo "沒(méi)有test.sh文件" fi
6.賽跑選拔并分組(if
#!/bin/bash #提示用戶輸入100米賽跑的秒數(shù),要求判斷秒數(shù)大于0且小于等于10秒的進(jìn)入選拔賽, #大于10秒的都淘汰,如果輸入其它字符則提示重新輸入; #進(jìn)入選拔賽的成員再進(jìn)一步判斷男女性別,男生進(jìn)男生組,女生進(jìn)女生組,如果輸入錯(cuò)誤請(qǐng)?zhí)崾惧e(cuò)誤 read -p "請(qǐng)輸入您100米賽跑的秒數(shù):" sec if [ $sec -gt 0 ] && [ $sec -le 10 ];then read -p "請(qǐng)輸入您的性別(男|女):" sex if [ $sex = "男" ] || [ $sex = "女" ];then if [ $sex == "男" ];then echo "恭喜進(jìn)入選拔賽男生組" elif [ $sex == "女" ];then echo "恭喜進(jìn)入選拔賽女生組" fi else echo "輸入錯(cuò)誤,請(qǐng)重新輸入" fi else echo "很遺憾,您被淘汰了" fi
7.解壓壓縮包(case
#!/bin/bash #用case語(yǔ)句解壓根據(jù)后綴名為 .tar.gz 或 .tar.bz2 的壓縮包到 /opt 目錄 read -p "請(qǐng)輸入你要解壓的文件:" file case $file in *.tar.bz2) echo "正在解壓bz2文件至opt目錄中....." tar -xvf $file -C /opt ;; *.tar.gz) echo "正在解壓gz文件至opt目錄中....." tar -xvf $file -C /opt ;; *) echo "文件格式有誤,請(qǐng)重新輸入文件" ;; esac
8.判斷奇數(shù)偶數(shù)(if
方法一: #!/bin/bash read -p "請(qǐng)輸入一個(gè)數(shù)字:" num let i=$num+1 if [ $? -eq 0 ];then echo "你輸入的是整數(shù)" let rst=$num%2 if [ $rst -eq 0 ];then echo "你輸入的是偶數(shù)" else echo "你輸入的是奇數(shù)" fi else echo "你輸入的不是整數(shù)" fi 方法二: #!/bin/bash #判斷輸入的內(nèi)容是奇數(shù)還是偶數(shù) read -p "請(qǐng)輸入一個(gè)數(shù)字:" num let n=$num+1 if [ $? -eq 0 ];then echo "你輸入的是整數(shù)" if [ $[ $num % 2 ] -eq 0 ];then echo "你輸入的是偶數(shù)" else echo "你輸入的是奇數(shù)" fi else echo "你輸入的不是整數(shù)" fi
到此這篇關(guān)于Shell條件語(yǔ)句(條件測(cè)試、if語(yǔ)句、case語(yǔ)句)的文章就介紹到這了,更多相關(guān)Shell條件語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
shell腳本之判斷輸入?yún)?shù)是否為整數(shù)值的實(shí)例
今天小編就為大家分享一篇shell腳本之判斷輸入?yún)?shù)是否為整數(shù)值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07查看某時(shí)間段到現(xiàn)在的系統(tǒng)日志的sed命令
查看某時(shí)間段到現(xiàn)在的系統(tǒng)日志的sed命令,需要的朋友可以參考下2013-02-02Linux traceroute命令使用方法實(shí)例詳解
這篇文章主要介紹了Linux traceroute命令使用方法實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家理解應(yīng)用這部分內(nèi)容, 需要的朋友可以參考下2017-10-10Linux下使用nextcloud搭建個(gè)人網(wǎng)盤代碼實(shí)例
這篇文章主要介紹了Linux下使用nextcloud搭建個(gè)人網(wǎng)盤代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06awk 九九乘法表 shell實(shí)現(xiàn)代碼
這篇文章主要介紹了awk 九九乘法表 shell實(shí)現(xiàn)代碼,需要的朋友可以參考下2016-03-03