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.整數數值比較
格式:
[ 整數1 操作符 整數2 ]
常見測試操作符:
| 操作符 | 含義 |
|---|---|
| -eq | 等于(Equal) |
| -ne | 不等于(Not Equal) |
| -lt | 小于(Leser Than) |
| -gt | 大于(Greater Than) |
| -le | 小于或等于(Lesser or Equal) |
| -ge | 大于或等于(Greater or Equal) |
示例1:比較兩個整數大小

示例2:查詢當前目錄下的文件數是否大于10,如果大于,則進行提示

示例3: 查看系統(tǒng)內存是否低于1024M,如果低于則提示

3.字符串比較
格式: [ "字符串1" = "字符串2" ] #判斷是否相等 [ "字符串1" != "字符串2" ] #判斷是否不等 [ -z "字符串" ] #判斷字符串內容是否為空 [ -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 #當條件判斷成立時,可以進行的命令工作內容 fi #這里將if反過來寫,結束if語句的意思

2.雙分支結構
格式: if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi

3.多分支結構
格式: if [ 條件判斷式 ]; then 當條件判斷成立時,可以進行的命令工作內容 elif [ 條件判斷式二 ]; then 當條件判斷成立時,可以進行的命令工作內容 else 當上面的條件判斷都不成立時,可以進行的命令工作內容 fi

三.case語句
格式: case 變量名稱 in “第一個變量內容” 程序段 ;; “第二個變量內容” 程序段 ;; *) 不包含第一個變量內容與第二個變量內容的其他程序執(zhí)行段 默認程序段 ;; esac
注意點:
- case行首必須以單詞“in”,每一模式必須以單個右括號")"結束
- 雙分號";;"表示命令序列的結束
- 模式字符串中,可以用方括號表示一個連續(xù)的范圍,如"[0-9]";還可以使用豎杠|表示或,比如a|b
- 最后的)表示默認模式,其中的相當于通配符
四.if語句和case語句腳本小倉庫
1.字符識別輸入數字or字母(case
#!/bin/bash read -p "請在此處輸入:" key case $key in [0-9]) echo "你輸入的是 數字" ;; [a-z]|[A-Z]) echo "你輸入的是 字母" ;; *) echo "輸入有誤" bash $0 esac
2.分數等級分類(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
wait4.猜價格小游戲(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文件"
fi6.賽跑選拔并分組(if
#!/bin/bash
#提示用戶輸入100米賽跑的秒數,要求判斷秒數大于0且小于等于10秒的進入選拔賽,
#大于10秒的都淘汰,如果輸入其它字符則提示重新輸入;
#進入選拔賽的成員再進一步判斷男女性別,男生進男生組,女生進女生組,如果輸入錯誤請?zhí)崾惧e誤
read -p "請輸入您100米賽跑的秒數:" 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語句解壓根據后綴名為 .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.判斷奇數偶數(if
方法一:
#!/bin/bash
read -p "請輸入一個數字:" num
let i=$num+1
if [ $? -eq 0 ];then
echo "你輸入的是整數"
let rst=$num%2
if [ $rst -eq 0 ];then
echo "你輸入的是偶數"
else
echo "你輸入的是奇數"
fi
else
echo "你輸入的不是整數"
fi
方法二:
#!/bin/bash
#判斷輸入的內容是奇數還是偶數
read -p "請輸入一個數字:" num
let n=$num+1
if [ $? -eq 0 ];then
echo "你輸入的是整數"
if [ $[ $num % 2 ] -eq 0 ];then
echo "你輸入的是偶數"
else
echo "你輸入的是奇數"
fi
else
echo "你輸入的不是整數"
fi到此這篇關于Shell條件語句(條件測試、if語句、case語句)的文章就介紹到這了,更多相關Shell條件語句內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
shell的條件測試,變量測試,表達式中的0和1,數值判斷,字符串判斷
本文主要介紹了shell的條件測試,變量測試,表達式中的0和1,數值判斷,字符串判斷,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-01-01
開發(fā)者常用及實用Linux Shell命令備忘錄(小結)
這篇文章主要介紹了開發(fā)者常用及實用Linux Shell命令備忘錄(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11

