轉自:http://book.51cto.com 2010-03-28 15:01 臥龍小
· 摘要:《實戰Linux Shell編程與服務器管理》第16章使用Shell Script撰寫文字和圖形接口程序,本章介紹如何在Bash Shell Script中,利用dialog和xdialog這兩個工具,撰寫具親和力的用戶接口程序。本節爲大家介紹使用dialog撰寫文本接口程序。
第16章 使用Shell Script撰寫文字和圖形接口程序
dialog是一種在shell script中建立對話框(dialog box)的工具,利用dialog可建立不同的信息和問題窗口,增加script的方便性,提高程序的親和力。有許多Linux套件的安裝程序,就是使用 dialog來編寫用戶界面的,如B2D Linux、Slackware Linux等。
dialog最初的作者是Savio Lam([email protected]),後來Pako([email protected])接手維護,在0.9a版時改名叫cdialog,1999年12月T.Dickey <[email protected]> 以0.9a爲基礎推出0.9b的版本,後來就由Dickey持續維護到今天,在http://freshmeat.net/projects/ cdialog/的項目地址上,仍名爲cdialog。
dialog建立的是終端模式下的文本接口,另外有一種和dialog語法兼容的工具叫xdialog,xdialog則是拿來建立X window下的圖形接口。xdialog使用GTK+圖形工具來完成各式各樣的對話框,可融入不同的桌面主題(desktop theme)。xdialog的網址爲http://xdialog.free.fr/。
除了xdialog之外,還有一個功能也十分強大的圖形接口工具,叫zenity。zenity是改寫自老版本的gdialog,zenity套件 中有一支使用perl寫的gdialog程序,可轉換兼容於gdialog的語法。zneity也是使用GTK+ 來操作,網址爲http://freshmeat.net/projects/zenity。
本章介紹如何在Bash Shell Script中,利用dialog和xdialog這兩個工具,撰寫具親和力的用戶接口程序。
B2D、Debian、Ubuntu的用戶,可通過以下指令來安裝需要的套件:
1 apt-get update
2 apt-get install dialog xdialog zenity
16.1 使用dialog撰寫文本接口程序(1)
dialog目前支持的對話框功能有:
3 calendar, checklist, form, fselect, gauge, infobox,
inputbox, inputmenu, menu, msgbox
4 (message), password, pause, radiolist, tailbox,
tailboxbg, textbox, timebox, and yesno
5 (yes/no).
這些對話框的語法,至少要有3個參數:標題或信息內容、窗口的高度、寬度。除了這3項,不同的對話框可能還需要額外的參數,語法纔算完整。
使用者操作對話框之後,如果有輸出,通常會轉向到標準錯誤;若有選擇,則可以由執行對話框命令結束後的離開狀態來判斷。
以下介紹常用的對話框的用法。
顯示信息(msgbox)
語法:dialog --msgbox信息內容 高度 寬度
用途 顯示信息。
用例1
6 dialog --msgbox "這是一個測試" 10 40
執行結果:
圖16-1 msgbox的執行結果 |
窗口的按鈕只有一個,若使用者按下【Enter】鍵,則窗口隨即結束,離去狀態爲0;若用戶按【Esc】鍵,窗口也會結束,但離去狀態爲255。我們可以用$?這個變量來檢查用戶對窗口的反應:
範例 16-1-1:msgbox1.sh
7 01. #! /bin/bash
8 02.
9 03. DIA='/usr/bin/dialog'
10 04.
11 05. $DIA --msgbox "這是一個測試" 10 40
12 06. x=$?
13 07. if [ "$x" -eq 0 ]; then
14 08. echo '你按了ENTER鍵'
15 09. elif [ "$x" -eq 255 ]; then
16 10. echo '你按了ESC鍵'
17 11. else
18 12. echo '未知的錯誤: 你可能按了Ctrl-C鍵'
19 13. fi
說明
行3,定義變量DIA爲dialog的程序路徑和文件名,這樣,將來修改script的自由度較高。
行5,顯示窗口。
行6,使用變量x接收行5執行後"離去狀態變量$?"的內容。
行7~13,依離去狀態值,顯示用戶按了哪一個鍵。
以上是對話框的基本用法,在實際應用時,還有3個選項可控制對話框的外觀:
16.1 使用dialog撰寫文本接口程序(2)
用例2
1 dialog --backtitle "設置階段" --title "注意"
--msgbox "這是一個測試" 10 40
執行結果:
圖16-2 --backtitle選項指定的標題, |
可以發現--backtitle選項指定的標題,出現在背後左上角的位置;--title選項指定的標題,出現在對話框頂部。
如果範例2再加上--no-shadow的選項,對話框的外框就不會有陰影的效果。如下所示。
用例3
2 dialog --backtitle "設置階段" --title "注意"
--no-shadow --msgbox "這是一個測試" 10 40
執行結果:
圖16-3 加上 --no-shadow的選項, |
以上這些範例算是對話框的基本型,其他對話框,可視爲窗口的變化。用這種觀點,對dialog的各種用法,很快地就可以上手。
是或否對話框(yesno)
語法:dialog --yesno信息內容 高度 寬度
用途 顯示信息,並詢問確定與否。
用例
3 dialog --yesno "要繼續嗎?" 10 40
執行結果:
圖16-4 是或否對話框(yesno) |
依據$?的值,可判斷使用者選擇了"是"或"否":
若$?的值爲0,表示使用者選"是"。
若$?的值爲1,表示選"否"。
若$?的值爲255,表示使用者按了【Esc】鍵,放棄回答。
範例 16-1-2:yesnobox1.sh
4 01. #! /bin/bash
5 02.
6 03. DIA='/usr/bin/dialog'
7 04.
8 05. CHOICE=''
9 06.
10 07. dialog --yesno "要繼續嗎?" 10 40
11 08. x=$?
12 09. if [ "$x" -ne 0 ]; then
13 10. CHOICE='NO'
14 11. fi
15 12.
16 13. if [ -n "$CHOICE" ]; then
17 14. echo '你選擇不繼續...'
18 15. else
19 16. echo '你選擇繼續...'
20 17. fi
說明
行9,若$?不等於0,表示使用者沒有選擇"是",那麼,便設定CHOICE的變量值爲NO。
行13,若CHOICE的值不空,表示使用者選"否"。
請注意,信息內容的字符串長度,如果超過對話框設定的寬度,顯示時會自動換行。你也可以在信息字符串中,使用/n來指定要換行的位置。
16.1 使用dialog撰寫文本接口程序(3)
多選一對話框(radiolist)
語法:dialog --radiolist信息內容 高 寬 選項數目 選項列表
選項的格式是:"選項名稱 選項說明 默認是否啓用",其中on代表啓用,off代表不啓用。選項列表則是由各選項所組成的字符串。
用途 多選一。
用例
範例 16-1-3:radiolist1.sh
1 01. #! /bin/bash
2 02.
3 03. DIA='/usr/bin/dialog'
4 04.
5 05. TMP="/tmp/radiolist.$$"
6 06. M1="請選擇您偏愛的文件系統"
7 07. NUMFS=3
8 08. FSLIST="ext2第2版的擴展文件系統off
ext3第3版的擴展文件系統on ext4
9 第4版的擴展文件系統off"
10 09.
11 10. $DIA --radiolist "$M1" 10 40 $NUMFS $FSLIST 2> $TMP
12 11.
13 12. FSTYPE=$(cat $TMP)
14 13. [ -z "$FSTYPE" ] && FSTYPE="ext3"
15 14.
16 15. rm -f "$TMP"
17 16.
18 17. echo "您選擇的是: $FSTYPE"
行5,建立一臨時文件TMP。
行6,設定M1爲欲顯示的信息內容。
行7,設定NUMFS爲選項數目,這裏設爲3,表示共有3個選項。
行8,FSLIST是radiolist的選項列表,其格式是:"選項名稱 選項說明 默認是否啓用",這3項彼此之間用空格符隔開,最後一項若是on,則代表默認啓用,若是off,則代表不啓用。由於選項數目爲3,因此,FSLIST中共 有9項,1~3項是ext2的選項設定,off代表ext2默認不啓用;4~6項爲ext3的選項設定,on代表ext3默認啓用;7~9項是ext4的 選項設定,off代表ext4默認不啓用。用戶可按上下方向鍵來移動光標位置,按空格鍵可做選擇,按【Tab】鍵可在"選項"、"確定"、"取消"3個按 鈕之間移動切換。
行10,使用者的選擇,可能是ext2、ext3、ext4這3個"選項名稱"之一,默認會由標準錯誤輸出,因此,使用2>把標準錯誤的輸出結果轉向存入TMP臨時文件中,利用這個方法,我們便可取得用戶選擇的項目。
行12,取出臨時文件TMP的內容,放入變量FSTYPE中。
行13,如果FSTYPE變量內容是空的,爲保險起見,給FSTYPE設一個默認值ext3。
行15,刪除臨時文件。
行17,顯示用戶所做的選擇。
執行結果:
圖16-5 多選一對話框 |
選單對話框(menu)
語法:dialog --menu信息內容 高 寬 選單高度 選項列表
選項的格式是:"選項名稱 選項說明"。選項列表則是由一個或一個以上的選項所組成的字符串。
用途 建立一選單供使用者選擇。
--menu和--radiolist的用法差不多,差別在於--menu不指定哪一個選項默認是否啓用,且多了一個選項高度。操作選單對話框,可 使用上下箭頭鍵移動光標,各選項的第一個字爲熱鍵,可單按選項的第一字符來做選擇,或按下1~9的數字鍵來選擇對應的選項。用戶做了選擇後,該選項的"選 項名稱"就是答案,默認會由標準錯誤輸出。若是加上--help-button選項,則會多出一個求助的按鈕,script設計者可藉此安排一個說明畫 面。
若選項的數目超過選單的高度,則會出現滾動條,供用戶上下移動選項。
用例
範例 16-1-4:menu1.sh
19 01. #! /bin/bash
20 02.
21 03. DIA='/usr/bin/dialog'
22 04.
23 05. TMP="/tmp/menu.$$"
24 06. M1="請選擇您偏好的文件系統"
25 07. FSLIST="1.ext2第2版的擴展文件系統2.ext3
第3版的擴展文件系統3.ext4
26 第4版的擴展文件系統"
27 08.
28 09. $DIA --menu "$M1" 10 40 4 $FSLIST 2> $TMP
29 10.
30 11. FSTYPE=$(cat $TMP)
31 12. [ -z "$FSTYPE" ] && FSTYPE="ext3"
32 13.
33 14. rm -f "$TMP"
34 15.
35 16. echo "您選擇的是: $FSTYPE"
行9,對話框的高寬分別是10行和40個字符寬,選單高度是4行,選項列表的內容在FSLIST中。使用2>把使用者的選擇由標準錯誤轉向存入TMP臨時文件中。
執行結果:
圖16-6 除了用箭頭鍵做選擇外, |
這裏,除了上下箭頭鍵之外,也可以單按1、2、3等數字鍵來做選擇,然後按【Enter】鍵做確定。
16.1 使用dialog撰寫文本接口程序(4)
單行輸入對話框(inputbox)
語法:dialog --inputbox信息內容 高 寬 初始值
初始值可以省略。若有設定初始值,則輸入欄中會出現該初始值。
用途 要求用戶輸入一列字符串。使用者可在輸入欄中,進行輸入或各種編輯的動作。
用例
範例 16-1-5:inputbox1.sh
1 01. #! /bin/bash
2 02.
3 03. DIA='/usr/bin/dialog'
4 04.
5 05. TMP="/tmp/inputbox.$$"
6 06.
7 07. DEFHNAME="sample.edu.tw"
8 08. M1="請設置主機名:"
9 09.
10 10. $DIA --inputbox "$M1" 10 40 $DEFHNAME 2> $TMP
11 11.
12 12. HNAME=$(cat $TMP)
13 13. [ -z "$HNAME" ] && HNAME=$DEFHNAME
14 14.
15 15. rm -f "$TMP"
16 16.
17 17. echo "你設定的主機名是: $HNAME"
說明
行7,使用者若沒有輸入就直接按【Enter】鍵確定,則默認的主機名就是DEFHNAME的值。
行10,把用戶輸入的字符串轉向存入TMP臨時文件中。
行12,取出交換空間的內容,放入變量HNAME中。
行13,若HNAME爲空,則把默認的主機名設給HNAME。
行17,顯示用戶輸入的結果。
執行結果:
圖16-7 執行結果 |
輸入密碼對話框(passwordbox)
語法:dialog --passwordbox信息內容 高 寬 初始值
初始值可以省略。若有設定初始值,則輸入欄中會出現該初始值。
用途 要求用戶輸入密碼。
當用戶輸入時,默認不會顯示出來。但若有提供初始值,則一開始會出現該初始值。若在執行dialog時加上--insecure的選項,那麼,當用戶鍵入密碼時,會以*替代用戶輸入的字符,出現在輸入欄中。
用例1
範例 16-1-6:passwordbox1.sh
18 01. #! /bin/bash
19 02.
20 03. DIA='/usr/bin/dialog'
21 04.
22 05. TMP="/tmp/passwordbox.$$"
23 06.
24 07. DEFPWD='b2d is best'
25 08. M1="請設置一組密碼:"
26 09.
27 10. $DIA --passwordbox "$M1" 10 40 2> $TMP
28 11.
29 12. PWD=$(cat $TMP)
30 13. [ -z "$PWD" ] && PWD=$DEFPWD
31 14.
32 15. rm -f "$TMP"
33 16.
34 17. echo "你設定的密碼是: $PWD"
列7,設定默認的密碼變量DEFPWD。列10,執行passwordbox,將設定密碼的結果存入TMP臨時文件中。
列12,取出臨時盤的內容,放入變量PWD中。
列13,若PWD爲空,則指定默認的密碼給PWD。
列17,顯示設置的密碼。
執行結果:
圖16-8 passwordbox1.sh的執行結果 |
16.1 使用dialog撰寫文本接口程序(5)
用例2
以下是加上--insecure選項的範例。
範例 16-1-7:passwordbox2.sh
1 01. #! /bin/bash
2 02.
3 03. DIA='/usr/bin/dialog'
4 04.
5 05. TMP="/tmp/passwordbox.$$"
6 06.
7 07. DEFPWD='b2d is best'
8 08. M1="請設置一組密碼:"
9 09.
10 10. $DIA --insecure --passwordbox "$M1" 10 40 2> $TMP
11 11.
12 12. PWD=$(cat $TMP)
13 13. [ -z "$PWD" ] && PWD=$DEFPWD
14 14.
15 15. rm -f "$TMP"
16 16.
17 17. echo "你設置的密碼是: $PWD"
執行結果:
圖16-9 passwordbox2.sh的執行結果 |
顯示進度對話框(gauge)
語法:dialog --gauge信息內容 高 寬 初始進度百分比值
初始進度值可以省略,此時其百分比爲0。
用途 顯示進度百分比的直方圖。
--gauge默認會由標準輸入讀取進度百分比的值,並在對話框中顯示對應的進度直方圖,當不再讀取到任何輸入值時(即讀到EOF),隨即離開此對話框。
用例1
18 dialog --gauge "安裝進度..." 10 40 80
這裏,設定執行進度百分比爲80%。
執行結果:
圖16-10 顯示進度對話框 |
不過,上述範例是靜態的,作用不大,應改成動態的,較能呈現目前處理的現況。
用例2
範例 16-1-8:progress1.sh
19 01. #! /bin/bash
20 02.
21 03. {
22 04. for ((i=1;i<=10;i++))
23 05. do
24 06. let I=10*i
25 07. echo $I
26 08. sleep 1
27 09. done
28 10.
29 | dialog --guage "安裝進度" 5 60 0
行4,使用for循環,i從1到10結束。
行6,把i放大10倍,指定給I。
列7,把進度百分比I顯示到標準輸出。
行8,爲了讓進度條有動態的感覺,在這裏停頓1秒鐘。
行3~10,把for循環的輸出,經由管線餵給dailog。
行10,dialog由百分比0開始顯示,然後百分之10、20、30…,一直到百分之百,才結束此對話框。
執行結果:
圖16-11 progress1.sh的執行結果 |
【責任編輯:雲霞 TEL:(010)68476606】
16.1 使用dialog撰寫文本接口程序(6)
進度條除了往右增長之外,運用循環的技巧,也可以使進度條往左方倒退顯示進度。以下範例,會由0%顯示到100%,然後再遞減到0%。
用例3
範例 16-1-9:progress2.sh
1 01. #! /bin/bash
2 02.
3 03. {
4 04. for ((i=1;i<=10;i++))
5 05. do
6 06. let I=10*i
7 07. echo $I
8 08. sleep 1
9 09. done
10 10.
11 11. echo
12 12.
13 13. for ((i=9;i>=0;i--))
14 14. do
15 15. let I=10*i
16 16. echo $I
17 17. sleep 1
18 18. done
19 19.
20 dialog --guage "安裝進度" 5 60 0
覈查列表對話框(checklist)
語法:dialog --checklist信息內容 高 寬 覈查列表高度 覈查項目列表
覈查項目的格式是:"選項名稱 選項說明 啓用狀態"。on代表啓用,off代表不啓用。覈查項目列表則是由一個或一個以上的核查項目所組成的字符串。
用途 建立一選單供使用者做多重選擇。
--checklist和--menu的用法差不多,差別在於--checklist須指定覈查項目默認是否啓用,且可多選。操作覈查列表對話框, 可使用上下箭頭鍵移動光標,按空格鍵可進行覈查,另外,各選項的的第一個字爲熱鍵,可單按選項的第一字符來做選擇,或按下1~9的數字鍵來選擇對應的選 項。用戶做了選擇後,該選項的"選項名稱"就是多重選擇的答案之一,默認會由標準錯誤輸出,輸出時,各選項默認會用雙引號含括。
若選項的數目超過列表的高度,則會出現滾動條,供用戶上下移動選項。
用例
範例 16-1-10:checklist1.sh
21 01. #! /bin/bash
22 02.
23 03. DIA='/usr/bin/dialog'
24 04.
25 05. TMP="/tmp/checklist.$$"
26 06. M1="請選擇您偏好的文件系統"
27 07. FSLIST="1.ext2第2版的擴展文件系統on 2.ext3
第3版的擴展文件系統on 3.ext4
28 第4版的擴展文件系統off"
29 08.
30 09. $DIA --checklist "$M1" 10 40 4 $FSLIST 2> $TMP
31 10.
32 11. FSTYPE=$(cat $TMP)
33 12. [ -z "$FSTYPE" ] && FSTYPE="ext3"
34 13.
35 14. rm -f "$TMP"
36 15.
37 16. echo "您選擇的是: $FSTYPE"
說明
行7,覈查項目列表中共有3個核查項目,前兩個的默認狀態是啓用(on)。
行9,對話框的高寬分別是10行和40個字符寬,覈查列表的高度是4行,選項列表的內容在FSLIST中。使用2> 把使用者的選擇由標準錯誤轉向存入TMP臨時文件中。
執行結果:
圖16-12 checklist1.sh的執行結果 |
如果加上選項--separate-output,那麼,用戶多重選擇的答案會分別輸出,不會用雙引號含括,其語法如下:
38 $DIA --separate-output --checklist "$M1" 10 40 4 $FSLIST
如果加上選項--single-quoted,則輸出多重選擇的答案時,則視需要加上單引號或不加任何引號,其語法如下:
39 $DIA --single-quoted --checklist "$M1" 10 40 4 $FSLIST
【責任編輯:雲霞 TEL:(010)68476606】
16.1 使用dialog撰寫文本接口程序(7)
文件對話框(textbox)
語法:dialog --textbox文本區 高 寬
用途 顯示文本區內容。
可使用箭頭鍵、PgUP、PgDn或使用vi的h、j、k、l按鍵法,來滾動顯示對話框中的內容。
1 dialog --textbox b2d.txt 10 40
信息對話框(infobox)
語法:dialog --infobox信息內容 高 寬
用途 顯示信息後,馬上結束對話框。
用例
2 dialog --infobox"尚未完成準備工作喔" 10 40
調整時間對話框(timebox)
語法:dialog --timebox信息內容 高 寬 時 分 秒
"時 分 秒"可以省略。若不指定"時 分 秒",則顯示現在的時間。
用途 顯示時間,供用戶以箭頭鍵和【Tab】鍵做調整。
用例
3 dialog --timebox "調整時間" 4 30
倒數計時對話框(pause)
語法:dialog --pause信息內容 高 寬 秒數
用途 顯示多少秒之後,結束對話框。
用例
4 dialog --pause "倒數計時" 10 40 10
這裏設定倒數計時10秒後,結束對話框。
選擇文本區對話框(fselect)
語法:dialog --fselect路徑文件名 高 寬
用途 顯示某一路徑下的文本區。
用例
5 dialog --fselect /var/www/index.php 10 40
按【Tab】鍵可在目錄和文件之間切換,按空格鍵可選擇文本區。
其他dialog的對話框,請參考man dialog的說明。
16.2 使用xdialog撰寫圖形接口程序(1)
xdialog可向下和大部分的dialog語法兼容,因此,前一節中各種dialog的語法,在xdialog中仍可適用,只要把前一節各範例中的dialog文件名換成Xdialog即可。
以下僅舉msgbox、radiolist和inputbox爲例,其他對話框,則請比照dialog的用法模仿製,在此就不再重複贅述了。
xdialog除了支持大部分dialog的對話框之外,還支持許多比dialog功能更多樣化的對話框。在說明msgbox、radiolist和inputbox之後,再介紹這些圖形接口對話框。
顯示信息(msgbox)
語法:Xdialog --msgbox信息內容 高度 寬度
用途 顯示信息
用例1
1 Xdialog --msgbox "這是一個測試" 10 40
執行結果:
圖16-13 顯示信息 |
用例2
2 Xdialog --backtitle "設置階段" --title "注意"
--msgbox "這是一個測試" 10 40
執行結果:
圖16-14 加上設定標題的顯示信息 |
多選一對話框(radiolist)
語法:Xdialog --radiolist信息內容 高 寬 選項數目 選項列表
選項的格式是:"選項名稱 選項說明 默認是否啓用",其中on代表啓用,off代表不啓用。選項列表則是由各選項所組成的字符串。
用途 多選一。
用例
範例 16-2-1:radiolist2.sh
3 01. #! /bin/bash
4 02.
5 03. DIA='/usr/bin/Xdialog'
6 04.
7 05. TMP="/tmp/radiolist.$$"
8 06. M1="請選擇您偏好的文件系統"
9 07. NUMFS=3
10 08. FSLIST="ext2第2版的擴展文件系統off ext3
第3版的擴展文件系統on ext4
11 第4版的擴展文件系統off"
12 09.
13 10. $DIA --radiolist "$M1" 12 40 $NUMFS $FSLIST 2> $TMP
14 11.
15 12. FSTYPE=$(cat $TMP)
16 13. [ -z "$FSTYPE" ] && FSTYPE="ext3"
17 14.
18 15. rm -f "$TMP"
19 16.
20 17. echo "您選擇的是: $FSTYPE"
執行結果:
圖16-15 radiolist2.sh的執行結果 |
單行輸入對話框(inputbox)
語法:dialog --inputbox信息內容 高 寬 初始值
初始值可以省略。若有設定初始值,則輸入欄中會出現該初始值。
用途 要求用戶輸入一列字符串。使用者可在輸入欄中,進行輸入或各種編輯的動作。
用例
範例 16-2-2:inputbox2.sh
21 01. #! /bin/bash
22 02.
23 03. DIA='/usr/bin/Xdialog'
24 04.
25 05. TMP="/tmp/inputbox.$$"
26 06.
27 07. DEFHNAME="sample.edu.tw"
28 08. M1="請設置主機名:"
29 09.
30 10. $DIA --inputbox "$M1" 10 40 $DEFHNAME 2> $TMP
31 11.
32 12. HNAME=$(cat $TMP)
33 13. [ -z "$HNAME" ] && HNAME=$DEFHNAME
34 14.
35 15. rm -f "$TMP"
36 16.
37 17. echo "您設置的主機名是: $HNAME"
16.2 使用xdialog撰寫圖形接口程序(2)
執行結果:
圖16-16 inputbox2.sh的執行結果 |
Xdialog的inputbox,可再加上選項--password,此時,輸入欄中會以*代替鍵入的字符,且有個覈查按鈕可切換要不要顯示鍵入的字符。
範例 16-2-3:inputbox3.sh
1 01. #! /bin/bash
2 02.
3 03. DIA='/usr/bin/Xdialog'
4 04.
5 05. TMP="/tmp/inputbox.$$"
6 06.
7 07. DEFPWD="password999"
8 08. M1="請設置密碼:"
9 09.
10 10. $DIA --password --inputbox "$M1" 10 40 $DEFPWD 2> $TMP
11 11.
12 12. PWD=$(cat $TMP)
13 13. [ -z "$PWD" ] && PWD=$DEFPWD
14 14.
15 15. rm -f "$TMP"
16 16.
17 17. echo "您設置的密碼是: $PWD"
說明
行7,設定默認密碼變量DEFPWD。行10,加上--password選項,使輸入的字符改以*顯示。
執行結果:
圖16-17 勾選"Hide typing",可 |
雙行輸入對話框(2inputsbox)
語法:Xdialog--2inputsbox信息內容 高 寬 字段1的名稱 字段1初始值 字段2的名稱 字段2初始值
用途 顯示兩個輸入字段,取得兩種用戶輸入的數據。
用例
範例 16-2-4:inputbox4.sh
18 01. #! /bin/bash
19 02.
20 03. DIA='/usr/bin/Xdialog'
21 04.
22 05. TMP="/tmp/inputbox.$$"
23 06.
24 07. DEFACT="root"
25 08. DEFPWD="password999"
26 09. M1="請設定賬號密碼:"
27 10.
28 11. $DIA --password --2inputsbox "$M1" 16
40 "賬號" $DEFACT "密碼" $DEFPWD 2>
29 $TMP
30 12.
31 13. R=( $(cat $TMP | awk -F/ '{print $1,$2
32 ') )
33 14.
34 15. [ -z "${R[0]
35 " ] && R[0]=$DEFACT
36 16. [ -z "${R[1]
37 " ] && R[1]=$DEFPWD
38 17.
39 18. rm -f "$TMP"
40 19.
41 20. echo "你設定的賬號是: ${R[0]"
42 21. echo "你設定的密碼是: ${R[1]"
說明
行7,設定默認賬號變量DEFACT。
行8,設定默認密碼變量DEFPWD。
行11,使用雙列輸入對話框,並使用--password選項,讓第二個字段改以*顯示輸入字符。兩個字段的輸入值,轉向存入臨時文件TMP中,格式是:賬號/密碼。
行13,建立數組R。數組的組成方式是:R=(賬號 密碼),其中"賬號 密碼" 這個格式由$(cat $TMP | awk -F/ '{print $1,$2')產生,該式把$TMP的內容通過管線傳給awk,awk以/爲分隔字符,印出兩個字段,其結果就是"賬號 密碼",接着,在最外圍放上一對(),便形成一個數組,第一個數組元素是賬號,第二個數組元素是密碼。
行15,若第一個數組元素爲空,則令其值爲默認的賬號。
行16,若第二個數組元素爲空,則令其值爲默認的密碼。
行20~21,分別顯示用戶輸入的賬號和密碼。
執行結果:
圖16-18 雙列輸入對話框 |
【責任編輯:雲霞 TEL:(010)68476606】
16.2 使用xdialog撰寫圖形接口程序(3)
三行輸入對話框(3inputsbox)
語法:Xdialog --3inputsbox信息內容 高 寬 字段1的名稱 字段1初始值 字段2的名稱 字段2初始值 字段3的名稱 字段3初始值
若不想各字段出現初始值,只要在上述語法中,在字段初始值的位置放置空字符串 '' 即可,例如:
Xdialog --3inputsbox信息內容 高 寬 字段1的名稱 '' 字段2的名稱 '' 字段3的名稱 ''
用途 顯示3個輸入字段,取得3種用戶輸入的數據。
用途
1 Xdialog --3inputsbox "請輸入三個數字" 16 40
"數字1" 10 "數字2" 20 "數字3" 30
執行結果:
圖16-19 三列輸入對話框 |
3個輸入值的輸出格式範例:10/20/30。
下拉列表對話框(combobox)
語法:Xdialog --combobox信息內容 高 寬 選項1選項2 ...
用途 建立下拉列表,供使用者選擇。
用例
2 Xdialog --combobox "請選擇出發的站臺" 10 40
'北京' '上海' '廣州' '成都' '西安'
執行結果:
圖16-20 下拉列表對話框 |
用戶選擇的結果,即這5個選項之一,可運用前面幾個範例中使用轉向存入臨時盤的方法來取得。
若加上選項--editable,則用戶還可以自行編輯下拉列表中各個選項的內容,範例如下:
3 Xdialog --editable --combobox "請選擇出發的站臺
" 10 40 '北京' '上海' '廣州' '成都' '西安'
重設大小範圍的對話框(rangebox)
語法:Xdialog --rangebox信息內容 高 寬 最小值 最大值 默認值
用途 建立一個可供重設大小範圍的對話框。
用例
4 Xdialog --rangebox "請選擇音量大小" 10 40 0 10 5
執行結果:
圖16-21 重設大小範圍的對話框 |
另外,Xdialog還支持2個和3個重設大小範圍滾動條的對話框。
【責任編輯:雲霞 TEL:(010)68476606】
16.2 使用xdialog撰寫圖形接口程序(4)
兩個滾動條的對話框
語法:Xdialog --2rangesbox信息內容 高 寬 名稱1最小值 最大值 默認值1名稱2最小值 最大值 默認值2
用例
1 Xdialog --2rangesbox "請調整長寬" 16 40 '長' 10 20 15 '寬' 4 12 8
執行結果:
圖16-22 兩個滾動條的對話框 |
這裏調整其長爲13、寬爲9,其輸出格式是:13/9。
3個滾動條的對話框
語法:Xdialog --3rangesbox信息內容 高 寬 名稱1最小值 最大值 默認值1名稱2最小值 最大值 默認值2名稱3最小值 最大值 默認值3
用例
2 Xdialog --3rangesbox "請調整長寬高" 20 40 '長'
10 20 15 '寬' 4 12 8 '高' 2 10 6
其輸出格式是:15/8/6。
spinbox對話框
除了rangebox,Xdialog還支持一種叫spinbox的對話框,一樣也可對某些指定量重設大小範圍。
語法:
Xdialog --spinbox信息內容 高 寬 最小值 最大值 默認值 名稱
Xdialog --2spinsbox信息內容 高 寬 最小值 最大值 默認值1名稱1最小值 最大值 默認值2名稱2
Xdialog --3spinsbox信息內容 高 寬 最小值 最大值 默認值1名稱1最小值 最大值 默認值2名稱2最小值 最大值 默認值3名稱3
這裏僅舉一例,其他用法請自行類推:
3 Xdialog --spinbox "請調整高度" 10 40 10 50 20 '釐米'
執行結果:
圖16-23 spinbox對話框 |
編輯對話框(editbox)
語法:Xdialog --editbox文本區 高 寬
用途 建立一個可編輯文本區內容的對話框。
用例
4 Xdialog --editbox '/etc/hosts' 18 55
執行結果:
圖16-24 編輯對話框(editbox) |
一樣可利用前面提到的幾個範例中的技巧,來取得編輯後的輸出內容。
Xdialog還支持幾個對話框,如tailbox、menubox、logbox、buildlist、treeview、dselect、 colorsel、fontsel、calendar等,限於篇幅的關係,就請讀者自行參考Xdialog的聯機幫助文件囉!網址如下:
5 http://xdialog.free.fr/doc/box.html