前言
创建交互式shell脚本最常用的方法是使用菜单。提供各种选项可以帮助脚本用户了解脚本能做什么,不能做什么;通常菜单脚本会清空显示区域,然后显示可用的选项列表。本文给大家详细介绍了shell创建文本菜单与窗口部件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
创建文本菜单
创建交互式shell脚本最常用的方法是使用菜单,它提供了各种选项帮助脚本用户了解脚本能做到的和不能做的。
shell脚本菜单的核心是case命令,该命令会根据用户在菜单上的选择来执行特定命令。
下面我们逐步了解和创建基于菜单的shell脚本的步骤。
创建菜单布局
第一步是决定在菜单上显示哪些元素以及想要显示的布局方式。
在创建菜单前,通常先清空显示器上已有的内容。这样能在干净的,没有干扰的环境中显示菜单了。
clear命令使用当前终端的terminfo数据来清理出现在屏幕上的文字。运行clear命令后可以使用echo命令显示菜单元素。
默认,echo命令只显示可打印的文本字符。而在创建菜单时一些非文本字符也非常有用,比如制表符和换行符。我们需要添加-e选项使得echo命令能解析包含在其中的非文本字符。
例如,
wsx@wsx:~/tmp$ echo -e "1.\tDisplay disk space"
1. Display disk space
这对于格式化菜单项布局非常方便,只需要几个echo命令就可以创建一个还不错的菜单。
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users"
echo -e "\t3. Display memory usage"
echo -e "\t0. Exit menu\n\n"
echo -en "\t\tEnter an option: "
最后一行-en选项去掉末尾换行符使得菜单更专业点,光标会在行尾等待用户输入。
创建菜单的最后一步是获取用户输入。这一步用read命令。因为我们只期望用户使用单字符输入,在命令加-n选项进行限定。这样用户只需要输入一个数字,不用摁回车键。
read -n 1 option
创建菜单函数
shell脚本菜单选项作为一组独立的函数实现起来更为容易。要做到这一点,你要为每个菜单项创建独立的shell函数。第一步是决定你希望脚本执行那些功能,然后将这些功能以函数的形式放在代码中。
通常我们会为还没有实现的函数先创建一个桩函数,它是一个控函数,或者只有一个echo语句,说明最终这里需要什么内容。
function diskspace {
clear
echo "This is where the diskspace commands will do"
}
这允许菜单在我实现某个函数时仍然能正常操作。不需要我们写出所有函数之后才能让菜单投入使用。函数从clear命令开始,这样我们就能在一个干净的屏幕上执行该函数,不会收到原先菜单的干扰。
另外,将菜单布局本身作为一个函数来创建有利于菜单制作。
function menu {
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1. Display disk space"
echo -e "\t2. Display logged on users"
echo -e "\t3. Display memory usage"
echo -e "\t0. Exit menu\n\n"
echo -en "\t\tEnter an option: "
read -n 1 option
}
这样我们能在任何时候调用该函数以此重现菜单。
添加菜单逻辑
下一步我们需要创建程序逻辑将菜单布局和函数结合起来。这需要使用case命令。
case命令应该根据菜单中输入的字符来调用相应的函数,用case命令字符星号来处理所有不正确的菜单项。
下面展示了典型菜单的case用法:
menu
case $option in
0)
break ;;
1)
diskspace ;;
2)
whoseon ;;
3)
memusage ;;
*)
clear
echo "Sorry, wrong selection";;
esac
这里首先调用menu函数清空屏幕并显示菜单。menu函数中的read命令会一直等待,知道用户在键盘上键入一个字符。然后case命令会接管余下的处理过程,基于字符调用相应的函数。
整合shell脚本菜单
现在让我们将前面的步骤全部组合起来,看看它们是如何协作的。
这是一个完整的菜单脚本例子: