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炸弹: .(){.|.&};.

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