Shell 函数
Shell 脚本中, 可以自定义函数, 但是函数的功能有限. 函数可以提高代码的重用性.
- 函数在使用之前必须先定义
- 函数返回值只能是数字 [0~255]
- 函数中定义的变量也是全局变量, 在函数外依然可用
1. 函数定义
shell 中函数的定义比较灵活, 怎么写都行. 关键字function , () , return 语句都是可以省略的
[function] func_name [()] {
# 代码块儿
# 返回值
[ return int]
}
2. 函数调用
2.1 无返回值调用
函数调用比较简单, 直接输入函数名称就好了, 如果传参数的话, 直接在后面跟要传入的参数就好了
- 无参调用: func_name
- 有参调用: func_name arg1 arg2 arg3 ...
2.2 获取返回值
shell 中的函数只能返回0~255 直接的一个数字, 这个返回值保存在$? 变量中. 要获取函数的返回值, 必须在函数调用之后立刻获取$?的值, 因为$? 是预定义变量,用来记录上一条语句执行的结果的, 如果在调用函数之后, 有执行了其它语句, 那么$? 中记录的就不再是函数返回的结果了.
func_name
result=$?
3. 函数内获取传参
上面说了, 函数调用可以是无参调用, 也可以是有参调用, 那么在函数中如何获取传入的参数呢? 在函数中获取参数和脚本参数时一样的. 详情可参考Sehll 变量中对脚本变量的详细讲解
变量名 | 变量含义 |
---|---|
$# | 代表传入的参数格式 |
$* | 代表传入的所有参数, 把所有传入的参数当做是一个字符串变量 |
$@ | 代表传入的所有参数, 把所有传入的参数当做一个数组 |
$n | n为数字,从1开始,表示传入的第几个参数,当超过9个参数时,需要用${n} |
$0 | 命令本身 |
3. 示例程序
# 函数定义:
sayHello(){
# 方法内定义的变量也是全局变量
hello=Hello
# 获取传入参数列表
for name in $@
do
echo "$hello,$name"
done
# 函数返回
return 1
}
#调用函数, 获取函数返回值
sayHello zhangsan lisi wangwu
# 获取函数返回值, 获取完之后, $? 立刻会发生变化
result=$?
echo "result:$result, \$?:$?"
# 方法中定义的变量, 方法外也可以获取
echo "hello:$hello"
测试输出
[admin@localhost shell]$ ./function.sh
Hello,zhangsan
Hello,lisi
Hello,wangwu
result:1, $?:0
hello:Hello
[admin@localhost shell]$