2017-11-20 15 views
1

私は1から12の数字をとり、対応する月をプリントアウトする簡単なシェルスクリプトを書いています。 1月= 2月1日= 2等... whileループのシェルスクリプト、シェルスクリプト

この

は、私がこれまでに書いたものであり、正常に動作しています:

#!/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 

をしかし、それはwhileループにcase文を入れることが可能です場合、私は思っていました?誰かがその番号を選ぶと、それ以降何度も何かを選ぶことができるようになります。例えば、ユーザーが「exit」と入力した場合にのみ、プログラムは停止します。

可能ですか? whileループを使うよりも良い選択肢がありますか?

ありがとうございました!もちろん

答えて

1

:あなたはまた、あなたのドン場合には、この

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 

ような何かを行うことができます

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 
+0

は魅力的です:)ありがとう – MLansky

1

はここに良い選択です月を入力したくない。

LANG env変数の値によって異なる言語で動作します。

0

:bashのselectステートメントを使用して

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 
関連する問題