Linux 脚本选择菜单

use*_*374 3 shell select

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

1) opt1
2) opt2
3) opt3
4) opt4
5) opt5
6) opt6
Run Code Online (Sandbox Code Playgroud)

并且不喜欢:

1) opt1 3) opt3 5) opt5
2) opt2 4) opt4 6) opt6
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有这段代码,但问题出在显示上,有 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
Run Code Online (Sandbox Code Playgroud)

mpe*_*ico 5

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

COLUMNS=1
select ...
Run Code Online (Sandbox Code Playgroud)

当我一直想要一栏时。

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

为了真正准确,你可以

  1. 找到最长项目的长度 (itemLen)

这是错误的=> 2. 求项目数并除以 10 以获得最大位数 (numberLen) <=

  1. 找到项目总数“n”并计算 int(log10(n))+1 (numberLen)
  2. 列=((itemLen + numberLen = 2))

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