shell中的函数:
变量 条件 循环 函数 数组 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 $a
}
定义函数:
pass one two three
执行结果:
pass.sh
3
one two three
one
two
one
局部变量和全局变量:
a=1
//a是全局变量
echo $a
function a {
b=2
//这里的B并不是局部变量,而是全局变量
//如何在函数体内定义局部变量:
local a=2
local b=3
//local命令将全局变量变为局部变量
echo $b
echo $a
}
echo $b
echo $a //结果为空,因为b是在函数体内定义的
系统变量:$FUNCNAME:表示当前函数的名称
a () {
echo $FUNCNAME
}
b (){
echo $FUNCNAME
a
}
b
执行结果:
先输出b在输出a
//执行函数b的过程
b () {
echo $FUNCNAME
a () {
echo $FUNCNAME
}
a
}
b
return :
//参数返回,return语句可选的
//如果使用return语句,后面跟的值0-255;要是没有使用
则以函数最后一条命令的运行结果作为返回值
检查一下某个进程是否存在?
checkpid () {
local i
//定义了一个局部变量
for i in
∗
d
o
[
−
d
"
∗
p
r
o
c
/
* do [ -d "*proc/
∗do[−d"∗proc/i" ] && return 0
done
return 1
}
//进程存在返回0 不存在返回1
checkpid $pid1 $pid2
if [ $? = 0 ] ; then
echo " is mrunning"
fi
/proc 目录 :虚拟目录,系统内存的映射
屏蔽主机的Ping命令:
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
函数调用的几种特殊情况:
$$:shell本身的PID,就是脚本运行的当前进程ID号
$!:后台运行的最后一个进程的进程ID号
1.函数体内调用函数
2.将函数放入后台
3.递归调用函数 函数体内调用自己
fork炸弹:
.(){.|.&};.