Shell函数
函数定义
定义格式:
[ function ] funname() {
# statements;
[return value]
}
说明:
- function是定义函数的关键字,但是并不强制. 如果使用function则函数名后面括号可以省略
- 不需要定义参数列表,这同其他语言是有区别的
- 参数返回,可以显示加:return 返回值,如果不加,将以最后一条命令运行结果,作为返回值。
示例:
#!/bin/bash
function myFun(){
echo "my shell method"
}
withoutFun(){
echo "this method without function keyword"
}
function noParentheses{
echo "this method no parentheses"
return 1
}
函数调用
shell函数调用非常简单,使用函数名即可
函数名 [参数1 参数2...]
如调用上面代码中定义的函数
echo "调用函数开始"
myFun
函数应该是先定义后调用,即调用代码应是在定义代码之后
函数变量作用范围
-
函数在shell脚本中仅在当前shell环境中有效
-
变量默认全局变量
-
函数内局部变量定义使用local关键字
myfun(){ #声明一个局部变量 local i i=10 echo $i } # 同名全局变量 i=20 myfun echo $i 输出结果: 10 20
函数参数
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过$n 的形式来获取参数的值(n从1开始), 例如,$1表示第一个参数,$2表示第二个参数...
$0 表示是脚本参数,表示脚本名称
示例
#!/bin/bash
function withParams(){
echo "参数总数: $#"
echo "第一个参数: $1 "
echo "第二个参数: $2 "
echo "所有参数: $* "
}
withParams 8 9 "A" "X"
注: 参数位置超过10时,应使用${n}方式获取, 如使用$10 编译器会认为是$1
函数返回值
return表示退出函数并返回一个退出值,用 $?接收函数返回值
函数结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码 退出状态码必须是0~255,超出时值将为除以256取余
示例:
sum(){
return $[$1+$2]
}
sum 2 4
echo $?
特殊字符说明:
参数处理 | 说明 |
---|---|
$0 | 脚本运行的第一个参数,即脚本名称 |
$n | 传递给脚本或函数的参数。n 是n>=1的数字,表示第几个参数。例如,第一个参数是 $1,第二个参数是 $2。 |
$# | 传递给脚本或函数的参数个数 |
$* | 传递给脚本或函数的所有参数,使用引号"$"时表示所有参数合并为一个整体,即参数列表被合并成了一个变量 |
$$ | 脚本运行的当前进程ID号 |
$! | 后台运行的最后一个进程的ID号 |
$@ | 与$*相同,但是使用引号不同, "$@"" 仍表示所有参数,并没有合并 |
$- | 显示Shell使用的当前选项,与set命令功能相同。 |
$? | 显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误。 |