【问题标题】:Select Loop - Dynamic Output using input file to read选择循环 - 使用输入文件读取的动态输出
【发布时间】:2015-10-04 02:09:09
【问题描述】:

很棒的论坛!!我会尽量保持简短以直截了当。我一直在尝试了解是否可以读取每个新行都有详细信息列表的文件。例如:

文件名:ALIAS_LIST.config

ALIAS1 CLUSTER1
ALIAS2 CLUSTER2
ALIAS3 CLUSTER3
QUIT

基于此,我希望能够将文件列表作为每个新行的数组读取,并使用选择循环生成动态输出,我在菜单中做得很好。我取决于我的脚本的一部分,即任务的实际操作。这是我试图实现的一个示例:

# *********************************
# Sourcing the Alias Queue file to use
# *********************************

ALIAS_FILE="/var/ALIAS_LIST.config"

if [ -f "$ALIAS_FILE" ]
then
    select alias_select in "${ALIAS_FILE[@]}"
    do
      echo "well done"
    done
else
    echo "*********************************"
    echo " Exit
    echo "*********************************"

exit 0

fi

基于从文件到数组选择菜单的输出,我将使用标准 PS3 来捕获和验证使用输入,并采取必要的步骤向前推进。

根据更新,这完全符合我的预期。如果反过来我们试图验证用户输入以提供有用的异常处理怎么办。根据您的输入,这是我想要实现的目标:

更新版本(工作):

    mapfile -t arr < "/var/ALIAS_LIST.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}')
        OPTION=$(echo "${alias_select}" | awk '{print $2}')

        echo "$ALIAS"
        echo "$OPTION"
    fi
    done

【问题讨论】:

    标签: linux bash shell scripting aix


    【解决方案1】:

    您可以使用此脚本从文件中读取select 菜单项:

    mapfile -t arr </var/ALIAS_LIST.config
    
    select alias_select in "${arr[@]}"; do
       if [[ -z "$alias_select" ]]; then
          echo "Invalid Choice"
       elif [[ $alias_select == "QUIT" ]]; then
          break
       else
          echo "You selected: $alias_select"
       fi
    done
    

    【讨论】:

    • 感谢您提供有关如何编辑的指导。我已按照原始问题中的建议进行了更新。我也将您标记为一个勾号,但只能看到一个有效的勾号,直到我的代表点数为 15。请您协助我在原始问题中粘贴的进一步更新。
    • 按要求完成。我应该为下一个查询提出另一个问题还是根据我的更新继续?
    • 今天做了更多测试,发现当您从文件中输入详细信息时,它会将每个单词后跟空格视为单独的菜单项。我要做的是逐行而不是逐字提取数据。这可能吗?
    • 谢谢你的工作,但我在这里有一个查询。假设我们有 AIX 并且只有 korn shell,这是行不通的?
    • 效果很好。太棒了非常感谢!我这里有 2 个问题。如果我想验证从键盘返回的空值,如果用户没有选择重新打印菜单的选项,如何实现?如果做出了清除屏幕/重新打印菜单但确保错误消息仍然可见的无效选择?也许捕获一个返回码作为退出的一部分并基于它提供一个错误?
    猜你喜欢
    • 2016-10-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2013-12-17
    • 1970-01-01
    • 2019-08-07
    • 1970-01-01
    • 2018-08-07
    相关资源
    最近更新 更多