一、函数的定义与作用
1.将命令序列按格式写在一起
2.可方便重复使用命令数列
写法
[ function ] 函数名 (){
命令序列
[ return x ]
}
示例
示例1:funtion name {
command1
command2
…
}
示例2:name () {
command1
command2
…
}
取消函数:unset -f +函数名
二、调用函数的方法
函数名 [参数1] [参数2]
传参
1.和其他编程语言不同的是,shell函数定义时不能指明参数,但是调用时可以接受参数,传给什么参数,就接受什么参数。
2.函数参数是位置参数的一种,在函数内部使用$n来接受,如:
3.$1表示第一个参数,$2表示第二个参数。
还有几个重要的变量:
$# 获取传递的参数个数
@
或
@或
@或* 获取所有的参数
函数的返回值
示例:
#!/bin/bash
checkpid () { #定义一个函数,判断给定的pid,对应的进程是否在运行
local i
for i in
∗
d
o
i
f
[
[
−
d
"
/
p
r
o
c
/
* do if [[ -d "/proc/
∗doif[[−d"/proc/" ]];then #在Linux中,如果进程正在运行,则在/proc目录下会存在一个以进程号命名的子目录
return 0 #如果进程在运行则返回0,函数不再向下进行,并且返回到shell脚本中调用函数位置的下一个命令
fi
done
return 1 #如果最终没有检测到在运行的进程,函数结束,返回1
}
for a in $ #遍历用户给定的位置参数
do
checkpid $a #调用checkpid函数,检查对应的进程是否在运行
if [ $? -eq 0 ];then #根据函数的返回值做判断
echo “the pid $a existed”
else
echo "the pid $a not existed "
fi
done
从函数库文件中调用
1.定义一个函数库
vim myfuncs.sh
#!/bin/bash
jiafa () {
echo $[$1 + $2] #定义一个加法
}
chengfa () { #定义一个乘法
echo $[$1 * $2]
}
jianfa () { #定义一个减法
echo $[$1 - $2]
}
chufa () { #定义一个除法
if [$2 -ne 0 ];then
echo $[$1 / $2]
else
echo "$2不能为0"
fi
}
2.调用函数库
#!/bin/bash
. myfuncs.sh
value1=10
value2=5
result1=`jiafa $value1 $value2`
result2=`chengfa $value1 $value2`
result3=`jianfa $value1 $value2`
result4=`chufa $value1 $value2`
echo "加法结果为:$result1"
echo "乘法结果为:$result2"
echo "减法结果为:$result3"
echo "除法结果为:$result4"
~
输出结果为
[root@server1 ~]# bash test.sh
加法结果为:15
乘法结果为:50
减法结果为:5
除法结果为:2
三、函数作用的范围
1.函数在shell脚本中仅在当前shell环境中有效
2.shell脚本中变量默认全局有效
3.将变量限定函数内部使用local命令
4.在函数中定义本地变量,只在函数内部生效:
使用local命令可以在函数内部定义变量,且只在函数内部生效