Saya mencoba menerapkan menu sederhana menggunakan select
perintah. Script (untuk tujuan pengujian) adalah sebagai berikut:
#!/bin/bash
echo "*******************"
PS3='Select an option and press Enter: '
options=("apache" "named" "sendmail")
select opt in "${options[@]}"
do
case $opt in
"apache")
date
;;
"named")
echo "test"
;;
"sendmail")
echo "test 2"
;;
*) echo "invalid option";;
esac
done
echo "*********************"
Skrip tidak mengenali input valid apa pun yang saya berikan dan selalu mencetak pesan "opsi tidak valid". Apa yang salah dalam skrip ini?
bash
shell-script
select
Sumod
sumber
sumber
Jawaban:
Menu Anda yang ditunjukkan oleh pilih akan terlihat seperti:
Saat ini, Anda memasukkan "1" atau "2" atau "3": Anda tidak mengetik kata.
Juga,
select
akan mengulang sampai melihatbreak
perintah, jadi Anda menginginkan ini:Jika Anda ingin mengizinkan pengguna memasukkan nomor atau kata, Anda dapat menulis ini:
Koma tidak memiliki signifikansi sintaksis, hanya ada di sana untuk dapat mencocokkan pola pada variabel $ REPLY (yang merupakan apa yang sebenarnya diketik pengguna) atau variabel $ opt
sumber
select
perintah membutuhkanbreak
, tidakcase
.break
ada di setiap bagian. Namun, Anda tidak akan pernah perlubreak
dalam kasus ... esac blok dalam shell script . Itu bisa terjadi dengan mudah untuk membuat mereka bingung. :-)break
melakukannyacase
. Namun, Anda perlubreak
keluar dariselect
loop.$opt
Variabel Anda akan diatur ke kata opsi yang sesuai dengan angka yang dimasukkan pengguna. Jika Anda ingin melihat apa yang sebenarnya diketik pengguna, lihat$REPLY
.sumber
case
membandingkan$opt
terhadap "apache", "bernama" dan "sendmail", itu benar dan tidak ada yang harus diubah.1
/2
/3
, dan $ optapache
named
sendmail
$REPLY
adalah apa pun yang diketik pengguna, dan jika itu nomor yang valid maka$opt
akan menjadi kata yang sesuai dengan nomor itu.