Linux while循环中的Case语句,shell脚本
我正在写一个简短的shell脚本,它接受从1到12的数字,并打印出相应的月份。一月=1二月=2等等 这是我迄今为止所写的,它运行良好:Linux while循环中的Case语句,shell脚本,linux,bash,shell,Linux,Bash,Shell,我正在写一个简短的shell脚本,它接受从1到12的数字,并打印出相应的月份。一月=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) ec
#!/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
当然:
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
在这里使用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变量的值,它在不同的语言中工作。您也可以这样做
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变量的值,它在不同的语言中工作