1. ホーム
  2. linux

[解決済み] LinuxのシェルスクリプトでYes/No/Cancelの入力を促すにはどうしたらいいですか?

2022-03-17 23:26:31

質問

シェルスクリプトで入力を一時停止し、ユーザーに選択を促すようにしたいのですが。
標準の Yes , No または Cancel というタイプの質問をします。
一般的なbashプロンプトでこれを実現するにはどうしたらよいでしょうか?

どのように解決するのですか?

シェルプロンプトでユーザー入力を得るための最もシンプルで広く利用されている方法は read コマンドを使用します。その使い方を説明するには、簡単なデモンストレーションを行うのが一番です。

while true; do
    read -p "Do you wish to install this program?" yn
    case $yn in
        [Yy]* ) make install; break;;
        [Nn]* ) exit;;
        * ) echo "Please answer yes or no.";;
    esac
done

もう一つの方法 指摘された によって スティーブン・フーヴィヒ は、Bashの select コマンドを使用します。以下は、同じ例で select :

echo "Do you wish to install this program?"
select yn in "Yes" "No"; do
    case $yn in
        Yes ) make install; break;;
        No ) exit;;
    esac
done

select 入力のサニタイズは必要ありません。利用可能な選択肢が表示され、その選択肢に対応する数字を入力することになります。また、自動的にループします。 while true のループで、無効な入力があった場合に再試行します。

また レア・グリ でリクエストの言語を問わない方法を示しました。 回答 . 最初の例を多言語対応にすると、次のようになります。

set -- $(locale LC_MESSAGES)
yesptrn="$1"; noptrn="$2"; yesword="$3"; noword="$4"

while true; do
    read -p "Install (${yesword} / ${noword})? " yn
    if [[ "$yn" =~ $yesexpr ]]; then make install; exit; fi
    if [[ "$yn" =~ $noexpr ]]; then exit; fi
    echo "Answer ${yesword} / ${noword}."
done

もちろん、他の通信文字列(Install, Answer)も未翻訳であり、より完全な翻訳が必要ですが、部分的な翻訳でも多くの場合役に立ちます。

最後に エクセレントアンサー によって F. ハウリ .