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 | 測試當(dāng)前用戶是否有權(quán)限讀取(Read) |
| -w | 測試當(dāng)前用戶是否有權(quán)限寫入(Write) |
| -x | 測試當(dāng)前用戶是否有權(quán)限執(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:查詢當(dāng)前目錄下的文件數(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
當(dāng)條件表達式為真時,取a值;當(dāng)條件表達式為假時,取b值

二.if語句
1.單分支結(jié)構(gòu)
如果只有一個判斷式要進行,那么我們可以使用單分支的if語句
格式: if [ 條件判斷式 ]; then #當(dāng)條件判斷成立時,可以進行的命令工作內(nèi)容 fi #這里將if反過來寫,結(jié)束if語句的意思

2.雙分支結(jié)構(gòu)
格式: if 判斷條件; then 條件為真的分支代碼 else 條件為假的分支代碼 fi

3.多分支結(jié)構(gòu)
格式: if [ 條件判斷式 ]; then 當(dāng)條件判斷成立時,可以進行的命令工作內(nèi)容 elif [ 條件判斷式二 ]; then 當(dāng)條件判斷成立時,可以進行的命令工作內(nèi)容 else 當(dāng)上面的條件判斷都不成立時,可以進行的命令工作內(nèi)容 fi

三.case語句
格式: case 變量名稱 in “第一個變量內(nèi)容” 程序段 ;; “第二個變量內(nèi)容” 程序段 ;; *) 不包含第一個變量內(nèi)容與第二個變量內(nèi)容的其他程序執(zhí)行段 默認(rèn)程序段 ;; esac
注意點:
- case行首必須以單詞“in”,每一模式必須以單個右括號")"結(jié)束
- 雙分號";;"表示命令序列的結(jié)束
- 模式字符串中,可以用方括號表示一個連續(xù)的范圍,如"[0-9]";還可以使用豎杠|表示或,比如a|b
- 最后的)表示默認(rèn)模式,其中的相當(dāng)于通配符
四.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.分?jǐn)?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
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í)行權(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 "沒有test.sh文件"
fi6.賽跑選拔并分組(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到此這篇關(guān)于Shell條件語句(條件測試、if語句、case語句)的文章就介紹到這了,更多相關(guān)Shell條件語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
linux 定時執(zhí)行shell、python腳本的方法
這篇文章主要介紹了linux 定時執(zhí)行shell、python腳本的方法,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-05-05
Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼
這篇文章主要介紹了Shell腳本把文件從GBK轉(zhuǎn)為UTF-8編碼,需要的朋友可以參考下2014-06-06
一個Linux系統(tǒng)安全設(shè)置的Shell腳本的分享(適用CentOS)
這篇文章主要介紹了一個設(shè)置Linux系統(tǒng)安全的Shell腳本的分享,適用CentOS,包含大部份的安全設(shè)置,只需執(zhí)行腳本就可以得到一個相對安全的Linux系統(tǒng)了,需要的朋友可以參考下2014-06-06

