![](/img/trans.png)
[英]bash scripting - how to write an effective case statement to handle multiple conditions
[英]How do I write an IF statement with multiple conditions on the same line in Bash?
我現在正在 Bash 中編寫一個腳本,它將執行兩個 SQL 查詢並分析查詢的數據。 其中一個命令行輸入接受一個環境變量,它可以是三個值之一。 如果它不是這些值之一,則腳本會顯示一條消息,提示用戶輸入正確的值。 但是,腳本沒有正確檢查該值,而是提示用戶。 這是我的代碼:
if [[ -z $ENV1 || $ENV1 != "ITF" || $ENV1 != "Prod" || $ENV1 != "QA" ]]
then
read -rp "Please enter the first environment (ITF, Prod, QA): " ENV1
fi
echo $ENV1
我認為在 if 行中有多個 || 是個問題。 我怎樣才能檢查所有這些條件?
看來你的情況有問題。 即使ENV1
是您的任何選項,其中一個條件也會成立。 例如, ENV1
可能是“QA”,但ENV1 != "Prod"
仍將評估為真 (0)。 而不是||
使用&&
:
if [[ -z $ENV1 || ($ENV1 != "ITF" && $ENV1 != "Prod" && $ENV1 != "QA") ]]
then
read -rp "Please enter the first environment (ITF, Prod, QA): " ENV1
fi
echo $ENV1
考慮改用case
,它會使代碼更清晰:
case $ENV1 in
"ITF" | "Prod" | "QA")
echo using $ENV1
;;
"")
read -rp "Please enter the first environment (ITF, Prod, QA): " ENV1
;;
*)
echo $ENV1 is not valid
read -rp "Please enter the first environment (ITF, Prod, QA): " ENV1
;;
esac
這是使用select
的好時機:
select ENV1 in ITF Prod QA; do
case "$ENV1" in
ITF|Prod|QA) break;;
esac
done
不過沒那么干。
干燥機版本
envs=( ITF Prod QA )
select ENV1 in "${envs[@]}"; do
for e in "${envs[@]}"; do
[[ $ENV1 == $e ]] && break 2
done
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.