shell指令碼的條件判斷語句

2021-08-07 10:54:21 字數 3873 閱讀 2316

條件判斷,顧名思義,就是對當前引數進行相關條件的比較,如果符合要求就進行相對應的操作,條件語句涉及到兩種語法,if和case,兩種語法都各具特色,我們可以通過例項來進行比較

if [判斷條件1]; then

條件為真的分支**

elif [判斷條件2]; then

條件為真的分支**

elif [判斷條件3]; then

條件為真的分支**

else

以上條件都為假的分支**

fi

以上就是if判斷語句的基本結構,執行**時,由上向下,下對條件1進行判斷,如果條件符合條件1,就執行條件1下的分支**,分支**完成後,直接退出if判斷,不在向下判斷;如若對條件1判斷時,並不符合條件,就忽略條件1的分支**,再由順序向下判斷是否符合條件2的條件,符合條件就執行條件2的分支**,不符合就選擇跳過,以此向下,直至else關鍵字,else關鍵字之後的分支**,是對在以上條件都不符合的條件下,進行執行的**,最後別忘了尾部的fi,其就是判斷語句if頭部的發序書寫,標誌著判斷的結束。

基本解釋已經完成,那麼我們現在帶入例項中進行講解。

在日常的考試中,我們的考試成績都會被老師評級的,那麼我們可以寫乙個指令碼例項,來完成自動分級操作。

1

#!/bin/bash

2read -p "請輸入成績" score <==read進行互動錄入變數

3if [ $score

-lt60 ];then

<==判斷變數,是否小於60

4echo

"不及格"

<==執行分支**

5elif [ $score

-lt75 ];then

<==判斷變數,是否小於75

6echo

"及格"

<==執行分支**

7elif [ $score

-lt85 ];then

<==判斷變數,是否小於85

8echo

"中"<==執行分支**

9elif [ $score

-lt90 ];then

<==判斷變數,是否小於90

10echo

"良好"

<==執行分支**

11elif [ $score -le 100 ];then

<==判斷變數,是否小於等於100

12echo

"優秀"

<==執行分支**

13else

<==以上判斷都不符合,執行

14echo

"輸入成績無效"

<==執行分支**

15fi

以上**就完成了基本的成績分級,運用if語句對區域條件的判斷功能,輸出對應的分支語句,但是指的注意的是,if語句所判斷的都是連續的範圍條件,對於離散型條件的判斷,不能說無法完成,但是**書寫起來很是繁瑣麻煩,那麼這裡,我們就要運用case這個條件判斷語句了,其相較於if的優勢也在於此

case 變數引用 in

pat1)

分支1;;

pat2)

分支2;;

...*)

預設分支

;;esac

可以看到,以上就是case語句的基本結構,原理與if基本相似,由上向下,以此對pat條件進行判斷,符合條件就執行分支**,值得注意的是,結尾可以用*來代表未列出的其餘條件,來補充未列出條件所應執行的分支**,case不光只支援*的用法,還有很多用法可以補充

*)

?)[a-z])

a|z)

以上分別代表

任意長度的字串

乙個任意字串

a-z範圍內乙個小寫字母

a或者z

這就是case所支援的萬用字元寫法,合理運用,可以使**更簡單明瞭。

那麼我們結合例項,學習case語句

1

#!/bin/bash

2 cat << efo <==選單輸出

31)包子

42)炒飯

53)餃子

64)麵條

75)**

86)外賣

9 quit)退出

10 efo

11read -p "輸入點餐號碼" i <==互動讀取引數

12case

$iin

131) <==引數為1執行

14echo

"10元"

15 ;;

162|3) <==引數為2或3執行

17echo

"15元"

18 ;;

19 [4-6]) <==引數為4到6執行

20echo

"20元"

21 ;;

22 quit) <==引數為quit執行

23echo

"退出成功"

24exit

25 ;;

26 *) <==以上都不符合,執行

27echo

"沒有該選項"

28 ;;

29esac

以上**實現了基本選單功能的實現,可以觀察到,對於離散型引數的判斷**遠遠優與if語句的設定,不僅僅是因為其支援萬用字元的使用,也應為其**更加簡潔易讀,但有一點需要注意,case語句之後跟的不是變數名,而是變數的用用,也就是$i而不是i。

執行以上**可以注意到,選單選完一項就退出了指令碼,不能滿足多項的選擇,那麼我們可以用linux內部設定的乙個語句select與case相結合來完成這種選單的制定

select

variable

inlist

do迴圈體命令

done

select 從本質上講是乙個死迴圈,簡單來說就是進行一次操作就執行一次迴圈體,不退出,具體的迴圈我們之後部落格在詳述,這裡只是簡單理解下,結合case語句,就可以實現迴圈執行的餐單指令碼

1

#!/bin/bash

2 ps3="你的選擇:"

<==設定select提示符樣式

3 select i in 包子 餃子 麵條 蓋飯 羊湯 外賣 quit退出;do

<==選單,迴圈體開始

4case

$reply

in<==$reply傳遞select序號後字串給case

51)

6echo

"10元"

7 ;;

82|3)

9echo

"15元"

10 ;;

11 [4-6])

12echo

"20元"

13 ;;

14 quit)

15echo

"退出成功"

16exit

17 ;;

18 *)

19echo

"沒有該選項"

20 ;;

21esac

22done

<==迴圈體結束

以上**完成了預期功能,其中要注意的就是$ps3和$reply變數的設定,$ps3儲存的是對於select語句提示符的格式,合理的修改可以使得選單更加容易閱讀及其操作,而$reply是指使用者在selelct語句中選擇序號後,將序號儲存在該變數之中,然後傳遞給case進行呼叫。

經過例項的分析,我們了解到,if更適合於範圍條件的判斷,而case更適合離散型條件的篩選判斷,合理的選擇判斷語句,可以使得**更合理易讀,並且簡潔。

shell指令碼的if判斷語句 案例

if語句 1 按照檔案型別進行判斷 d 檔案 判斷該檔案是否存在,並且是否為字元裝置檔案 是字元裝置為真 e 檔案 判斷該檔案是否存在 存在為真 e root echo 輸出為0 判斷為真,即為0 常用的格式有 e root echo yes echo no 一 單分支if條件語句格式有如下兩種 i...

if條件判斷語句

如果表示式的值是true,則執行語句塊 否則跳過語句塊。equals 下面的例子使用到的,可以看看。字串判斷不能使用 要使用方法。用來判斷記憶體位址是否相等。輸入男女,輸出boy,girl system.out.println 請輸入男or女 scanner sc new scanner syste...

條件判斷語句

語法 if condition else if condition else示例 var age 20 if age 18 else語法 表示式1 表示式2 表示式3 如果表示式1的布林值為true,則執行表示式2,否則執行表示式3。是js語言中唯一乙個需要三個運算元的運算子。示例 var age ...