Linux Shell學習(5)

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!(好高的移植性啊!)

相關文章
相關標籤/搜索