書-Linux命令行與shell腳本編程大全(第3版)
●視窗製作-dialog
○dialog-msgbox
●dialog-inputbox
○dialog-yesno
●dialog-textbox
○dialog-menu
●dialog-fselect
○實例
視窗製作-dialog
一種可以在命令行中創建標準的視窗。
詳細的訊息可以用man來看。
指令:man dialog
dialog-msgbox
指令: dialog –msgbox “hello” 10 20 //text height width
dialog-inputbox
指令: dialog –inputbox “hello” 10 20 //text height width
指令: dialog –inputbox “hello” 10 20 2>abc //把輸入的值輸出到abc這個文件中。
dialog-yesno
指令:dialog --title “question” --yesno “is true or false?”
dialog-textbox
指令:dialog --title “question” --textbox /etc/passwd 15 45
dialog-menu
指令:dialog --menu 10 20 5 1 “A” 2 “B” 3 “C”
10:weight
20:hight
5:一次顯示的項目數
dialog-fselect
指令:dialog --title “Select file” --fselect $HOME/ 10 50
實例
跟上一篇一樣,只不過把顯示的方式都用這種來用。
菜單樣子:
我們來一行一行慢慢的做出來,有完整的程式碼,程式碼底下有說明。
#!bin/bash
function display {
df -k>$temp
dialog --textbox $temp 20 60
}
function location {
pwd>$temp
dialog --textbox $temp 20 60
}
function name {
who>$temp
dialog --textbox $temp 20 60
}
temp=$(mktemp -t test.XXX)
temp2=$(mktemp -t test2.XXX)
while [ 1 ]
do
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display location" 3 "Display name" 0 "Exit" 2>$temp2
if [ $? -eq 1 ]
then
break
fi
select=$(cat $temp2)
case $select in
0)
break;;
1)
display;;
2)
location;;
3)
name;;
*)
dialog --msgbox "sorry , invalid selection" 10 30
esac
done
rm -rf $temp 2> /dev/null
rm -rf $temp2 2>/dev/null
方法裡有兩行,第一行是把df -k 、who 、pwd等指令的結果定向給temp,第二行就是顯示結果。
mktemp的功用是把X號變成隨機數,這樣就不會重複(詳細的內容可以去目錄找找看)
無限迴圈裡用dialog的menu把結果定向給temp2,if判斷式的作用是如果選擇Cancel時跳出。
這就是case判斷式,上一行把temp2的內容給select。
定義函數等待呼叫。
把這些文件刪除。
結果:
這樣子就有感覺了。