私はコマンドを再実行する必要があるかどうかをユーザーに尋ねるスクリプトを書こうとしました。
答えが「はい」の場合は、最後のコマンドを再実行する必要があります。 2回目の実行後も最後のコマンドを実行する必要があるかどうかをユーザーに尋ねる必要があります。私は答えが「いいえ」になるまでこれが起こりたいのですが、答えが「いいえ」であれば終了する必要があります。
つまり
$ cat shellscript.sh
echo foo
printf 'Can I run the last command (y/n)?'
私の答えが「はい」の場合は、「echo foo」コマンドを実行する必要があります。
# after the 1st time execution
printf 'Can I run the last command again (y/n)?'
答えが「はい」の場合は、コマンドを再実行し、答えが「はい」になるまで同じ操作(y / nを求めて実行)を実行します。それ以外の場合は終了する必要があります。
ある種のループを実装する必要があるようですが、これは条件付きスクリプトなので混乱しています。
答え1
バッシュ使用:
while [[ "$REPLY" != "no" ]]
do
echo foo
read -p "Can I run the last command (yes/no)?"
done
ループを終了するには、文字通り「いいえ」と答える必要があるので、「はい/いいえ」というプロンプトについて詳しく説明しました。
bashはread
カスタムプロンプト(-p
以降および文字列)を受け入れ、ユーザーの応答を$ REPLY変数に保存します。ループに入る前は「いいえ」とは思いません(まだ何もなければread
空です)。
答え2
代替ジェフの答え:
while true; do
somecommand
while true; do
read -p 'Can I run the last command again (yes/no)? '
case "$REPLY" in
[Yy]*) break ;;
[Nn]*) break 2 ;;
*) echo 'Sorry, what?' >&2
esac
done
done
ここで最大の違いは、ユーザーから有効な応答を受け取る必要があることです。有効な応答は、またはで始まる文字列ですy
(n
大文字と小文字を無視)。
break
回答読み取りループが中断され、break 2
コマンドループも中断されます。