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