Dalam skrip di bawah ini - yang meminta pengguna untuk mengonfirmasi bahwa mereka ingin melanjutkan menjalankan skrip yang berpotensi buruk - ketika pengguna memasukkan Y
prompt - itu akan keluar dari case
blok, hanya untuk dikirim kembali ke while
loop lagi.
#! /bin/bash
set -e
echo
echo "bad install start"
echo "-----------------------------------------"
while true; do
read -p "this script will probably fail - do you want to run anyway?" yn
case $yn in
[Yy]*)
##### WHAT GOES HERE?? #####
;;
[Nn]*)
exit ;;
*)
echo "answer y or n" ;;
esac
echo "script has broken out of case back into while loop"
done
echo -e "\e[33m Installing bad packagename \e[0m"
apt-get install sdfsdfdfsd
echo "rest of script - will i keep running?"
Ketika n
dimasukkan, skrip ada sepenuhnya seperti yang diinginkan. Saya ingin tahu bagaimana membuatnya sehingga ketika Y
dimasukkan istirahat script keluar dari kedua case
dan sementara blok, tetapi tidak keluar sama sekali. Apakah ada sesuatu yang bisa saya masukkan untuk placeholder ("Apa yang terjadi di sini ??") untuk melakukan itu?
bash
shell-script
the_velour_fog
sumber
sumber
[Yn]*)
; Anda mungkin berarti[Yy]*)
.$TEST=1
seharusnyaTEST=1
, dan skrip Anda sangat mungkin bekerja dengan perubahan ini.Jawaban:
Dalam kasus di mana pengguna memasukkan "y", Anda dapat keluar sementara dan huruf besar-kecil:
Dalam kasus Anda, Anda ingin melakukannya
break 2
.sumber
break 2
, mengenai komentar Anda di atas, ya saya mencoba mengatur variabel, tetapi tidak berhasil - Saya kira bash memiliki cakupan lokal dalam blok sementara dan kasus? tidak seperti, misalnya PHPcase
seperti yang Anda lakukan harus tercermin dalam tes untuk loop sementara.[Yy]
blok kasus. membuat sedikit edit di dalam pertanyaan saya untuk mencerminkan, tetapi hak Anda berhasil - terima kasih saya telah belajar beberapa hal keren!break
sudah cukup. Saya tidak melihat dua level loop dalam kode.@ Dhag memiliki jawaban yang bagus. Anda juga bisa menggunakan:
sumber