十三、圖形化桌面環境指令碼程式設計
建立選單佈局
echo -e選項可以輸出製表符和換行符
echo -en選項會去掉末尾換行符,這樣游標會一直在行尾等待使用者輸入。
然後使用read -n 1 option限制只讀取第一個字元
[root@tzPC 18Unit]# cat test1.sh #!/bin/bash clear echo echo -e "\t\ttSys Admin Menu\n" echo -e "\t1. Display disk space" echo -e "\t2. Display logged on users" echo -e "\t3. Display memory usage" echo -e "\t0. Exit menu\n\n" echo -en "\t\tEnter option:" read -n 1 option
這樣選單佈局執行的結果是
建立選單函式
為每個選單選項都建立獨立的函式。
可以為還沒有實現功能的函式建立一個樁函式,說明這個函式的用途。
function diskspace { clear echo "This is where the diskspace commands will go" }
可以將選單佈局本身寫入函式
function menu { clear echo echo -e "\t\ttSys Admin Menu\n" echo -e "\t1. Display disk space" echo -e "\t2. Display logged on users" echo -e "\t3. Display memory usage" echo -e "\t0. Exit menu\n\n" echo -en "\t\tEnter option:" read -n 1 option }
新增選單邏輯
使用case命令處理命令列引數
menu #先列印選單佈局 case $option in 0) break ;; 1) diskpace ;;2) whoseon ;; 3) memusage ;; *) clear echo "Sorry, wrong selection" ;; esac
組後將各個部分整合成一個指令碼
[root@tzPC 18Unit]# cat test1.sh #!/bin/bash #simple script menu function diskspace { clear df -k } function whoseon { clear who } function memusage { clear cat /proc/meminfo } function menu { clear echo echo -e "\t\ttSys Admin Menu\n" echo -e "\t1. Display disk space" echo -e "\t2. Display logged on users" echo -e "\t3. Display memory usage" echo -e "\t0. Exit menu\n\n" echo -en "\t\tEnter option:" read -n 1 option } while [ 1 ] #一直迴圈選單 do menu #使用menu函式列印選單 case $option in 0) break ;; 1) diskspace ;; 2) whoseon ;; 3) memusage ;; *) clear echo "Sorry, wrong selection" ;; esac echo -en "\n\n\t\t\tHit any key to continue" read -n 1 line done clear
這個指令碼很炫,可以自己寫一下試一下。
使用select命令寫選單佈局
語法格式
select variable in list do commands done
lis引數是由空格分隔的文字選項列表,select會將每個列表前加上一個編號。
將上面的指令碼略微改動
[root@tzPC 18Unit]# cat test2.sh #!/bin/bash #simple script menu function diskspace { clear df -k } function whoseon { clear who } function memusage { clear cat /proc/meminfo } PS3="Enter option:" select option in "Display disk space" "Display logged on users" "Display memory usage" "Exit program" do case $option in "Exit program") break ;; "Display disk space") diskspace ;; "Display logged on users") whoseon ;; "Display memory usage") memusage ;; *) clear echo "Sorry, wrong selection" ;; esac done clear
注意上面的PS3變數
PS3 是Prompt String 3的縮寫,它是Linux/Unix下的一個用於控制select命令建立的選單提示資訊的環境變數,如果不寫那麼提示語句的位置會變成?符號
製作視窗
dialog包可以建立標準的視窗對話方塊。
dialog命令使用命令列引數來決定生成哪種視窗部件。
dialog部件引數在書P384,太多我不想打,哈哈
語法格式
dialog --widget parameters
其中widget為部件名
parameters定義視窗的大小以及部件需要的文字
每個部件輸出方式
- 使用STDERR檔案描述符
- 使用退出狀態碼
通過dialog命令的退出狀態碼確定使用者選擇的按鈕
dialog命令的退出狀態碼為0,說明使用者選擇了yes按鈕
退出狀態碼為1,使用者選擇的no按鈕
狀態碼值可用$?變數確定
部件返回的資料會發送到STDERR檔案描述符可通過重定向到檔案或者其他檔案描述符獲知
[root@tzPC 18Unit]# dialog --inputbox "Enter your age:" 10 20 2> age.txt
可以重定向到檔案看到值20,並且沒有換行符
[root@tzPC 18Unit]# cat age.txt 20[root@tzPC 18Unit]#
msgbox部件
在視窗顯示一條訊息,點選OK才會消失
語法格式
dialog --msgbox text height width
--title引數在視窗頂部寫一個標題
[root@tzPC 18Unit]# dialog --title Testing --msgbox "This is a test" 10 20
yesno部件
擴充套件了msgbox部件的功能,多了yes跟no按鈕
[root@tzPC 18Unit]# dialog --title "Please answer" --yesno "Is this thing on?" 10 20
此時如果選擇了yes退出碼就為0,選擇no退出碼為1
[root@tzPC 18Unit]# echo $? 0
inputbox部件
多一個文字框用來輸入文字,輸入的文字會發送給STDERR,需要重定向才能獲取文字框裡的值。
上面的例子寫過。