linux - 尝试根据菜单输出来验证 PS3 输入以进行用户验证

标签 linux bash shell unix scripting

如果我想验证用户键盘输入的空返回,如果用户没有选择重新打印菜单的选项,如何实现?如果清除屏幕/重新打印菜单的选择无效,但确保错误消息仍然可见?也许捕获返回代码作为退出的一部分并基于此提供错误?

文件 ALIAS_FILE.config 包含以下值:

ALIAS1 CLUSTER1
ALIAS2 CLUSTER2
ALIAS3 CLUSTER3
QUIT

脚本:

mapfile -t arr < "/var/ALIAS_FILE.config"

            select alias_select in "${arr[@]}"
            do
            if [[ -z "$alias_select" ]]
            then
                echo
                echo "Invalid Choice"
                echo

            elif [[ $alias_select == "QUIT" ]]
            then
                break
            else
                echo
                echo "You selected: $alias_select"
                echo

                ALIAS=$(echo "${alias_select}" | awk '{print $1}')
                CLUSTER=$(echo "${alias_select}" | awk '{print $2}')

                echo "$ALIAS"
                echo "$CLUSTER"
            fi
            done

最佳答案

只要您拥有文件 (/var/ALIAS_FILE.config),您就应该能够随时显示菜单,您还可以通过 mapfile 访问 arr 中的值,这是一个快速尝试,并提供一些建议:

  • 使用 echo -e 或 event 更好(且推荐)printf
  • 清屏,可以使用VT100转义码printf "\033c"
  • 使用bash string manipulation

更新的脚本:

#!/bin/bash

mapfile -t arr< "/var/ALIAS_FILE.config"

print_menu(){
    for (( i=0; i<${#arr[@]}; i++ ));
    do
      echo $i")" ${arr[$i]}
    done
}

printf "\033c"

select alias_select in "${arr[@]}"
do
printf "\033c"
if [[ -z "$alias_select" ]]
then
    echo -e "\nInvalid Choice\n"
    print_menu
elif [[ $alias_select == "QUIT" ]]
then
    break
else
    echo -e "\nYou selected: $alias_select\n"
    echo -e "${alias_select// *}\n${alias_select##* }"
fi
done

关于linux - 尝试根据菜单输出来验证 PS3 输入以进行用户验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31450295/

相关文章:

php - 如何通过 Mac 的终端将公共(public) ssh key 添加到我的 DigitalOcean Droplet?

linux - 使用 Linux 终端执行条件、创建文件、删除文件和其他操作

shell - PIP命令确定是否安装了最新版本?

python - 继续执行 Python 更新脚本而不等待用户输入

javascript - Nodejs 模块是否可以跨不同的 Linux 发行版移植?

linux - Bash:使用文件名作为带通配符的命令

bash - 使用 unix 工具和多列排序

git - docker 是否支持类似于 Git 别名的命令别名?

linux - 如何在 Linux 中将字符串转换为具有不同时区的日期?

c# - 创建一个 nuget 在 linux 和 windows 之间共享