使用shell腳本時叨橱,經(jīng)常會出現(xiàn)用戶與腳本交互的時候典蜕,一般我們都是通過在終端內(nèi)完成交互,也就是全字符界面罗洗。但今天重裝系統(tǒng)時順便寫了個自動備份與恢復(fù)的腳本(還沒寫完)愉舔,因?yàn)槲沂窃赿esktop下執(zhí)行的腳本,突然想用一下GUI界面做交互伙菜,這樣看起來不用那么原始轩缤。所以就有了此文。
1. Zenity
第一個介紹的工具就是Zenity贩绕,它是Gnome下的一個項(xiàng)目(大概)典奉,在大部分發(fā)行版中都自動安裝了這個工具,因此你可以直接使用丧叽。
1. 日歷
使用 --calendar 選項(xiàng)來創(chuàng)建日歷對話框。Zenity 在標(biāo)準(zhǔn)輸出中返回選定的日期公你。如果沒有在命令行指定日期踊淳,就使用當(dāng)前日期。
日歷對話框支持以下選項(xiàng):
--text= 文本
指定日歷對話框里顯示的文本陕靠。
--day= 天
指定日歷對話框中的日子迂尝。天必須是介于 1~31 之間的數(shù)字。
--month= 月份
指定日歷對話框中的月份剪芥。月份必須是介于 1~12 之間的數(shù)字垄开。
--year= 年
指定日歷對話框中的年份。
--date-format= 格式
指定選定的日期返回時的樣式税肪。默認(rèn)的格式取決于您的區(qū)域設(shè)置溉躲。格式必須可以被 strftime 函數(shù)接受,例如 %A %d/%m/%y
益兄。
下面的腳本示范了如何創(chuàng)建一個日歷對話框:
zenity --calendar \
--title="選擇日期" \
--text="通過點(diǎn)擊選擇日期锻梳。" \
--day=21 --month=01 --year=2016
上面是一個默認(rèn)日期,如圖:
默認(rèn)返回的是系統(tǒng)格式净捅,你可以使用--date-format格式化疑枯,見上面。
2. 文件選擇
使用 --file-selection 選項(xiàng)創(chuàng)建一個文件選擇對話框蛔六。Zenity 在標(biāo)準(zhǔn)輸出返回選中的文件或目錄荆永。默認(rèn)的文件選擇對話框模式是打開對話框废亭。
文件選擇對話框支持以下選項(xiàng):
--filename= 文件名
指定文件選擇對話框在第一次顯示時,選定的文件或文件夾具钥。
--multiple
允許在文件選擇對話框里選中多個文件名豆村。
--directory
在文件選擇對話框里只允許選中文件夾。
--save
設(shè)置文件選擇對話框模式為保存對話框氓拼。
--separator= 分隔符
指定用于分隔返回的文件名列表的字符你画。
下面示范了如何創(chuàng)建一個文件選擇對話框:
FILE=`zenity --file-selection --title="選擇文件"`
case $? in
0)
echo "$FILE 被選中。";;
1)
echo "沒有選擇文件桃漾。";;
-1)
echo "發(fā)生意外錯誤坏匪。";;
esac
界面如下:
3. 表單
使用 --forms 選項(xiàng)創(chuàng)建一個表單對話框。
表單對話框支持以下選項(xiàng):
--add-entry= 字段名稱
在表單對話框中添加新的輸入框撬统。
--add-password= 字段名
在表格對話框中輸入新的密碼輸入框适滓。(隱藏文本)
--add-calendar= 字段名稱
在表格對話框中添加新日歷。
--text= 文本
設(shè)置對話框文本恋追。
--separator= 分隔符
設(shè)置輸出分隔符字符凭迹。(默認(rèn):|)
--forms-date-format= 格式
設(shè)置返回日期的格式。默認(rèn)的格式取決于您的區(qū)域設(shè)置苦囱。格式必須可以被 strftime 函數(shù)接受嗅绸,例如 %A %d/%m/%y
。
下面的腳本示范了如何創(chuàng)建一個表單對話框:
zenity --forms --title="添加好友" \
--text="輸入您朋友的信息撕彤。" \
--separator="," \
--add-entry="名" \
--add-entry="姓" \
--add-entry="郵件" \
--add-calendar="生日" >> addr.csv
截圖如下:
看一下保存的文件:
$ cat addr.csv
xx,aa,ss,2017年01月21日
4. 列表
使用 --list 選項(xiàng)創(chuàng)建一個列表對話框鱼鸠,Zenity 在標(biāo)準(zhǔn)輸出返回選中行的第一列項(xiàng)目。
對話框里的數(shù)據(jù)必須指定行和列羹铅,可以由標(biāo)準(zhǔn)輸入提供蚀狰,每一項(xiàng)都必須由換行符分隔。
如果您使用--checklist
或 --radiolist
選項(xiàng)职员,每一行必須以 “TRUE” 或 “FALSE” 開始麻蹋。
列表框支持以下選項(xiàng):
--column= 列
指定列表對話框顯示的列標(biāo)題。您必須為每個要顯示的列焊切,用 --column 選項(xiàng)指定一個列標(biāo)題扮授。
--checklist
指定列表框的第一列包含一個復(fù)選框。
--radiolist
指定列表框的第一列包含單選按鈕专肪。
--editable
指定顯示的項(xiàng)可以編輯糙箍。
--separator= 分隔符
指定列表框返回選中項(xiàng)時使用的字符。
--print-column= 列
指定選擇列上顯示什么牵祟,默認(rèn)是 “1”深夯,“ALL” 用于在列表上顯示所有列。
下面的例子顯示腳本如何創(chuàng)建一個列表對話框:
zenity --list \
--title="選擇您想查看的 Bugs" \
--column="Bug 編號" --column="嚴(yán)重" --column="描述" \
992383 Normal "多選時 GtkTreeView 崩潰" \
293823 High "GNOME 字典不能使用代理" \
393823 Critical "菜單編輯器在 GNOME 2.0 中不能運(yùn)行"
截圖:
通常需要指定窗口寬高:
--height="600"
--width="1000"
5. 通知圖標(biāo)
使用 --notification
選項(xiàng)創(chuàng)建一個通知對話框。
--text= 文本
指定在通知區(qū)域顯示的文本咕晋。
--listen=icon: 'text', message:'text', tooltip:'text', visible:'text',
使用 --listen 執(zhí)行輸入監(jiān)聽雹拄。
下面的腳本示范了如何創(chuàng)建一個通知區(qū)域圖標(biāo):
zenity --notification --listen
message: this is the message text
6. 消息
對于每一種類型,使用 --text 選項(xiàng)來指定在對話框里顯示的文本掌呜。
- 6.1 錯誤
使用 --error 選項(xiàng)創(chuàng)建一個錯誤對話框滓玖。
下面示范了如何創(chuàng)建一個錯誤對話框:
zenity --error \
--text="找不到 /var/log/syslog。"
- 6.2 信息
使用 --info 選項(xiàng)創(chuàng)建一個信息對話框质蕉。
下面示范了如何創(chuàng)建一個信息對話框:
zenity --info \
--text="合并完成势篡。更新了 3 / 10 個文件。"
- 6.3 問題
使用 --question 選項(xiàng)創(chuàng)建一個問題對話框模暗。
下面的腳本示范了如何創(chuàng)建一個問題對話框:
zenity --question \
--text="您確認(rèn)要繼續(xù)嗎禁悠?"
- 6.4 警告
使用 --warning 選項(xiàng)創(chuàng)建一個警告對話框。
下面的腳本示范了如何創(chuàng)建一個警告對話框:
zenity --warning \
--text="拔下電源線兑宇,避免觸電碍侦。"
7. 密碼輸入
使用 --password
選項(xiàng)創(chuàng)建一個口令對話框。
口令輸入對話框支持以下選項(xiàng):
--username
顯示用戶名字段隶糕。
下面的腳本示范了如何創(chuàng)建一個口令輸入對話框:
#!/bin/sh
ENTRY=`zenity --password --username`
case $? in
0)
echo "用戶名: `echo $ENTRY | cut -d'|' -f1`"
echo "密碼: `echo $ENTRY | cut -d'|' -f2`"
;;
1)
echo "停止登陸瓷产。";;
-1)
echo "發(fā)生意外錯誤。";;
esac
截圖如下:
8. 進(jìn)度
使用 --progress
選項(xiàng)創(chuàng)建一個進(jìn)度對話框枚驻。
Zenity 從標(biāo)準(zhǔn)輸入一行行讀取數(shù)據(jù)濒旦。如果某一行以 # 開頭,進(jìn)度框里的文本會被那一行上的文本替換再登,如果某一行只是一個數(shù)字疤估,數(shù)字會被換成進(jìn)度條的百分比。
進(jìn)度框支持以下選項(xiàng):
--text= 文本
指定顯示在進(jìn)度框里的文本霎冯。
--percentage= 百分比
指定進(jìn)度框開始時的百分比設(shè)定。
--auto-close
當(dāng)達(dá)到 100% 時自動關(guān)閉對話框钞瀑。
--pulsate
指定進(jìn)度條跳動沈撞,直到從標(biāo)準(zhǔn)輸入讀到一個 EOF 文件結(jié)束符。
下面的腳本示范了如何創(chuàng)建一個進(jìn)度對話框:
#!/bin/sh
(
echo "10" ; sleep 1
echo "# 更新郵件日志" ; sleep 1
echo "20" ; sleep 1
echo "# 復(fù)位定時計(jì)劃任務(wù)" ; sleep 1
echo "50" ; sleep 1
echo "該行會被忽略" ; sleep 1
echo "75" ; sleep 1
echo "# 重啟系統(tǒng)" ; sleep 1
echo "100" ; sleep 1
) |
zenity --progress \
--title="更新系統(tǒng)日志" \
--text="掃描郵件日志..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="更新被取消雕什。"
fi
可以設(shè)置百分比:
9. 文本輸入
使用 --entry
選項(xiàng)創(chuàng)建一個文本輸入對話框缠俺。Zenity 將文本框的內(nèi)容返回到標(biāo)準(zhǔn)輸出。
文本輸入框支持以下選項(xiàng):
--text= 文本
指定在文本輸入框中顯示的文本贷岸。
--entry-text= 文本
指定在文本框的文本域里顯示的文本壹士。
--hide-text
隱藏文本框中輸入的字段內(nèi)容。
下面示范了如何創(chuàng)建一個文本輸入對話框:
zenity --entry \
--title="添加新配置" \
--text="輸入新配置的名稱:" \
--entry-text "新配置"
截圖如下:
10. 文本信息
使用 --text-info
選項(xiàng)來創(chuàng)建一個文本信息框偿警。
文本信息框支持以下選項(xiàng):
--filename= 文件名
指定一個加載到文本信息框里的文件躏救。
--editable
顯示的文本允許編輯,當(dāng)對話框關(guān)閉后,編輯后的文本顯示到顯示器上盒使。
--font= 字體
指定文本字體崩掘。
--checkbox= 文本
啟用復(fù)選框,如 “我已閱讀并接受該條款少办“”
--html
啟用 html 支持。
--url= 網(wǎng)址
設(shè)置一個網(wǎng)址英妓,而不是文件挽放。只有當(dāng)您使用 --html 選項(xiàng)時才有效。
下面的腳本示范了如何創(chuàng)建一個文本信息對話框:
#!/bin/sh
# 腳本目錄下必須要有一個名為"COPYING"的文件蔓纠。
FILE=`dirname $0`/COPYING
zenity --text-info \
--title="License" \
--filename=$FILE \
--checkbox="我同意該協(xié)議辑畦。"
使用$?可以判斷輸入的結(jié)果。
11. 范圍
使用 --scale
選項(xiàng)創(chuàng)建一個范圍對話框贺纲。
范圍對話框支持以下選項(xiàng):
--text= 文本
設(shè)置對話框文本航闺。(默認(rèn):調(diào)整范圍值)
--value= 值
設(shè)置初始值。(默認(rèn):0) 您必須在最小值和最大值之間指定一個值猴誊。
--min-value= 值
設(shè)置最小值潦刃。(默認(rèn):0)
--max-value= 值
設(shè)置最大值。(默認(rèn):100)
--step= 值
設(shè)置步長懈叹。(默認(rèn):1)
--print-partial
將值打印為標(biāo)準(zhǔn)輸出乖杠,無論值何時變化。
--hide-value
隱藏對話框中的值澄成。
下面的腳本示范了如何創(chuàng)建一個范圍對話框:
#!/bin/sh
VALUE=`zenity --scale --text="選擇窗口透明度胧洒。" --value=50`
case $? in
0)
echo "您選中了 $VALUE%。";;
1)
echo "未選中值墨状。";;
-1)
echo "發(fā)生意外錯誤卫漫。";;
esac
12. 顏色選擇
使用 --color-selection
選項(xiàng)創(chuàng)建一個顏色選擇對話框。
顏色選擇對話框支持以下選項(xiàng):
--color= 值
設(shè)置初始顏色肾砂。(例如:#FF0000)
--show-palette
顯示調(diào)色板列赎。
下面的腳本示范了如何創(chuàng)建一個顏色選擇對話框:
#!/bin/sh
COLOR=`zenity --color-selection --show-palette`
case $? in
0)
echo "您選擇了 $COLOR。";;
1)
echo "未選擇顏色镐确。";;
-1)
echo "發(fā)生意外錯誤包吝。";;
esac
![示例圖片]
2. KDialog
上面介紹的是Gnome項(xiàng)目下的工具,同樣的源葫,Kde項(xiàng)目下同樣也有這樣的工具诗越,用法更加豐富,不過即便是kde桌面的發(fā)行版息堂,也自帶了zenity工具因此只需要使用一個就可以了嚷狞。