- 将命令序列按格式写在一起
- 可方便重复使用命令序列
- Shell函数定义
[ function ] 函数名(){
命令序列
[return x]
}
ps:使用return或exit可以显示函数返回值
- 调用函数的方法
函数名 [参数1] [参数2]
例:return与echo
#!/bin/bash
#
sum(){
read -p "输入第1个数:" a
read -p "输入第2个数:" b
SUM=$[$a+$b]
echo $SUM
return 50
}
num=`sum`
echo $?
echo $num
执行一下脚本:
[root@localhost ~]# sh 11.sh
输入第1个数:20
输入第2个数:20
50
40
retrun:返回的是退出函数时的状态码
echo:返回的是函数处理的结果值
函数的作用范围
- 函数在Shell脚本中仅在当前Shell环境中有效
- Shell脚本中默认全局有效
- 将变量限定在函数内部使用local命令
- 示例:
(1)函数内部变量通过local来实现
(2)通过定义myfun函数,在其内部设置局部变量i
(3)函数内部和外部分别赋值,进行结果验证**
还是拿刚才的脚本举例:
#!/bin/bash
#
sum(){
read -p "输入第1个数:" a
read -p "输入第2个数:" b
SUM=$[$a+$b]
num=50
echo "内:$num"
echo "和:$SUM"
}
sum
echo "外:$num"
执行后结果:
[root@localhost ~]# sh 11.sh
输入第1个数:20
输入第2个数:20
内:50
和:40
外:50
现在变一下,在num=50前面加一个local:
#!/bin/bash
#
sum(){
read -p "输入第1个数:" a
read -p "输入第2个数:" b
SUM=$[$a+$b]
local num=50
echo "内:$num"
echo "和:$SUM"
}
sum
echo "外:$num"
执行结果:
[root@localhost ~]# sh 11.sh
输入第1个数:20
输入第2个数:20
内:50
和:40
外: ## 函数外已经不显示了
递归函数
- 调用自己本身的函数
示例:
function sum(){
i=`sum`
}
例:递归遍历目录(/var/log/),列出所有目录及子目录下文件
#!/bin/bash
#
list(){
for f in `ls $1`;do
if [ -d "$1/$f" ];then
echo "$2$f"
list "$1/$f" " $2"
else
echo "$2$f"
fi
done
}
list "/var/log" ""