今天來講shell script 的條件式與相關運算子
在 shell script 中,我們常常需要根據不同的條件來執行不同的動作。例如,我們可能想要判斷一個檔案是否存在,或者一個變數是否等於某個值。為了實現這些功能,我們需要使用條件式與相關的運算子。
(( expr ))
: 當計算式的值為0時視為false(0), 反之視為true(1)[[ expr ]]
: 當裡面的條件式為true時視為true,否則視為false
test expr
運算子通常使用於[[ $a OP $b ]]
($a可忽略)這種語法,條件表達式。
運算子會因為變數或值的類別使用不同運算子來做相同的事
!
: 反向邏輯,通常加在條件式前面&&
: AND邏輯,當所有表達式皆為true時為true||
: OR邏輯,當其中一個表達式為true時為true對於AND與OR,不一定會檢查所有表達式(確定回傳狀態後即可跳出)
-eq
: 兩數字是否等於-ne
: 兩數字是否不等於-lt
: 數字1是否小於數字2-gt
: 數字1是否大於數字2t
改為e
即可-a
: 檢查檔案是否存在
-e
: 和-a
相同用途-d
: 檢查該檔案是否為資料夾-f
: 檢查該檔案是否為檔案-h, -L
: 檢查是否為Symbolic link-r/w/x
: 檢查檔案是否可讀/寫/執行-s
: 檢查是否為非空檔案=
: 檢查兩字串是否相等
==
一模一樣,不過=
建議與test指令一起使用!=
: 檢查兩字串是否不相等>, <
: 逐字檢查兩字串的ascii值
<
: 如果字串1按字典順序排序在字串2之前,則為true。<
: 如果字串1按字典順序排序在字串2之前,則為false。-z
: 字串長度是否為0(是否為空字串)-n
: 字串長度是否為0(字串是否存在)有趣的是,在shell script中代表結束條件的關鍵字就是代表開始條件的關鍵字的反向
if開頭fi結尾,中間可加多個elif(也就是else if),當其中一個條件式符合時執行對應行為,然後退出條件式
語法像這樣
if test-commands; then
consequent-commands;
[elif more-test-commands; then
more-consequents;]
[else alternate-consequents;]
fi
類似於c語言的switch-case或python的match case,不過用來檢查文字是否在某個pattern
範例
# 定義變數
day=$(date +%A)
# 使用 case 判斷變數的值
case $day in
"Monday")
echo "今天是星期一"
;;
"Tuesday")
echo "今天是星期二"
;;
"Wednesday")
echo "今天是星期三"
;;
"Thursday")
echo "今天是星期四"
;;
"Friday")
echo "今天是星期五"
;;
"Saturday")
echo "今天是星期六"
;;
"Sunday")
echo "今天是星期天"
;;
*)
echo "今天是其他日期"
;;
esac
https://www.gnu.org/software/bash/manual/html_node/Conditional-Constructs.html
https://shengyu7697.github.io/shell-script-if/
https://tclin914.github.io/2419b51b/