shell腳本編程-函數

 變量、條件、循環、函數、數組、sed、awk

function --> 函數

語法格式:
//函數名
function_name () {
//函數體,在函數中執行的命令行
commands…
//參數返回,return語句可選的
//如果使用return語句,後面跟的值0-255;
//如果未使用,則以函數的最後一條命令的運行結果作爲返回值。
return int :
}

function_name  {
    commands...
}

向函數中傳遞參數:
位置變量:
$0 :表示當前腳本的文件名
$# :顯示一共有多少個參數
$@ :顯示所有的參數
$1 :表示第一個參數
$2 :表示第二個參數

調用函數:
pass 函數名 one two three

執行結果:
pass.sh
3
one two three
one
two
one

局部變量和全局變量:

    a=1
        //全局變量
    function a {
    b=2
    //這裏的b並不是局部變量,而是全局變量
    //如何在函數體內定義局部變量:
   local   a=2
   local   b=3
   //local命令  將全局變量變爲局部變量
    echo $b
    echo $a

}
a
echo $a
echo $b //輸出結果爲空,因爲b是在函數體內定義的

系統變量:$FUNCNAME:表示當前函數的名稱

Tom(){
echo $FUNCNAME
}
Jerry ( ) {
echo $FUNCNAME
Tom
}
Jerry

執行結果:
Jerry
Tom

//執行b函數的過程:
b ( ) {
echo $FUNCNAME
a ( ) {
echo $FUNCNAME
}
a
}
b

return:
//如果使用return語句,後面跟的值0-255;
//如果未使用,則以函數的最後一條命令的運行結果作爲返回值。

 檢查一下某個進程是否存在?
 checkpid ( ) {
local   i
            //定義了局部變量
            
           for  i  in  $*
           do
    [ -d "/proc/$i" ] && return 0
done

return 1
   }
//進程存在返回0  不存在返回1
 checkpid   $pid1   $pid2
 if [ $? = 0 ] ;then
echo "is running"
 else
echo "not running"
 fi

/proc 目錄 :虛擬目錄,系統內存的映射
屏蔽主機的Ping命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

函數調用的幾種特殊情況:
$$ : shell本身的PID,就是腳本運行的當前進程ID號
$! :後臺運行的最後一個進程的進程ID號
1.函數體中調用其他函數
2.將函數放入後臺
3.遞歸調用函數函數體內調用自己

fork炸彈: .(){.|.&};.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章