Bash:whileループには出力がありません。より良い解決策はありますか?

Bash:whileループには出力がありません。より良い解決策はありますか?

私は初めてbashスクリプトに触れましたが、スクリプトの次の部分では何も出力しません。

check=""
while [ "$check"=="" ]
do
    read -p "Signature Correct?(Yes/No): " check

if [ "$check" != "Y" || "$check" != "y" || "$check" != "Yes" || "$check" != "yes" || "$check" != "N" || "$check" != "n" || "$check" != "No" || "$check" != "no" ];
then
    check=""
elif ["$check" == "Y" || "$check" == "y" || "$check" == "Yes" || "$check" == "yes" ];
then
    echo "Signature Accepted!"
elif [ "$check" != "N" || "$check" != "n" || "$check" != "No" || "$check" != "no" ];
then
    check=""
fi
done

エラーメッセージは表示されません。助けが必要ですか?より賢いまたは短い解決策がある場合は、その知識の恩恵を享受することを嬉しく思います。

ありがとうございます!

ベストアンサー1

提案:

#!/bin/bash

while true; do
    read -p 'Is signature correct? y/[n]: '

    [[ $REPLY == [Yy]* ]] && break

    echo 'Ok, asking again...'
done

echo 'Signature accepted'

yこれは、ユーザーがorで始まる文字列を入力して中断する無限ループを実装しますYが、入力はデフォルトで「no」と解釈されます。

YyおよびYesおよびyes(つまり、文字列をyup「no」として扱う)確認する必要がある場合は、次のようにします。

case $REPLY in ([Yy]|[Yy]es) break; esac

テストする代わり[[ ... ]]にとbreak

おすすめ記事