2016-04-15 19 views
0

my scriptはユーザからサイト名を受け取ります。ユーザに選択された番号のBash提供番号

./run_script <site> 

./run_script cambridge 

これにより、スクリプトを使用して、ファイルの変更をチェックアウト、編集、およびコミットすることができます。

ただし、サイトによっては2〜6個のファイルがあります。あなたが複数のケンブリッジのファイルを持っている

を次のように

ので、スクリプトはそれらを示しています。私は、

cambridge2

cambridge3

ユーザーはケンブリッジ[1-3]

しかし単語を入力する

cambridge1:

以下から選択してくださいそれぞれの変数に値を割り当てたいのですが、すなわち以下のようになる。

必要なオプションを選択してください:

1)。 cambridge1

2)。 cambridge2

3)。 cambridge3

ユーザーが1,2,3を入力し、ファイルを取得します。

私が持っている現在のコードは次のとおりです。

echo $(tput setaf 5) 
echo "Please choose from the following: " 
echo -n $(tput sgr0) 

find path/to/file/. -name *"$site"* | awk -F "/" '{print $5}' | awk -F "SITE." '{print $2}' 

echo $(tput setaf 3) 

read -r input_variable 
echo "You entered: $input_variable" 
echo $(tput sgr0) 
+4

は 'SELECT'のための仕事のようですね。 「Bashリファレンスマニュアル」の「条件付き構成」セクション(https://www.gnu.org/software/bash/manual/bashref.html#index-commands_002c-conditional)を参照してください。 'select'は' if'と 'case'の後の3番目の構造体です。 – kojiro

+0

Hmmmmm ..ありがとう、私はこれを試し、それが別の金額を拾うことができるかどうかを見てみましょう。-Ben –

答えて

1

はここで楽しい方法です:

# save the paths and names of the options for later 
paths=`find path/to/file/. -name "*$site*"` 
names=`echo "$paths" | awk -F "/" '{print $5}' | awk -F "SITE." '{print $2}'` 
# number the choices 
n=`echo "$names" | wc -l` 
[ "$n" -gt 0 ] || echo "no matches" && exit 1 
choices=`paste <(seq 1 $n) <(echo "$names") | sed 's/\t/). /'` 

echo "Please choose from the following: " 
echo "$choices" 
read -r iv 
echo "You entered: $iv" 
# make sure they entered a valid choice 
if [ ! "$iv" -gt 0 ] || [ ! "$iv" -le "$n" ]; then 
    echo "invalid choice" 
    exit 1 
fi 

# name and path of the user's choice: 
name_chosen=`echo "$names" | tail -n+$iv | head -n1` 
path_chosen`echo "$paths" | tail -n+$iv | head -n1` 
+1

Webbありがとう、それは完璧に動作します。 –

関連する問題