Bash Shell选项列表

你需要为用户提供选项列表,但不希望用户输入不必要的内容。

解决方案

使用 bash 内建的 select 来生成菜单,随后用户可以输入选项数字进行选择。

# 实例文件:select_dir

directorylist="Finished $(for i in /*;do [ -d "$i" ] && echo $i; done)"

PS3='Directory to process? ' # 设置有帮助的选择提示
until [ "$directory" == "Finished" ]; do

    printf "%b" "\a\n\nSelect a directory to process:\n" >&2
    select directory in $directorylist; do

        # 用户输入的数字被保存在$REPLY中,
        # 但是select返回的是用户选中的选项值
        if [ "$directory" == "Finished" ]; then
            echo "Finished processing directories."
            break
        elif [ -n "$directory" ]; then
            echo "You chose number $REPLY, processing $directory..."
            # 在此进行相关处理
            break
        else
            echo "Invalid selection!"
        fi # 结束选项处理

    done # 结束目录选择处理
done # 如果用户选中Finished选项,则结束循环

讨论

select 语句能够轻松地在 STDERR 上为用户生成编号列表,以便用户从中做出选择。虽然按下 Ctrl-D 可以结束 select,空输入会再次输出菜单,但别忘了提供“退出”或“结束”选项。

用户所输入的选项编号保存在 $REPLY 中,选项值保存在 select 语句指定的变量中。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!