
read -p 'enter your choice [ 1-5 ]' choice
case $choice in
1)abcrequest
2)defresponse
3)afgRequestReply
4)FSfReply
5)ghjrequest
我希望 case 语句从文件中读取这些数字,然后在输入我的选择后,它应该转到该选择。
我希望你能理解我的询问。
答案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
orbreak
语句,或者按ctrl+ c,否则此列表将持续提示。
$ ./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