1. trap (用以捕捉信號)
trap 'action' signal1 signal2 signalN ##set traps
trap - signal1 signal2 signalN ##clear trapspython
2. 定義函數
e.g.
root@localhost :/home/James/mypro/shell/TryOut# test() {
> echo "This is a test function"
> }
root@localhost :/home/James/mypro/shell/TryOut# test
This is a test functionshell
3. Subshell
當運行腳本時,shell會建立一個新進程,叫作subshell,腳本會在這個subshell中執行。
任何用()括起來的命令,都會在subshell中執行。bash
4. 導出函數
export -f func函數
5. .(dot) command 和 exec
用.(dot) command執行腳本,那麼腳本其實是在當前shell中執行,而非subshell。
用exec來執行命令或者腳本,那麼腳本其實是在當前shell中執行。
一般,能夠用.(dot)命令來設置環境變量和導入經常使用的函數定義。 . /path/to/my/lib/func.shoop
6. compond command (組合命令)
( command1; command2 )
{ command2; command2; }
在()中的命令是在subshell中運行的。
( command1; command2; command3 ) > output.txt會將command{1,2,3}的輸出都重定向到output.txt
在{}中的命令會在當前shell中運行。ui
7. 用declare -f來查看全部定義的函數。
用unset -f func能夠取消函數定義.net
8. 定義函數
func-name() {
xxx
}進程
function func-name {
xxx
}ip
最好用第一種方法,由於它是POSIX兼容的。get
9. function的變量
有一點須要特別注意,shell script和c語言、python等語言不通,其函數中的變量,默認是全局變量!!!!(我勒個擦。。。這是在鬧哪樣啊。。。)
若是要建立局部變量,須要使用local命令. local varName 或者 local var=value
10. funtion的return
return N命令,終止一個function,而且傳回return值N。
一個函數是不能返回string類型的值的,可是,咱們依然能夠經過function來傳遞這個值。以下:
func() {
....
...
echo XXXX
}
out=$(func)
這時,就把func的輸出XXXX存到out變量中。
11. Menu Driver Script
=========================================================================
#!/bin/bash
#A menu driven script sample template
##---------------------------------
# step1: define variables
##---------------------------------
RED='\033[0;41;30m'
STD='\033[0;0;39m'
##---------------------------------
# step2: user defined functions
##---------------------------------
pause() {
read -p "Press [Enter] Key to continue ... " fackEnterKey
}
func1() {
echo "func1 called"
pause
}
func2() {
echo "func2 called"
pause
}
#function to display menu
show_menus() {
clear
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo " M A I N - M E N U "
echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
echo "1. Call func1"
echo "2. Call func2"
echo "3. Exit"
}
#read input from key board and take an action
read_options() {
local choice
read -p "Enter choice [1 - 3] " choice
case $choice in
1) func1 ;;
2) func2 ;;
3) exit 0 ;;
*) echo -e "${RED}Error...${STD}" && sleep 1
esac
}
##---------------------------------
# step3: trap Ctrl-c, Ctrl-z, and quit signals
##---------------------------------
trap '' SIGINT SIGSTP SIGQUIT
##---------------------------------
# step4: main logic -- infinite loop
##---------------------------------
while true; do
show_menus
read_options
done
============================================================================================
12. Dialog Boxes
判斷dialog是否已經安裝
ret=$(which dialog); if [ -z $ret ]; then echo "dialog not installed"; fi
安裝dialog
apt-get install dialog
"Hello World!"示例
dialog --title "Hello" --msgbox 'Hello World!' 6 20
只要終端支持控制符,它就支持dialog!Good!(好高的移植性啊!)