Shell編程之條件陳述句(詳細的圖文解讀)
目錄
- 一、條件測驗陳述句
- (一)、檔案測驗
- (二)、整數值比較
- (三)、字串比較
- (四)、邏輯測驗
- 二、 if陳述句
- (一)、if陳述句單分支結構
- (二)、雙分支 if 陳述句
- (三)、多分支 if 陳述句
- 三、case 陳述句
一、條件測驗陳述句
Shell環境根據命令執行后的回傳狀態值($?)來判斷是否執行成功,當回傳值為0(真true)時表示成功,回傳值為非0值(假false)時表示失敗或例外,
test 命令,可以對特定條件進行測驗,并根據回傳值來判斷條件是否成立($?回傳值為 0 表示條件成立),
格式一:test 條件運算式
格式二:[ 條件運算式 ] #方括號“[”或“]”與條件運算式之間需要至少一個空格進行分隔
(一)、檔案測驗
格式:[ 運算子 檔案或目錄 ]
常用的運算子:
-e:測驗目錄或檔案是否存在(Exist),
-d:測驗是否為目錄(Directory),
-f:測驗是否為檔案(File),
-r:測驗當前用戶是否有權限讀取(Read),
-w:測驗當前用戶是否有權限寫入(Write),
-x:測驗是否設定有可執行(Excute)權限,

(二)、整數值比較
格式:[ 整數變數1 運算子 整數變數2 ]
常用的運算子:
-eq:等于 ==
-ne:不等于 !=
-gt:大于 \>
-lt:小于 \<
-le:小于等于
-ge:大于等于


如果需要算出空閑比,就需要浮點運算子,bash不支持浮點運算,需要借助bc、awk
bc 例 加:echo "1.1+2.2" | bc
? 減:echo "5.3-4.6" | bc
? 乘:echo "2.3*1.4"| bc
? 除:echo "scale=2; 4.3/2.5"|bc
混合運算:echo "scale=2; 2.2/(1.2+2.3)*1.5+2.1" | bc


awk 例: 加:echo $(awk 'BEGIN{print 4.5+3.4}')
? 減:echo $(awk 'BEGIN{print 4.5-3.4}')
? 乘:echo $(awk 'BEGIN{print 4.5*3.4}')
? 除:echo $(awk 'BEGIN{print 4.5/3.4}')

算出記憶體空閑比:F=`free -m | grep "Mem:" | awk '{print$4/$2*100}'`
? echo ${F}%

(三)、字串比較
格式1:
[ 字串1 = 字串2 ] 或 [ 字串1 == 字串2 ] #表示字串1跟字串2相同
[ 字串1 != 字串2 ] # 表示字串1跟字串2 不同
格式2:
[ -z 字串 ] #檢查字串是否為空(Zero),對于未定義或賦予空值的變數將視為空串
[ -n 字串 ] #檢查是否有字串存在

(四)、邏輯測驗
格式1:[ 運算式1 ] 運算子 [ 運算式2 ]
格式2:[命令1 運算子 命令2]
在同一個[] 中括號內,使用-a -o ,不同的[]中括號,需要使用&&、||
常用的運算子:
-a或&& :邏輯與,“而且”的意思,前后條件需都成立
-o或|| :邏輯或,“或者”的意思,只需前后條件中一個成立
! :邏輯否

&&、||運算子能夠正常存在于[[ ]]條件判斷結構中,但是如果出現在[ ]結構中的話,會報錯


二、 if陳述句
(一)、if陳述句單分支結構
if 條件測驗操作
then 命令序列
fi

例:判斷掛載點目錄,若不存在則自動創建:


(二)、雙分支 if 陳述句
if 條件測驗操作
then
命令序列 1
else
命令序列 2
fi

例:判斷目標主機是否存活,顯示檢測結果


(三)、多分支 if 陳述句
if 條件測驗操作 1
then
命令序列 1
elif 條件測驗操作 2
then
命令序列 2
[else]
[命令序列 3]
fi

例:判斷分數范圍,分出優秀、合格、不合格三檔


三、case 陳述句
case 變數值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 2
;;
……
*)
默認命令序列
esac

例:判斷分數范圍,分出優秀、合格、不合格三檔


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/236007.html
標籤:其他
上一篇:ICMP重定向攻擊實驗:
