Select 循环 - 使用输入文件读取动态输出

Select Loop - Dynamic Output using input file to read

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

文件名:ALIAS_LIST.config

ALIAS1 CLUSTER1
ALIAS2 CLUSTER2
ALIAS3 CLUSTER3
QUIT

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

# *********************************
# 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

基于从文件到数组的输出 select 菜单,我将使用标准 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 }')
        OPTION=$(echo "${alias_select}" | awk '{print }')

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

您可以只使用此脚本从文件中读取 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