SHell編程之條件陳述句
本章結構
1、條件測驗
(1)檔案測驗與整數測驗
(2)字串測驗與邏輯測驗
2、if陳述句
(1)if單分支陳述句
(2)if雙分支陳述句
(3)if多分支陳述句
3、case分支陳述句
一、條件測驗操作
1、test命令
測驗運算式是否成立,若成立回傳0,否則回傳其他數值,
格式1: test 條件運算式
格式2:[ 條件運算式 ]
2、檔案測驗
[運算子 檔案或目錄]
常用的測驗運算子
-d:測驗是否為目錄(Directory)
-e:測驗目錄或檔案是否存在(Exist)
-f:測驗是否為檔案(File)
-r:測驗當前用戶是否有權限讀取(Read)
-w:測驗當前用戶是否有權限寫入(Write)
-x:測驗當前用戶是否有權限執行(eXcute)

3、整數值測驗操作
(1)整數值比較
格式:[整數1 運算子 整數2]
(2)常用的測驗運算子
-eq:等于(Equal)
-ne:不等于(not equal)
-gt:大于(greater than)
-lt:小于(lesser than)
-le:小于或等于(lesser or equal)
-ge:大于或等于(greater or equal)

注:bash不支持浮點運算,如果需要進行浮點運算,需要借助bc、awk處理,
bc
#!/bin/bash
#加
f=$ (echo “4.3+2.5” | bc)
echo “4.3+2.5=$f”
#減
f=$ (echo “4.3-2.5” | bc)
echo “4.3-2.5=$f”
#乘
f=$ (echo “4.30*2.50” | bc)
echo “4.3*2.5=$f”
#除
f=$ (echo “4.3/2.5” | bc)
echo “4.3/2.5=$f”
#混合運算
f=$ (echo “2.2/(2.2-1.1)*2+1.1” | bc)
echo “2.2/ (2.2-1.1)*2+1.1=$f”

awk
#加
f=$ (awk 'BEFIN{print 4.5+3.4 } ’ )
echo “4.5+3.4=$f”
#減
f=$ (awk 'BEFIN{print 4.5-3.4 } ’ )
echo “4.5-3.4=$f”
#乘
f=$ (awk 'BEGIN{print 4.5*3.4 } ’ )
echo “4.5-3.4=$f”
#除
f=$ (awk ’ BEGIN{print 4.5/3.4 }’)
echo “4.5/3.4=$f”
#混合運算
f=$ (awk ‘BEGIN{print (4.5-3.4) *2+3 }’)
echo " (4.5-3.4) *2+3=$f"

浮點運算:浮點運算就是實數運算,因為計算機只能儲存整數,所以是說都是約數,這樣浮點運算很慢的而且會有誤差,
4、字串
(1)字串比較
格式1:[ 字串1 = 字串2 ] [ 字串1 != 字串2 ]
格式2:[ -z 字串 ] #檢查字串是否為空,對于未定義或賦予空值的變數將視為空串
? [ -n 字串] #檢查是否有字串存在
(2)常用的測驗運算子
=:字串內容相同
!:字串內容不同,!號寶石相反的意思
-z:字串內容為空
-n:檢測字串是否存在

-a或&&:邏輯與,“而且”的意思
-o或||:邏輯或,“或者”的意思
!:邏輯否
注:&&、||運算子能夠正常存在于[ [ ] ]條件判斷結構中,但是如果出現[ ]結構中的話,會報錯
(3)邏輯測驗
格式1:[ 運算式1 ] 運算子 [ 運算式2 ]
格式2:命令1 運算子 命令2

二、if陳述句的結構
1、if單分支結構
基本格式:if 條件測驗操作
? then 命令序列
? fi
舉例:
if 磁盤已用空間>80%
then 報警
fi

2、if雙分支結構
雙分支結構(基本格式):
if 條件測驗操作
then 命令序列1
else 命令序列2
fi
雙分支結構(舉例):
if 80埠是否在監聽
then 網站服務已在運行
else 啟動httpd服務
fi

3、if多分支結構
多分支結構(基本格式):
if 條件測驗操作1
then 命令序列1
elif 條件測驗操作2
then 命令序列2
else
命令序列3
fi
多分支結構(舉例):
if 分數為85~100之間
then 判為優秀
elif 分數為70~84之間
then 判為合格
else
判為不合格
fi

4、if結構實體
(1)單分支if結構

(2)多分支if結構


三、case陳述句結構
1、case多分支陳述句
(1)case陳述句的結構
針對變數額不同取值,分別執行不同的命令序列,
這種情況與多分支的if陳述句非常相似,只不過if陳述句需要判斷多個不同條件,而case陳述句指示判斷一個變數的不同取值,
case行尾必須為單詞”in“,每一模式必須以右括號”)“結束,
雙分號”;;“表示命令序列的結束,
模式字串中,可以用方括號表示一個連續范圍,如”[0-9]“;還可以用豎杠符號”|“表示”或“,若”A|B“,
最后的”)“表示默認模式,其中的*相當于通配符,
格式:
case 變數值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
…
*)
默認命令序列
esac
舉例:
case 分數 in
85~100)
評為優秀
;;
70~84)
評為合格
;;
…
*)
判為不合格
esac

2、case陳述句實操


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/237173.html
標籤:其他
