時間:2017年12月04日星期一
說明:本文部份內容均摘取自書籍《Linux命令行與shell腳本編程大全》,版權歸原做者全部。《Linux命令行與shell腳本編程大全》(第三版)第十八章學習總結shell
本章內容編程
建立交互式shell腳本最經常使用的方法是使用菜單,shell腳本菜單的核心是case命令,case命令會根據用戶在菜單上的選擇來執行特定命令。bash
經常使用命令函數
clear
清理出如今屏幕上的文本佈局
echo -e
在echo命令中輸出格式化的字符串,方便菜單項佈局學習
echo -en
輸出指定格式化字符串,但不會換行,光標在末尾等待用戶輸入this
read -n 1
使用read命令-n選項來限制自讀取一個字符spa
簡單示例命令行
clear echo echo -e "\t\t\tSys Admin Menu\n" echo -e "\t1. Display disk space" echo -e "\t2. Display logged on users" echo -e "\t3. Display memory usage" echo -e "\t4. Exit menu\n\n" echo -en "\t\tEnter option: " read -n 1 option
簡單示例code
function diskspace { clear echo "This is where the diskspace commands will go" } function menu { clear echo echo -e "\t\t\tSys Admin Menu\n" echo -e "\t1. Display disk space" echo -e "\t2. Display logged on users" echo -e "\t3. Display memory usage" echo -e "\t4. Exit menu\n\n" echo -en "\t\tEnter option: " read -n 1 option }
簡單示例
menu case $option in 0) break ;; 1) diskspace ;; 2) whoseon ;; 3) memusage ;; *) clear echo "Sorry, wrong selection";; esac
完整例子
編寫menu1腳本
#!/bin/bash function diskspace { clear df -k } function whoseon { clear who } function memusagee { clear cat /proc/meminfo } function menu { clear echo echo -e "\t\t\tSys 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 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 variable in list do commands done
命令說明:
編寫smenu1腳本
#!/bin/bash function diskspace { clear df -k } function whoseon { clear who } function memusagee { 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
dialog命令使用命令行參數來決定生成哪一種窗口部件
安裝dialog包以及須要的庫
sudo apt-get install dialog
dialog部件
使用格式
dialog –widget parameters
1.msgbox部件
使用說明
dialog –title Testing –msgbox text height width
實例
dialog --title Testing --msgbox "This is a test" 10 20
2.yesno部件
使用說明
實例
dialog --title "Please answer" --yesno "Is this thing on?" 10 20
3.inputbox部件
使用說明
實例
dialog --inputbox "Enter your age: " 10 20 2>age.txt
4.textbox部件
使用說明
實例
dialog --textbox /etc/passwd 15 45
5.menu部件
使用說明
實例
dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 4 "Exit" 2>test.txt
6.fselect部件
使用說明
實例
dialog --title "Select a file" --fselect $HOME/ 10 50 2>file.txt
若是要在腳本中使用dialog命令,則必須遵照如下規範
使用dialog部件來建立系統管理菜單
編寫menu3腳本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { dialog --textbox $temp1 20 60 } function whoseon { who > $temp1 dialog --textbox $temp1 20 50 } function memusage { cat /proc/meminfo > $temp1 dialog --textbox $temp1 20 50 } while [ 1 ] do dialog --menu "Sys Admin Menu" 20 30 10 1 "Display disk space" 2 "Display users" 3 "Display memory usage" 0 "Exit" 2> $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in 1) diskspace ;; 2) whoseon ;; 3) memusage ;; 0) break ;; *) dialog --msgbox "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null
1.kdialog部件
使用說明
格式:
kdialog display-options window-options arguments
實例:
kdialog --checklist "Items I need" 1 "Toothbrush" on 2 "Toothpaste" off 3 "Hair brush" on 4 "Deodorant" off 5 "Slippers" off
kdialog窗口選項
2.使用kdialog
使用kdialog建立系統管理菜單
編寫menu4腳本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { df -k > $temp1 kdialog --textbox $temp1 1000 10 } function whoseon { who > $temp1 kdialog --textbox $temp1 500 10 } function memusage { cat /proc/meminfo > $temp1 kdialog --textbox $temp1 300 500 } while [ 1 ] do kdialog --menu "Sys Admin Menu" "1" "Display disk space" "2" "Display users" "3" "Display memory usage" "0" "Exit" > $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in 1) diskspace ;; 2) whoseon ;; 3) memusage ;; 0) break ;; *) kdialog --msgbox "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null
GNOME圖形化環境支持兩種流行的可生成標準窗口的包
1.zenity
zenity窗口部件
2.在腳本中使用zenity
編寫menu5腳本
#!/bin/bash temp1=$(mktemp -t test1.XXXXXX) temp2=$(mktemp -t test2.XXXXXX) function diskspace { df -k > $temp1 zenity --text-info --title "Disk space" --filename=$temp1 --width 750 --height 10 } function whoseon { who > $temp1 zenity --text-info --title "Logged in users" --filename=$temp1 --width 500 --height 10 } function memusage { cat /proc/meminfo > $temp1 zenity --text-info --title "Memory usage" --filename=$temp1 --width 300 --height 500 } while [ 1 ] do zenity --list --radiolist --title "Sys Admin Menu" --column "Select" --column "Menu Item" FALSE "Display diskspace" FALSE "Display users" FALSE "Display memory usage" FALSE "Exit" > $temp2 if [ $? -eq 1 ] then break fi selection=$(cat $temp2) case $selection in "Display diskspace") diskspace ;; "Display users") whoseon ;; "Display memory usage") memusage ;; Exit) break ;; *) zenity --info "Sorry, invalid selection" 10 30 esac done rm -f $temp1 2> /dev/null rm -f $temp2 2> /dev/null
本章主要講解了如何在shell腳本中建立菜單以及在圖形化環境中編寫交互式腳本