read -p 'enter your choice [ 1-5 ]' choice
case $choice in
1)abcrequest
2)defresponse
3)afgRequestReply
4)FSfReply
5)ghjrequest
ケースの説明このファイルからこの番号を読み、選択項目を入力してから、その選択項目に移動する必要があります。
私の質問を理解してください。
ベストアンサー1
select
ループを使用してください。
#!/usr/bin/env bash
list=~/tmp/list.txt
PS3='enter your choice: '
while read -r index element; do
_list[index]=$element
done < <(awk -F\) '{print $1,$2}' "$list")
select i in "${_list[@]}"; do
case $i in
*) echo "Choice is ${_list[REPLY]}";;
esac
done
list
メニューを含むファイルのパスに設定する必要があります。私の場合は、以下が含まれます。
$ cat list.txt
1)abcrequest
2)defresponse
3)afgRequestReply
4)FSfReply
5)ghjrequest
PS3
使用されるプロンプトになりますselect
次に、各行を見て、list
その値から数字を分離し、それから配列を作成します。 _list
含まれています:
_list=([1]="abcrequest" [2]="defresponse" [3]="afgRequestReply" [4]="FSfReply" [5]="ghjrequest")
これで、select
メニューの各項目を含むメニューが作成されます_list
。 REPLY
そのインデックスの値で操作を実行できるように選択した番号が含まれています_list
。 (直接使用することもできます$i
)
注:コードにexit
orステートメントが含まれている場合、または+をbreak
押しない限り、このリストにはメッセージが表示され続けます。ctrlc
$ ./script.sh
1) abcrequest
2) defresponse
3) afgRequestReply
4) FSfReply
5) ghjrequest
enter your choice: 4
Choice is FSfReply
enter your choice: 5
Choice is ghjrequest
enter your choice: 2
Choice is defresponse
enter your choice: ^C