[英]Case Statement in a while loop, shell scripting
我正在編寫一個簡短的shell腳本,該腳本接受一個從1到12的數字,並打印出相應的月份。 一月= 2月1日= 2等...
這是我到目前為止所寫的,並且運行良好:
#!/bin/sh
x=0
echo Enter the number
read x
case $x in
1)
echo January
;;
2)
echo February
;;
3)
echo March
;;
4)
echo April
;;
5)
echo May
;;
6)
echo June
;;
7)
echo July
;;
8)
echo August
;;
9)
echo September
;;
10)
echo October
;;
11)
echo November
;;
12)
echo December
;;
*)
echo Not sure that about one
;;
esac
但是,我想知道是否可以將case語句放入while循環中? 這樣,當有人選擇號碼時,他們可以一次又一次地選擇另一個號碼。 因此,例如,僅當用戶鍵入“ exit”時,程序才會停止。
可能嗎? 還是有比使用while循環更好的選擇?
謝謝!
當然:
while true; do
read x
case $x of
exit) break ;;
1) echo January ;;
2) echo February ;;
# ...
12) echo December ;;
*) echo "Unknown response, enter a number 1-12 or type 'exit' to quit" ;;
esac
done
在這里使用bash select
語句是一個不錯的選擇:
months=( January February ... December )
select choice in "${months[@]}" Exit; do
if [[ $choice = "Exit" ]]; then
break
elif [[ " ${months[*]} " == *" $choice "* ]]; then
echo "$choice"
else
echo "invalid selection: $REPLY"
fi
done
你也可以做這樣的事情
PS3="month or <q> to exit: ";
select m in $(cal -y | awk '(NR-2)%9 == 0 {print}'); do [[ "$REPLY" == 'q' ]] && break; echo "m=$m"; done
如果您不想輸入月份。
根據LANG env變量的值,它可以以不同的語言工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.