shell中的函数
引言
shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好,放在指定位置,使用时直接调用即可。使用函数可以避免代码重复,可以将大的复杂工程分割为若干小的功能模块,代码的可读性更强。
1、shell函数的定义
方法 1.
function 函数名 {
命令序列 ...
}
方法 2.
函数名() {
命令序列 ...
}
tips:functiom 是函数的关键字,用来专门定义函数
2、函数的调用
可以在主代码区域中直接使用函数名调用函数。调用shell函数时可以给他传递参数,也可以不传递
不传递参数时,直接给出函数名即可:
函数名 ##直接函数名调用函数
如果要传递参数,多个参数之间以空格分开:
函数名 num1 num2 num3 ... ## 函数名后面跟多个参数
3、函数的返回值
return 表示退出函数并返回一个退出值,脚本中可以用$?变量显示该值
使用原则:
- 函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码
- 退出状态码必须是0~255 超出时值将为除以256取余
#!/bin/bash
function db1 {
read -p "请输入:" value
return $[$value * 2]
}
db1
echo $?
db1() {
read -p "请输入:" value
echo $[$value * 2]
}
result=`db1`
echo $result
4、函数的传参
和其他编程语言不同的是,shell函数在定义时不能指明参数,但在调用时却可以传递参数,并且给它传递什么参数它就接收什么参数
函数参数是shell位置参数的一种,在函数内部可以使用$n
来接收
例如:2表示第二个参数,以此类推
除了$n
,还有另外几个比较重要的变量:
$#
可以获取传递参数的个数;$@
或$*
可以一次性获取所有的参数$?
可以获取函数的退出状态(返回值)
#!/bin/bash
sum1() {
sum=$[$1 + $2]
echo $sum
}
read -p "输入第一个参数:" first
read -p "输入第二个参数:" second
sum1 $first $second
sum2() {
sum=$[$1 + $2]
echo $sum
}
sum2 $1 $2
5、函数变量的作用范围
函数在shell脚本中仅在当前shell环境中有效,shell脚本中变量默认全局有效,将变量限定函数内部使用local命令
myfun() {
local i
i=8
echo $i
}
i=9
myfun
echo $i
6、函数的递归
在函数内调用自己本身的函数,循环使用的过程。
6.1、阶乘:函数递归的引用
6.2、递归显示某个目录下所有内容
7、函数库的理解
可以事先创建一个函数库文件,在里面定义各种常用的函数,然后可以在别的shell脚本中直接引用这个函数库文件,使得不需要再次定义函数即可直接调用函数