shell脚本编程-函数

shell脚本编程-函数
变量、条件、循环、函数、数组、sed、awk

function --> 函数

语法格式:
//函数名
function_name () {
//函数体,在函数中执行的命令行
commands…
//参数返回,return语句可选的
//如果使用return语句,后面跟的值0-255;
//如果未使用,则以函数的最后一条命令的运行结果作为返回值。
return int :
}

function_name  {
    commands...
}

向函数中传递参數:
位置变量:
$0 :表示当前脚本的文件名
$# :显示一共有多少个参数
$@ :显示所有的参数
$1 :表示第一个参数
$2 :表示第二个参数

pass () {
a=$1
echo $0
echo $#
echo $1
echo $2
echo $@

}

调用函数:
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是在函数体内定义的

vim a. sh

cat a. sh

#!/bin/bash
a=1
b=5
function a {
b=2
echo $a
echo $b
}
a
echo $a
echo $b

#!/bin/bash
a=1
b=5
function a {
a=3
b=2
echo $a
echo $b
}
a
echo $a
echo $b

#sh a.sh
3
2
3
2

#!/bin/bash
a=1
b=5
function a {
local a=3
local b=2
echo $a
echo $b
}
a
echo $a
echo $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 d o [ d " p r o c / * do [ -d "*proc/ i" ] && return 0
done
return 1
}
//进程存在返回0 不存在返回1
checkpid $pid1 p i d 2 i f [ 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炸弹:
.(){.|.&};.

发布了138 篇原创文章 · 获赞 149 · 访问量 8442

猜你喜欢

转载自blog.csdn.net/weixin_44799645/article/details/104960717