《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
来源:互联网 发布:点钞机升级软件 编辑:程序博客网 时间:2024/06/05 06:21
第一部分:Linux命令行
《Linux命令行与shell脚本编程大全》 第一章:初识Linux shell
《Linux命令行与shell脚本编程大全》 第二章:走进shell
《Linux命令行与shell脚本编程大全》 第三章:基本的bash shell命令
《Linux命令行与shell脚本编程大全》 第四章:更多的bash shell命令
《Linux命令行与shell脚本编程大全》 第五章:使用Linux环境变量
《Linux命令行与shell脚本编程大全》 第六章:理解Linux文件权限
《Linux命令行与shell脚本编程大全》 第七章:管理文件系统
《Linux命令行与shell脚本编程大全》 第八章:安装软件程序
《Linux命令行与shell脚本编程大全》 第九章:使用编辑器
第二部分:shell脚本编程基础
《Linux命令行与shell脚本编程大全》 第十章:构建基本脚本
《Linux命令行与shell脚本编程大全》 第十一章:使用结构化命令
《Linux命令行与shell脚本编程大全》 第十二章:更多的结构化命令
《Linux命令行与shell脚本编程大全》 第十三章:处理用户输入
《Linux命令行与shell脚本编程大全》 第十四章:呈现数据
《Linux命令行与shell脚本编程大全》 第十五章:控制脚本
第三部分:高级shell编程
《Linux命令行与shell脚本编程大全》 第十六章:创建函数
《Linux命令行与shell脚本编程大全》 第十七章:图形化桌面上的脚本编程
《Linux命令行与shell脚本编程大全》 第十八章:初识sed和gawk
《Linux命令行与shell脚本编程大全》 第十九章:正则表达式
《Linux命令行与shell脚本编程大全》 第二十章:sed进阶
《Linux命令行与shell脚本编程大全》 第二十一章:gawk进阶
《Linux命令行与shell脚本编程大全》 第二十二章:使用其他shell
第四部分:高级shell脚本编程主题
《Linux命令行与shell脚本编程大全》 第二十三章:使用数据库
《Linux命令行与shell脚本编程大全》 第二十四章:使用Web
《Linux命令行与shell脚本编程大全》 第二十五章:使用E-mail
《Linux命令行与shell脚本编程大全》 第二十六章:编写脚本实用工具
《Linux命令行与shell脚本编程大全》 第二十七章:shell脚本编程进阶
第十七章:图形化桌面上的脚本编程
创建文本菜单
创建菜单布局
#!/bin/bashclear #清屏echo -e "\t\tMenu"echo -e "1.\tDisplay disk space"echo -e "2.\tDisplay logged on user"echo -e "3.\tDisplay memory usage"echo -e "0.\tExit menu\n\n"echo -en "\t\tEnter option:" #-n表示不打印回车read -n1 option #读取一个字符echo ""
显示效果:
Menu1.Display disk space2.Display logged on user3.Display memory usage0.Exit menuEnter option:
创建菜单函数
只需把上面的代码用函数包起来即可
添加菜单逻辑
#!/bin/bashoption=""create_menu(){ clear echo -e "\t\tMenu" echo -e "1.\tDisplay disk space" echo -e "2.\tDisplay logged on user" echo -e "3.\tDisplay memory usage" echo -e "0.\tExit menu\n\n" echo -en "\t\tEnter option:" read -n1 option echo ""}create_menucase $option in0)echo "Display disk space";;1)echo "Display logged on user";;2)echo "Display memory usage";;3)echo "Exit menu";;*)echo "error";;esac
添加对应的case即可,之后,我们再来实现相应的函数。
整合shell脚本菜单
首先添加case相应的实现函数
disk_space(){ clear df -k}whoseon(){ clear who}menu_usage(){ clear cat /proc/meminfo}
之后处理case部分
deal_menu(){ case $option in 1) disk_space;; 2) whoseon;; 3) menu_usage;; 0) echo "Exit menu";; *) #输入错误,重新输入 echo -e "\nSorry, wrong selection." echo -en "\n\n\t\tHit any key to continue." read -n1 option #重新读取菜单选项 deal_menu;; esac}deal_menu
使用select命令
select命令允许从单个命令行创建菜单,然后再提取输入的答案并自动处理。
select variable in listdo commandsdone
list参数是构成菜单的空格分割的文本选项列表。
select命令会在列表中将每个选项作为一个编好号的选项显示,然后为选项显示一个特殊的由PS3环境变量定义的提示符。(默认的提示符为#?)
PS3="Enter option:"select option in "Display disk space" "Display logged on user" "Display memory usage" "Exit menu"do case $option in "Display disk space") disk_space;; "Display logged on user") whoseon;; "Display memory usage") menu_usage;; "Exit menu") echo "Exit menu" break;; *) echo -e "\nSorry, wrong selection." echo -en "\n\n\t\tHit any key to continue." read -n1 option deal_menu;; esacdone
运行结果:
$ menu_test 1) Display disk space 3) Display memory usage2) Display logged on user 4) Exit menuEnter option:
select会自动生成菜单
注意:存储在变量中的结果是整个字符串,不是菜单选项前面的数字
使用窗口
安装dialog:sudo apt-get install dialog
dialog包
dialog部件
部件描述calendar提供选择日期的日历checklist显示多个选项(其中每一个选项都能打开或关闭)from构建一个表单(用标签和文本字段来填充)fselect提供一个文件选择窗口来浏览选择文件gauge显示完成的百分比进度条infobox显示一条消息,但不用等待回应inputbox提供一个输入文本用的文本表单inputmenu提供一个可编辑的菜单menu显示可选择的一些列选项msgbox显示一条消息,并要求用户选择OK按钮pause显示一个进度条来显示特定暂定时间的状态passwordbox显示一个文本框来输入文本,但会隐藏输入的文本passwordform显示一个带标签和隐藏文本输入的表单radiolist提供一组菜单选项,但只能选择其中一个tailbox用tail命令在滚动窗口中显示文件的内容tailboxbg跟tailbox一样,但是在后台模式中运行textbox在滚动窗口中显示文件的内容timebox提供一个选择小时、分钟和秒数的窗口yesno提供一条简单的带Yes和No按钮的消息
dialog --widget parameters
widget是上面的部件,parameters是部件窗口大小、所需文本等
每个dialog部件都提供两种格式的输出:
使用STDERR
使用退出状态码
用户选择的按钮决定了dialog命令的退出状态码。如果选择Yes、OK,dialog命令会返回退出状态码0。如果选择了Cancel、NO,dialog命令会返回退出状态码1
可以用标准的$?变量来查看退出状态码
如果部件返回了任何数据,那么dialog命令会将数据发送到STDERR
msgbox部件
dialog --msgbox text height width
可以指定title
dialog --title Testing --msgbox "This is a test" 10 20
yesno部件
dialog --title "Do not lie to me" --yesno "Are you a girl?" 10 20
inputbox部件
dialog --title "Do not lie to me" --inputbox "Enter you age:" 10 20 2>age.txt
textbox部件
dialog --textbox /etc/passwd 15 45
可以显示大量文本,并且可以用方向键、Home、End、PgUp、PgDn等操作
menu部件
dialog --menu "Menu" 20 30 5 1 "A." 2 "B." 3 "C."
上面红色的参数表示菜单栏的高度为5个item高,前面两个参数是dialog的高和宽
fselect部件
dialog --title "select a file" --fselect /etc/ 10 50 2>file.txt
dialog选项
(1)dialog命令支持运行时配置。dialog启动时先去检查是否设置了DIALOGRC环境变量,该变量保存配置文件路径。
如果没有找到,则使用$HOME/.dialogrc。如果这个也不存在,就尝查找编译时指定的GLOBALRC(/etc/dialogrc),如果这个也不存在,就用编译默认值。
(2)--backtitle选项是为了脚本中的菜单创建公共标题的简便办法。如果给每个对话窗口都指定了该选项,那么它在应用中将保持一致。
在脚本中使用dialog命令
这里需要注意两点:
1.如果有Cancel或者No按钮,检查dialog命令的退出状态码
2.重定向STDERR来获得输出值
下面是将之前的代码改用dialog实现
#!/bin/bashtemp=`mktemp -t temp.XXXXXX`temp2=`mktemp -t temp2.XXXXXX`disk_space(){ df -k > $temp dialog --textbox $temp 20 60}whoseon(){ who > $temp dialog --textbox $temp 20 50}menu_usage(){ cat /proc/meminfo > $temp dialog --textbox $temp 20 50}dialog --menu "menu" 20 30 10 1 "Display disk space" 2 "Display logged on user" 3 "Display memory usage" 0 "Exit menu" 2>$temp2if [ $? -ne 1 ]then selection=`cat $temp2` case $selection in 1) disk_space;; 2) whoseon;; 3) menu_usage;; 0) ;; *) dialog --msgbox "Sorry, invalid selection" 10 30 esacfirm -f $temp $temp2 2>/dev/null
使用图形
KDE环境
安装kdialog
sudo apt-get install kdebase-bin
kdialog部件
和dialog类似,命令格式为:
kdialog display-options window-options arguments
window-options选项允许指定使用那种类型的窗口。
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按钮的提问框checklist和radiolist允许你在列表中定义单独的选项以及他们默认是否选定
使用kdialog
kdialog与dialog最大的不同就是kdialog将输出重定向到了STDOUT中。
GNOME环境
zenity部件
zenity窗口部件
选项描述--calendar显示整月日历--entry显示文本输入对话窗口--error显示错误消息对话窗口--file-selection显示完整的路径名和文件名对话窗口--info显示信息对话窗口--list显示多选列表或单选列表对话窗口--notification显示通知图标--process显示进度条对话窗口--question显示yes/no对话窗口--scale显示可调整大小的窗口--text-info显示含有文本的文本框--warning显示警告对话窗口zenity提供的窗口就比之前的dialog效果好多了
zenity --calendar
当选择了日期之后,zenity会将值返回到STDOUT中,和kdialog一样
在脚本中使用zenity
#!/bin/bashtemp=`mktemp -t temp.XXXXXX`temp2=`mktemp -t temp2.XXXXXX`disk_space(){ df -k > $temp zenity --text-info --title "Disk space" --filename=$temp --width 750 --height 300}whoseon(){ who > $temp zenity --text-info --title "Logged on user" --filename=$temp --width 500 --height 200}menu_usage(){ cat /proc/meminfo > $temp zenity --text-info --title "Memory usage" --filename=$temp --width 300 --height 500}zenity --list --radiolist --title "Menu" --column "Select" \--column "Menu Item" FALSE "Display disk space" FALSE "Display logged on user" FALSE "Display memory usage" FALSE "Exit" > $temp2if [ $? -ne 1 ]then selection=`cat $temp2` case $selection in "Display disk space") disk_space;; "Display logged on user") whoseon;; "Display memory usage") menu_usage;; "Exit") ;; *) zenity --info "Sorry. invalid selection." esacfirm -f $temp $temp2 2>/dev/null
zenity不支持菜单对话框
转贴请保留以下链接
本人blog地址
http://su1216.iteye.com/
http://blog.csdn.net/su1216/
- 《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
- 《Linux命令行与Shell脚本编程大全》学习笔记1
- 《Linux命令行与Shell脚本编程大全》学习笔记2
- 《Linux命令行与Shell脚本编程大全》学习笔记3
- 《Linux命令行与Shell脚本编程大全》学习笔记4
- linux命令行与shell脚本编程大全学习笔记之—shell脚本for命令学习
- 《Linux命令行与shell脚本编程大全》 第一、二章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第三章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第四章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第五章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第六章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第七章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第八章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第九章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十一章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十二章 学习笔记
- 《Linux命令行与shell脚本编程大全》 第十三章 学习笔记
- java中&和&& |和||的区别
- n~m正整数约数个数最多的数
- 网上转载的Ext.form.ComboBox,个人觉得很好很强大,困惑已久的数据加载问题终于搞懂!
- menu菜单栏的应用, 弹出对话框或退出当前activity
- Exercises4.1
- 《Linux命令行与shell脚本编程大全》 第十七章 学习笔记
- Android、iOS和Windows Phone中的推送技术
- POJ 1269
- 创意集中营
- PostMessage和Sendmessage区别
- hdu4552 怪盗基德的挑战书
- 指针数组和数组指针
- HDU_2055 An easy problem
- asp .net 和 ASP