目录
语句块定义成函数约等于别名,定义函数,再引用函数
封装的可重复利用的具有特定功能的代码
法一:
[function] 函数名 (){
命令序列
[return x] #使用return或者exit可以显式的结束函数
}
法二:
函数名(){
命令序列
}
直接使用函数名
- #!/bin/bash
- han(){
- echo "hello world"
- }
-
- han
return表示退出函数并返回一个退出值,脚本中可以用$?变量表示该值
函数的使用原则
函数一结束就取返回值,因为$?变量只返回执行的最后一条命令的退出状态码;
退出状态码必须是0~255,超出时值将为除以256取余
在Shell中,调用函数时可以向其传递参数。在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数…即使用位置参数来实现参数传递。
#!/bin/bash
sum () {
echo "第一个变量:" $1
echo "第二个变量:" $2
let n=$1+$2
echo $n
}
sum $2 $1先传参给sum $2 $1 此时$2 $1 有值$2=1 $1=2,再传给sum内部


使用source或者“.”来调用外部脚本,不会产生新的进程,继承当前shell环境变量,而且被调用的脚本运行结束后,它拥有的环境变量和声明变量会被当前shell保留,类似将调用脚本的内容复制过来直接执行。执行完毕后原主shell继续运行。
函数在shell脚本中仅在当前shell环境中有效
shell脚本中变量默认全局有效
将变量限定在函数内部使用local命令


函数调用自己本身的函数
- #求任意数的阶乘
- #!/bin/bash
- fact () {
- #判断传入的参数,如果是0,则直接输出1
- if [ $1 -eq 0 -o $1 -eq 1 ]
- then
- echo 1
- else
- #如果传入的参数不是1,则函数调用函数自身,传入参数计算
- echo $[$1* $(fact $[$1-1])]
- fi
- }
- fact $1
![]()
调用方式
. 绝对路径
直接调用函数库内的函数即可
注意事项
- 库文件名的后缀是任意的,但一般使用.lib
- 库文件通常没有可执行选项
- 库文件无需和脚本在同级目录,只需在脚本中引用时指定
- 第一行一般使用#!/bin/bash,输出警告信息,避免用户执行