创建数字选择列表

创建数字选择列表

我有一个文件,其中包含单词列表。我如何读取该文件,然后创建一个菜单,以便我可以从列表中选择一种动物?简单的 bash 脚本,没什么花哨的。

示例:动物.txt

dog
cat
lion
bear

示例:所需菜单

1 - dog
2 - cat
3 - lion
4 - bear

Select choice: 3

You chose a lion.

答案1

使用mapfileselect

例如

#!/bin/bash

mapfile -t animals < "animal.txt"

select animal in "${animals[@]}"; do
    echo "$animal"
    break
done

跑步:

$ ./animal.sh
1) dog
2) cat
3) lion
4) bear
#? 2
cat

答案2

我们通常不会在这里请求脚本,但我会帮助您解决困难的部分。

假设 shell 具有以下select功能(例如bash)。这应该可以帮助您开始:

#!/bin/bash

PS3='Select choice: '
select ch in "dog" "cat" "lion" "bear"; do
    case $REPLY in
        [1-4]) break ;;
            *) echo 'Try again' >&2
    esac
done

printf 'You chose a %s\n' "$ch"

selectbash显示一个菜单和一个提示。提示由变量的值给出PS3

select语句是一个循环,在每次迭代中,用户都会做出选择。选择数字(或用户输入的任何内容)位于 中$REPLY,实际的菜单项位于该语句的变量中select(这里是$ch)。

case循环中的语句测试是否给出了有效响应。如果是这样(即$REPLY是 1 到 4 之间的单个数字),我们就break退出循环。如果用户输入了任何其他内容,则会打印一条简短的错误消息,并且循环将运行下一次迭代。

如果您有超过 9 个菜单项,您可能需要以一种更复杂的方式测试有效输入,因为该$REPLY值中可能包含多个字符。

循环结束后,可以从菜单中进行选择$ch

相关内容