建立交互式shell脚本最长用的方法就是使用菜单。提供各类选项帮助脚本用户了解脚本功能。菜单会清空显示区域,而后显示可用的选项列表。shell
1.1建立菜单函数bash
菜单布局函数函数
建立菜单布局函数的第一步是决定菜单上要显示什么,用echo命令显示,在显示前先用clear命令清楚当前终端会话terminfo数据。布局
函数例子:spa
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命令。code
桩函数(stub function):为尚未实现的函数所建立,桩函数内没有任何命令,或者只有echo语句来讲明函数须要作什么。orm
桩函数: function diskspace { clear echo "This is where the diskspace command will go“ }
1.2添加菜单逻辑seo
建立逻辑将菜单选项和将要执行的函数链接在一块儿,须要case命令。ip
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命令查看其用法,在脚本中使用。