![入れ子になった Case ステートメントで while ループを抜ける方法は? [閉鎖]](https://linux33.com/image/64418/%E5%85%A5%E3%82%8C%E5%AD%90%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F%20Case%20%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%E3%81%A7%20while%20%E3%83%AB%E3%83%BC%E3%83%97%E3%82%92%E6%8A%9C%E3%81%91%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AF%3F%20%5B%E9%96%89%E9%8E%96%5D.png)
以下のスクリプトでは、ユーザーは間違っている可能性があるスクリプトを実行し続けるかどうかを確認するように求められます。ユーザーがメッセージに従って入力すると、ブロックY
から離れてループに戻ります。case
while
#! /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?"
入力すると、n
スクリプトが期待どおりに正確に存在します。Y
スクリプトを入力するときにこれらの2つを破るためにこれを行う方法を知りたいです。case
そしてwhileブロックですが、完全に終了するわけではありません。そのためにプレースホルダー(「ここに何がありますか?」)を追加できますか?
答え1
ユーザーが「y」と入力すると、whileとCaseを終了できます。
break [n]
Exit from within a for, while, until, or select loop. If n is
specified, break n levels. n must be ≥ 1. If n is greater than
the number of enclosing loops, all enclosing loops are exited.
The return value is 0 unless n is not greater than or equal to
1.
あなたが心配している限り、あなたはそれをしたいと思いますbreak 2
。
答え2
@dhagは素晴らしい答えを提供します。以下も使用できます。
a=0
while [ "$a" -eq 0 ]; do
...
[Nn]*)
a=1;
;;
...
done