在Shell脚本中使用窗口
一般基于Shell的脚步交互看起来都不是很友好,有一个库:dialog可以帮我们解决这个问题,它能在文本环境中用ANSI转义控制字符来创建标准的窗口对话框,有的Linux发行版系统没有安装,可以直接执行sudo apt-get install dialog安装即可。目前,dialog包支持如下窗口部件(widget):
每个部件都提供两种格式的输出: 1. 使用STDERR 2. 使用退出状态码,它决定了用户选择的按钮,如选择了YES或OK按钮,dialog命令会返回退出状态码0,如选择了Cancle或NO按钮,则返回1,我们可以在下一条命令使用$?变量来查看dialog部件种具体用户选择了哪个按钮。另外,如果部件返回了用户输入的数据,dialog命令会将数据发送到STDERR,当然,可以重定向到文件,然后提供后面命令从文件中读取: dialog --inputbox "Enter you choice:" 10 202>input.txt 实例演示 下面用一个简单的数据库管理功能的脚本来演示: #!/bin/bash # A shell script for manage mysql server # Author: LinJK # Date: 10/15/2017 temp1=`mktemp -t tmp.XXXXXX` temp_result=`mktemp -t tmp_re.XXXXXX` db_user=xxxx db_port=xxxx db_host=xxxx date_now=$(date +%Y%m%d%H%M) function get_mysql_pwd { dialog --insecure --passwordbox "Enter mysql password:" 10 30 2> $temp_result } function get_mysql_dbs { mysql -u${db_user} -P${db_port} -p${db_pwd} -h${db_host} -e "show databases;" > $temp_result } function show_all_databases { get_mysql_pwd db_pwd=`cat $temp_result` get_mysql_dbs if [ $? -eq 1 ] then dialog --msgbox "Error password" 10 30 else sed -n '2,$p' $temp_result > $temp1 dialog --title `sed -n 1p $temp_result` --textbox $temp1 20 60 fi } function dump_selected_database { get_mysql_pwd db_pwd=`cat $temp_result` get_mysql_dbs sed -n '2,$p' $temp_result > $temp1 checklist_cmd="" while read line do checklist_cmd=$checklist_cmd" "$line" "$line" "$line done < $temp1 # selected db to dump dialog --checklist "Databases" 20 60 10 $checklist_cmd 2> $temp1 arr_sel=`cat $temp1` OLD_IFS="$IFS" IFS=" " arr=($arr_sel) IFS="$OLD_IFS" for db_name in ${arr[@]} do mysqldump -u${db_user} -P${db_port} -p${db_pwd} -h${db_host} --hex-blob --single-transaction -B ${db_name}|gzip > ./${db_name}_${date_now}.sql.gz done } while [ 1 ] do dialog --menu "MySQL Management - LinJK_Ali" 20 50 10 1 "Show all databases" 2 "Dump selected database" 0 "Exit" 2> $temp1 if [ $? -eq 1 ] then break fi selection=`cat $temp1` case $selection in 1) show_all_databases ;; 2) dump_selected_database ;; 0) dialog --title "Tips" --yesno "Sure to exit?" 10 30 if [ $? -eq 0 ] then break fi ;; *) dialog --title "Error" --msgbox "Invalid selection." 10 30 esac done rm -rf $temp1 2> /dev/null rm -rf $temp_result 2> /dev/null 这里为了简单,就不具体管理数据库了,就显示磁盘信息吧,后面再完善( 2017-10-15 10:03:28完善,可以正常备份、查看数据库)。运行效果如下: 首页: 光标现在在选项1,我们按回车键选择(也可以鼠标点击选择)后,窗口如下: 使用流程就这样,很简单上手,要了解更多,执行"man dialog"了解详细参数情况。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |