建立交互式shell腳本最長用的方法就是使用菜單。提供各類選項幫助腳本用戶瞭解腳本功能。菜單會清空顯示區域,而後顯示可用的選項列表。shell
1.1建立菜單函數bash
菜單佈局函數函數
建立菜單佈局函數的第一步是決定菜單上要顯示什麼,用echo命令顯示,在顯示前先用clear命令清楚當前終端會話terminfo數據。佈局
函數例子:spa
function menu { clear echo echo -e "\t\t\tSys Admin Menu\n" #-e 選項識別換行符製表符等 echo -e "\t1. Display disk place\n" echo -e "\t2. Display logged on users\n" echo -e "\t3. Diplay memory usage\n" echo -e "\t0. Exit program\n\n" echo -en "\t\tEnter option: " #-en選項會讓顯示的一行末尾不加換行符 read -n 1 option #read -n 數字 來限定取字符的個數,這樣用戶輸入數字後,不用按會回車鍵了 }
建立菜單要執行的函數命令行
爲菜單選項建立函數,能建立簡潔方便的case命令。code
樁函數(stub function):爲尚未實現的函數所建立,樁函數內沒有任何命令,或者只有echo語句來講明函數須要作什麼。orm
樁函數: function diskspace { clear echo "This is where the diskspace command will go「 }
1.2添加菜單邏輯seo
建立邏輯將菜單選項和將要執行的函數鏈接在一塊兒,須要case命令。ip
case $option in 0) break;; 1) diskspace;; 2) whoseon;; 3) memusage;; *) clear echo "Sorry Wrong slection";; esac
整合菜單:
#!/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\t\tSys Admin Menu\n" echo -e "\t1. Display disk place\n" echo -e "\t2. Display logged on users\n" echo -e "\t3. Diplay memory usage\n" echo -e "\t0. Exit program\n\n" echo -e "\t\tEnter option: " read -n 1 option } while [ 1 ] do menu case $option in 0) break;; 1) diskspace;; 2) whoseon;; 3) memusage;; *) clear echo "Sorry Wrong slection";; esac echo -en "\n\t\tHit any key to continue" read -n 1 line done clear
1.4使用select命令建立菜單
select命令容許從單個命令行建立菜單,而後再提取輸入的並自動處理。select命令格式:
select variable in list do commands done
list參數是構成菜單的空格分隔的文本選項列表。select命令會在列表中將每一個選項做爲一個編好的選項顯示,而後爲選項顯示一個特殊的由PS3環境變量定義的提示符。
#!/bin/bash #using select in the menu function diskspace { clear df -k } function whoseon { clear who } function memusage { clear cat /proc/meminfo } PS3="Enter option: " select option in "Display disk place" "Display logged on users" "Diplay memory usage" "Exit program" # do case $option in "Exit program") #select 存儲在變量中的結果值是整個文本字符串而不是跟菜單選項相關聯的數字 break;; "Display disk place") #在case語句中須要比較文本字符串 diskspace;; "Display logged on users") whoseon;; "Diplay memory usage") memusage;; *) clear echo "Sorry Wrong slection";; esac done clear
注意:比較字符串,PS3中存儲的也是文本字符串。
caishu@lab403-1F:~/shell_script$ ./menu2 1) Display disk place 3) Diplay memory usage 2) Display logged on users 4) Exit program Enter option: 1 文件系統 1K-塊 已用 可用 已用% 掛載點 udev 4053800 4 4053796 1% /dev tmpfs 812996 1380 811616 1% /run /dev/sda4 243764520 26002332 205356584 12% / none 4 0 4 0% /sys/fs/cgroup none 5120 0 5120 0% /run/lock none 4064972 73980 3990992 2% /run/shm none 102400 276 102124 1% /run/user /dev/sda1 165173 67727 85210 45% /boot /dev/sda3 708570096 183163596 489390116 28% /home
2.使用窗口
dialog包能夠建立標準的窗口對話框。dialog命令使用命令行參數來決定生成哪一種窗口部件(widget)。在命令行上指定部件,須要使用雙破折線:dialog --widget parameters 其中widget是部件名,parameters定義了部件窗口的大小以及部件須要的文本。
dialog部件
部件 | 用法 | 描述 |
calendar | dialog --calendar parameters | 提供選擇日期的日曆 |
checklist | 顯示多個選項 | |
form | 構建一個表單 | |
fselect | dialog --fselect $目錄 height width | 能夠用fselect目錄來瀏覽文件的位置並選擇文件。 |
gauge | 顯示完成的百分比進度條 | |
infobox | 顯示一條消息但不用等待迴應 | |
inputbox | dialog --inputbox text height width 其中text是提示用戶輸入內容的文本 | 爲用戶提供一個簡單的文本框區域來輸入文本字符串,並將文本字符串的值發給STDERR,必須重定向STDERR來獲取用戶輸入 |
inputmenu | 提供一個可編輯的菜單 | |
menu | dialog --menu "menun_ame" height width totle 1"string" 2"string" 3"string" 4"string" .....其中totle是菜單項總數。 | 生成一個菜單 |
msgbox | dialog --msgbox text height width dialog --title titlename --msgbox text height width 加標題參數 |
在窗口中顯示一條簡單的消息,等待用戶單擊ok才消失 |
pause | 顯示一個進度條來顯示特定暫定時間的狀態 | |
passwordbox | 顯示一個文本框來輸入文本,但會隱藏輸入的文本 | |
passwordbox | 顯示一個帶標籤和隱藏文本輸入的表單 | |
radiolist | 提供一組菜單選項,但只能選擇其中一個 | |
tailbox | 用tail命令在滾動窗口中顯示文件的內容 | |
tailboxbg | 跟tail模式同樣,可是在後臺模式中運行 | |
textbox | dialog --textox text height width 其中text是要顯示的文件,能夠你想要顯示內容的文件如/etc/passwd | 在窗口中顯示大量信息,會生成一個滾動窗口來顯示參數中指定文件中的文本。 |
timebox | 提供一個選擇小時、分鐘和秒的窗口 | |
yesno | dialog --yesno text height width | 容許用戶回yes/no問題,在窗口底部生成2個按鈕,一個yes,一個no |
每一個部件都提供了2種輸出格式:使用STDERR;使用退出狀態碼。
若是部件返回了任何數據,好比菜單選擇,那麼dialog命令會將數據發送到STDERR。
退出狀態碼決定了用戶選擇的鈕。若是選擇yes或ok,返回0;若選擇cancel或no。返回1.
dialog選項
dialog命令中定製不少不一樣的選項,--title 參數就是其中一個選項。還有許多其餘選項,使用man dialog命令能夠查看。
3.使用圖形
KDE和GNOME桌面環境都擴展了dialog命令的想法。KDE環境中有kdialog包;GNOME環境中有gdialog包和zenity包(經常使用)。能夠用man命令查看其用法,在腳本中使用。