1创建文本菜单
创建交互式shell脚本最长用的方法就是使用菜单。提供各种选项帮助脚本用户了解脚本功能。菜单会清空显示区域,然后显示可用的选项列表。
1.1创建菜单函数
菜单布局函数
创建菜单布局函数的第一步是决定菜单上要显示什么,用echo命令显示,在显示前先用clear命令清楚当前终端会话terminfo数据。
函数例子:
function menu {
clear
echo
echo -e "\t\t\tSys Admin Menu\n" #-e 选项识别换行符制表符等
echo -e "\t1. Display disk place\n"
echo -e "\t2. Display logged on users\n"
echo -e "\t3. Diplay memory usage\n"
echo -e "\t0. Exit program\n\n"
echo -en "\t\tEnter option: " #-en选项会让显示的一行末尾不加换行符
read -n 1 option #read -n 数字 来限定取字符的个数,这样用户输入数字后,不用按会回车键了
}
创建菜单要执行的函数
为菜单选项创建函数,能创建简洁方便的case命令。
桩函数(stub function):为还没有实现的函数所创建,桩函数内没有任何命令,或者只有echo语句来说明函数需要做什么。
桩函数:
function diskspace {
clear
echo "This is where the diskspace command will go“
}
1.2添加菜单逻辑
创建逻辑将菜单选项和将要执行的函数连接在一起,需要case命令。
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry Wrong slection";;
esac
整合菜单:
#!/bin/bash
#simple script menu
function diskspace {
clear
df -k
}
function whoseon {
clear
who
}
function memusage {
clear
cat /proc/meminfo
}
function menu {
clear
echo
echo -e "\t\t\tSys Admin Menu\n"
echo -e "\t1. Display disk place\n"
echo -e "\t2. Display logged on users\n"
echo -e "\t3. Diplay memory usage\n"
echo -e "\t0. Exit program\n\n"
echo -e "\t\tEnter option: "
read -n 1 option
}
while [ 1 ]
do
menu
case $option in
0)
break;;
1)
diskspace;;
2)
whoseon;;
3)
memusage;;
*)
clear
echo "Sorry Wrong slection";;
esac
echo -en "\n\t\tHit any key to continue"
read -n 1 line
done
clear
1.4使用select命令创建菜单
select命令允许从单个命令行创建菜单,然后再提取输入的并自动处理。select命令格式:
select variable in list
do
commands
done
list参数是构成菜单的空格分隔的文本选项列表。select命令会在列表中将每个选项作为一个编好的选项显示,然后为选项显示一个特殊的由PS3环境变量定义的提示符。
#!/bin/bash
#using select in the menu
function diskspace {
clear
df -k
}
function whoseon {
clear
who
}
function memusage {
clear
cat /proc/meminfo
}
PS3="Enter option: "
select option in "Display disk place" "Display logged on users" "Diplay memory usage" "Exit program" #
do
case $option in
"Exit program") #select 存储在变量中的结果值是整个文本字符串而不是跟菜单选项相关联的数字
break;;
"Display disk place") #在case语句中需要比较文本字符串
diskspace;;
"Display logged on users")
whoseon;;
"Diplay memory usage")
memusage;;
*)
clear
echo "Sorry Wrong slection";;
esac
done
clear
注意:比较字符串,PS3中存储的也是文本字符串。
caishu@lab403-1F:~/shell_script$ ./menu2
1) Display disk place 3) Diplay memory usage
2) Display logged on users 4) Exit program
Enter option: 1
文件系统 1K-块 已用 可用 已用% 挂载点
udev 4053800 4 4053796 1% /dev
tmpfs 812996 1380 811616 1% /run
/dev/sda4 243764520 26002332 205356584 12% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 4064972 73980 3990992 2% /run/shm
none 102400 276 102124 1% /run/user
/dev/sda1 165173 67727 85210 45% /boot
/dev/sda3 708570096 183163596 489390116 28% /home
2.使用窗口
dialog包可以创建标准的窗口对话框。dialog命令使用命令行参数来决定生成哪种窗口部件(widget)。在命令行上指定部件,需要使用双破折线:dialog --widget parameters 其中widget是部件名,parameters定义了部件窗口的大小以及部件需要的文本。
dialog部件
| 部件 | 用法 | 描述 |
| calendar | dialog --calendar parameters | 提供选择日期的日历 |
| checklist | 显示多个选项 | |
| form | 构建一个表单 | |
| fselect | dialog --fselect $目录 height width | 可以用fselect目录来浏览文件的位置并选择文件。 |
| gauge | 显示完成的百分比进度条 | |
| infobox | 显示一条消息但不用等待回应 | |
| inputbox | dialog --inputbox text height width 其中text是提示用户输入内容的文本 | 为用户提供一个简单的文本框区域来输入文本字符串,并将文本字符串的值发给STDERR,必须重定向STDERR来获取用户输入 |
| inputmenu | 提供一个可编辑的菜单 | |
| menu | dialog --menu "menun_ame" height width totle 1"string" 2"string" 3"string" 4"string" .....其中totle是菜单项总数。 | 生成一个菜单 |
| msgbox | dialog --msgbox text height width dialog --title titlename --msgbox text height width 加标题参数 |
在窗口中显示一条简单的消息,等待用户单击ok才消失 |
| pause | 显示一个进度条来显示特定暂定时间的状态 | |
| passwordbox | 显示一个文本框来输入文本,但会隐藏输入的文本 | |
| passwordbox | 显示一个带标签和隐藏文本输入的表单 | |
| radiolist | 提供一组菜单选项,但只能选择其中一个 | |
| tailbox | 用tail命令在滚动窗口中显示文件的内容 | |
| tailboxbg | 跟tail模式一样,但是在后台模式中运行 | |
| textbox | dialog --textox text height width 其中text是要显示的文件,可以你想要显示内容的文件如/etc/passwd | 在窗口中显示大量信息,会生成一个滚动窗口来显示参数中指定文件中的文本。 |
| timebox | 提供一个选择小时、分钟和秒的窗口 | |
| yesno | dialog --yesno text height width | 允许用户回yes/no问题,在窗口底部生成2个按钮,一个yes,一个no |
每个部件都提供了2种输出格式:使用STDERR;使用退出状态码。
如果部件返回了任何数据,比如菜单选择,那么dialog命令会将数据发送到STDERR。
退出状态码决定了用户选择的钮。如果选择yes或ok,返回0;若选择cancel或no。返回1.
dialog选项
dialog命令中定制很多不同的选项,--title 参数就是其中一个选项。还有许多其他选项,使用man dialog命令可以查看。
3.使用图形
KDE和GNOME桌面环境都扩展了dialog命令的想法。KDE环境中有kdialog包;GNOME环境中有gdialog包和zenity包(常用)。可以用man命令查看其用法,在脚本中使用。
来源:oschina
链接:https://my.oschina.net/u/2712705/blog/679379