你需要为用户提供选项列表,但不希望用户输入不必要的内容。
解决方案
使用 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 语句指定的变量中。
酷客网相关文章:
评论前必须登录!
注册