ユーザーに特定の種類のファイルを要求するようにスクリプトを調整しています。入力したファイルが特定のファイル形式と一致しない場合は、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