shell - Linux 脚本选择菜单

标签 shell select

我需要使用选择循环和 case 指令创建一个包含六个选项的选择菜单,但不是菜单选项的 ECHO 命令,它们必须显示如下:

1) opt1
2) opt2
3) opt3
4) opt4
5) opt5
6) opt6

并且不喜欢:
1) opt1 3) opt3 5) opt5
2) opt2 4) opt4 6) opt6

到目前为止,我有这段代码,但问题出在显示上,它有 5 个选项垂直显示,但有 6 个选项并排显示:
#! /bin/sh
PS3="Enter your choice :"
select choice in "opt1" "opt2" "opt3" "opt4" "opt5" "Exit"; do
case $REPLY in
    1) echo "$choice";;
    2) echo "$choice";;
    3) echo "$choice";;
    4) echo "$choice";;
    5) echo "$choice";;
    6) echo "see you next time";break;;
    *) echo "Wrong choice!";;
esac
done

最佳答案

调整 COLUMNS 变量有助于限制菜单中的列数。我通常这样做(在脚本中):

COLUMNS=1
select ...

当我一直想要一列时。

准确地说,COLUMNS=1 意味着您的 TERMINAL 是一个字符宽。然后,选择命令别无选择,只能打印一列菜单项。

准确地说,你可以
  • 找出最长项目的长度 (itemLen)
  • 找到项目数和十的 mod 以获得最大位数 (numberLen)
  • COLUMNS=((itemLen + numberLen = 2))

  • 其中“2”表示菜单项编号和项目之间的括号和空格。但这不是必须的。

    关于shell - Linux 脚本选择菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16750160/

    相关文章:

    c# - 使用 Entity Framework 时为 Select() 创建通用选择器

    python - 使用 SQLAlchemy 对现有表进行简单的 SELECT 语句

    mysql - 带计算算法的 SQL 查询

    php - 将整数内爆到 mysql select 语句中(结果重复)

    linux - 比较目录中文件名(不带扩展名)的 Shell 脚本

    bash - 如何使用 shell 验证 IPv6 地址格式?

    linux - 作为命令执行的 shell 参数

    javascript - 如何在新窗口中打开选择框中的链接?

    php - 如何从 php/html 执行 shell 脚本?

    linux - 如何在 shell 脚本中更改文件的内容?