whileループでユーザーにファイルの種類を尋ねるメッセージを表示する

whileループでユーザーにファイルの種類を尋ねるメッセージを表示する

ユーザーに特定の種類のファイルを要求するようにスクリプトを調整しています。入力したファイルが特定のファイル形式と一致しない場合は、whileループを入力し、ユーザーが正しいファイルを入力するまで繰り返します。

.zipこの例では、ユーザーに次の場所にファイルを提供するように依頼します。

read -p "Enter zip file: " package1
 while [ package1 != *.zip ] ; do
     read -p "Please enter file ending in '.zip': " package1
 done <<< package1
echo $package1

これまでエラーが発生しました。これで空のカーソルだけが表示され、出力は表示されません。入力の有無にかかわらず、*.zip次の行に移動し、カーソルが空で出力がありません。

アイデア?

編集する:

まあ、私はこの例よりもselect優れたオプションであるループを使用することにしました。while

しかし、zipファイル(またはプロンプト化されたファイルタイプ)が別のディレクトリにある場合はどうなりますか?シェルのディレクトリを変更するオプションを提供したいと思いますselect-loop

これまで私は次のことを試しました。

echo Select zip file:
                options=(".." *.zip)
                select package1 in "${options[@]}" ; do
                        case $package1 in
                                1 ) cd ..; echo Select zip file: ;;
                                # Different Directory ) ;;
                                * ) break ;;
                        esac
                done

ただし、ループはディレクトリを変更した後にメニュー項目を再表示しません。ユーザーが望まcdない限り、まったく異なるパスを提供する方法や何を使用しているのかわかりません。../

"All other existing \# file items" ) ... ; break;;

変えるcase

ベストアンサー1

最終拡張のみを確認して論理的に簡単にします。

while [ "${package1##*.}" != "zip" ]
do
    read -e -p "Specify a .zip file: " package1
done
echo $package1

おすすめ記事