创建菜单时使用 case 语句从变量/文件中读取

创建菜单时使用 case 语句从变量/文件中读取
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将构建一个包含 中每个项目的菜单_listREPLY将包含您选择的编号,因此我们可以使用 中该索引的值执行某些操作_list。 (你也可以直接使用$i

注意:除非您的代码包含exitorbreak语句,或者按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

相关内容