簡體   English   中英

while循環中的Case語句,shell腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM