摘要:命令行与脚本编程大全第三版第十八章学习总结第十八章图形化桌面环境中的脚本编程本章内容创建文本菜单创建文本窗口部件添加图形创建文本菜单创建交互式脚本最常用的方法是使用菜单,脚本菜单的核心是命令,命令会根据用户在菜单上的选择来执行特定命令。
时间:2017年12月04日星期一
说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十八章学习总结
本章内容
创建文本菜单
创建文本窗口部件
添加X Window图形
18.1 创建文本菜单创建交互式shell脚本最常用的方法是使用菜单,shell脚本菜单的核心是case命令,case命令会根据用户在菜单上的选择来执行特定命令。
18.1.1 创建菜单布局常用命令
clear
清理出现在屏幕上的文本
echo -e
在echo命令中输出格式化的字符串,方便菜单项布局
echo -en
输出指定格式化字符串,但不会换行,光标在末尾等待用户输入
read -n 1
使用read命令-n选项来限制自读取一个字符
简单示例
clear echo echo -e " Sys Admin Menu " echo -e " 1. Display disk space" echo -e " 2. Display logged on users" echo -e " 3. Display memory usage" echo -e " 4. Exit menu " echo -en " Enter option: " read -n 1 option18.1.2 创建菜单函数
shell脚本菜单选项作为一组独立的函数实现起来更为容易
为每个菜单选项创建独立的shell函数
通过会为还没有实现的函数先创建一个桩函数
将菜单布局本身作为一个函数来创建
简单示例
function diskspace { clear echo "This is where the diskspace commands will go" } function menu { clear echo echo -e " Sys Admin Menu " echo -e " 1. Display disk space" echo -e " 2. Display logged on users" echo -e " 3. Display memory usage" echo -e " 4. Exit menu " echo -en " Enter option: " read -n 1 option }18.1.3 添加菜单逻辑
创建程序逻辑将菜单布局和函数结合起来
case命令根据菜单中输入的字符来调用相应的函数
使用星号(*)来处理所有不正确的菜单项
简单示例
menu case $option in 0) break ;; 1) diskspace ;; 2) whoseon ;; 3) memusage ;; *) clear echo "Sorry, wrong selection";; esac18.1.4 整合shell脚本菜单
完整例子
编写menu1脚本
#!/bin/bash function diskspace { clear df -k } function whoseon { clear who } function memusagee { clear cat /proc/meminfo } function menu { clear echo echo -e " Sys Admin Menu " echo -e " 1. Display disk space" echo -e " 2. Display logged on users" echo -e " 3. Display memory usage" echo -e " 0. Exit menu " echo -en " Enter option: " read -n 1 option } while [ 1 ] do menu case $option in 0) break ;; 1) diskspace ;; 2) whoseon ;; 3) memusage ;; *) clear echo "Sorry, wrong selection";; esac echo -en " Hit any key to continue" read -n 1 line done clear18.1.5 使用select命令
命令格式:
select variable in list do commands done
命令说明:
list参数是由空格分割的文本选项列表,这些列表构成了整个菜单
select命令获取输入的答案并自动处理
编写smenu1脚本
#!/bin/bash function diskspace { clear df -k } function whoseon { clear who } function memusagee { clear cat /proc/meminfo } PS3="Enter option: " select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program" do case $option in "Exit program") break ;; "Display disk space") diskspace ;; "Display logged on users") whoseon ;; "Display memory usage") memusage ;; *) clear echo "Sorry, wrong selection" ;; esac done clear18.2 制作窗口 18.2.1 dialog包
dialog命令使用命令行参数来决定生成哪种窗口部件
安装dialog包以及需要的库
sudo apt-get install dialog
dialog部件
部件:描述
calendar:提供选择日期的日历
checklist:显示多个选项(其中每个选项都能打开或关闭)
form:构建一个带有标签以及文本字段(可以填写内容)的表单
fselect:提供一个文件选择窗口来浏览选择文件
guage:显示完成的百分比进度条
infobox:显示一条消息,但不用等待回应
inputbox:提供一个输入文本用的文本表单
inputmenu:提供一个可编辑的菜单
menu:显示可选择的一系列选项
msgbox:显示一条消息,并要求用户选择ok按钮
pause:显示一个进度条来显示暂定期间的状态
passwordbox:显示一个文本框,但会隐藏输入的文本
passwordform:显示一个带标签和隐藏稳定字段的表单
radiolist:提供一组菜单选项,但只能选择其中一个
tailbox:用tail命令在滚动窗口中显示文件的内容
tailboxbg:跟 tailbox一样,但是在后台模式中运行
textbox:在滚动窗口中显示文件的内容
timebox:提供一个选择小时、分钟和秒数的窗口
yesno:提供一个带有Yes和No按钮的简单消息
使用格式
dialog –widget parameters
1.msgbox部件
使用说明
dialog –title Testing –msgbox text height width
text参数是在窗口中显示的字符串
dialog命令会根据height和width参数创建的窗口大小来自动换行
title参数指定窗口的标题
实例
dialog --title Testing --msgbox "This is a test" 10 20
2.yesno部件
使用说明
yesno部件允许用户对窗口中显示的问题选择yes或no
用户选择了No按钮,退出状态码是1;如果选择了Yes按钮,退出状态码就是0
实例
dialog --title "Please answer" --yesno "Is this thing on?" 10 20
3.inputbox部件
使用说明
inputbox提供一个简单的文本框区域来输入文本字符串
dialog命令会将文本字符串的值发给STDERR,通过重定向STDERR来获取用户输入
用户选择了OK按钮,退出状态码是0;反之,退出状态码就是1
实例
dialog --inputbox "Enter your age: " 10 20 2>age.txt
4.textbox部件
使用说明
textbox部件在窗口中显示大量信息
实例
dialog --textbox /etc/passwd 15 45
5.menu部件
使用说明
menu部件用来创建文本菜单的窗口版本
dialog命令会将选定的菜单项文本发送到STDERR,通过重定向STDERR来获取选择
实例
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>test.txt
6.fselect部件
使用说明
使用fselect部件来浏览文件的位置并选择文件
实例
dialog --title "Select a file" --fselect $HOME/ 10 50 2>file.txt18.2.2 dialog选项
dialog命令有很多不同的选项
--title选项可以设置窗口顶部的标题
--backlist选项可以为脚本中的菜单创建公共标题
还有其它许多选项,此处省略
18.2.3 在脚本中使用dialog命令如果要在脚本中使用dialog命令,则必须遵守以下规范
如果有Cancel或No按钮,检查dialog命令的退出状态码
通过重定向STDERR来获取输出值
使用dialog部件来创建系统管理菜单
编写menu3脚本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { dialog --textbox $temp1 20 60 } function whoseon { who > $temp1 dialog --textbox $temp1 20 50 } function memusage { cat /proc/meminfo > $temp1 dialog --textbox $temp1 20 50 } while [ 1 ] do dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in 1) diskspace ;; 2) whoseon ;; 3) memusage ;; 0) break ;; *) dialog --msgbox "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null18.3 使用图形 18.3.1 KDE环境
KDE图形化环境默认包含kdialog包
kdialog包使用kdialog命令在KDE桌面上生成类似于dialog式部件的标准窗口
需要检查系统是否已安装kdialog包
1.kdialog部件
使用说明
格式:
kdialog display-options window-options arguments
window-options选项指定使用哪种类型的窗口部件
实例:
kdialog --checklist "Items I need" 1 "Toothbrush" on 2 "Toothpaste" off 3 "Hair brush" on 4 "Deodorant" off 5 "Slippers" off
kdialog窗口选项
选项:描述
--checklist title [tag item status]:带有状态的多选列表菜单,可以表面选项是否被选定
--error text:错误消息框
--inputbox text [init]:输入文本框。可以用init值来制定默认值
--menu title [tag item]:带有标题的菜单选择框,以及用tag标识的选项列表
--msgbox text:显示指定文本的简单消息框
--password text:隐藏用户输入的密码输入文本框
--radiolist title [tag item status]:带有状态的单选列表菜单,可以表面选项是否被选定
--separate-output:为多选列表和单选列表菜单返回按行分开的选项
--sorry text:“对不起”消息框
--textbox file [width] [height]:显示file的内容的文本框,可以指定width和height
--title title:为对话窗口的TitleBar区域指定一个标题
--warningyesno text:带有Yes和No按钮的警告消息框
--warningcontinuecancel text:带有Continue和Cancel按钮的警告消息框
--warningyesnocancel text:带有Yes、No和Cancel按钮的警告消息框
--yesno text:带有Yes和No按钮的提问框
--yesnocancel text:带有Yes、No和Cancel按钮的提问框
2.使用kdialog
使用kdialog创建系统管理菜单
编写menu4脚本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { df -k > $temp1 kdialog --textbox $temp1 1000 10 } function whoseon { who > $temp1 kdialog --textbox $temp1 500 10 } function memusage { cat /proc/meminfo > $temp1 kdialog --textbox $temp1 300 500 } while [ 1 ] do kdialog --menu "Sys Admin Menu" "1" "Display disk space" "2" "Display users" "3" "Display memory usage" "0" "Exit" > $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in 1) diskspace ;; 2) whoseon ;; 3) memusage ;; 0) break ;; *) kdialog --msgbox "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null18.3.2 GNOME环境
GNOME图形化环境支持两种流行的可生成标准窗口的包
gdialog
zenity
1.zenity
zenity窗口部件
选项:描述
--calendar:显示一整月日历
--entry:显示文本输入对话窗口
--error:显示错误消息对话窗口
--file-selection:显示完整的路径名和文件名对话窗口
--info:显示信息对话窗口
--list:显示多选列表或单选列表对话窗口
--notification:显示通知图标
--progress:显示进度条对话窗口
--question:显示yes/no对话窗口
--scale:显示可调整大小的窗口
--text-info:显示含有文本的文本框
--waring:显示警告对话窗口
2.在脚本中使用zenity
编写menu5脚本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { df -k > $temp1 zenity --text-info --title "Disk space" --filename=$temp1 --width 750 --height 10 } function whoseon { who > $temp1 zenity --text-info --title "Logged in users" --filename=$temp1 --width 500 --height 10 } function memusage { cat /proc/meminfo > $temp1 zenity --text-info --title "Memory usage" --filename=$temp1 --width 300 --height 500 } while [ 1 ] do zenity --list --radiolist --title "Sys Admin Menu" --column "Select" --column "Menu Item" FALSE "Display diskspace" FALSE "Display users" FALSE "Display memory usage" FALSE "Exit" > $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in "Display diskspace") diskspace ;; "Display users") whoseon ;; "Display memory usage") memusage ;; Exit) break ;; *) zenity --info "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null18.4 小结
本章主要讲解了如何在shell脚本中创建菜单以及在图形化环境中编写交互式脚本
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/33349.html
摘要:命令行与脚本编程大全第三版第十四章学习总结第十四章处理用户输入本章内容传递参数跟踪参数移动变量处理选项将选项标准化获取用户输入命令行参数读取参数会将一些称为位置参数的特殊变量分配给输入到命令行中的所有参数。 时间:2017年09月19日星期二说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...
摘要:命令行与脚本编程大全第三版第十三章学习总结第十三章更多的结构化命令本章内容循环语句迭代语句使用语句循环重定向循环的输出命令命令格式命令说明变量为中的迭代值,在和语句之间输入的命令可以是一条或多条标准的命令。 时间:2017年09月13日星期三说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版...
摘要:命令命令功能激活和禁用卷组删除卷组将物理卷加到卷组中从卷组中删除物理卷增加逻辑卷的大小减小逻辑卷的大小窍门在手动增加或减小逻辑卷的大小时,要特别小心。 时间:2017年08月14日星期一 说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第八章学习总结 第八章:管理文件系统 本章内容 文件...
摘要:命令允许你在脚本结束时指定一个退出状态码编写脚本编写脚本编写脚本当指定的退出状态码超过时,最终的结果是指定的数值除以后得到的余数。 时间:2017年08月28日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十一章学习总结 第十一章:构建基本脚本 本章内容 使用多个命令 创建脚本...
摘要:例如,函数名会在变量中定义,函数命令行上的任何参数都会通过等定义。在开源世界中,共享代码才是关键,而这一点同样适用于脚本函数。这里将说明如何下载安装使用脚本函数库。 时间:2017年10月09日星期一说明:本文部分内容均摘取自书籍《Linux命令行与shell脚本编程大全》,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第十七章学习总结 第十七章:创建函数 本...
阅读 1614·2021-09-23 11:21
阅读 2854·2021-09-22 15:59
阅读 2827·2021-09-22 10:01
阅读 1191·2021-08-30 09:46
阅读 2125·2019-08-30 15:54
阅读 1854·2019-08-26 12:15
阅读 2380·2019-08-26 12:09
阅读 1195·2019-08-26 11:57