bash 调用函数时不会开启新的子shell ,bash 会在现有的Shell 环境中执行该函数
1.函数的语法
1.1 function 函数名称()
{
命令区域
}
1.2 函数名称()
{
命令区域
}
1.3 function 函数名称
{
命令区域
}
2.函数的结束状态
执行函数时候,函数中最后一个命令的传回值代表函数的结束状态。执行函数,如果仅仅是遇到return
命令,就立即结束,回到调用函数的下一个命令,此时函数的传回值为0
如果rerurn 3 或其他的值,那么函数返回的值就是return 后面的值
3.函数与变量的作用范围
如果没有特别的设定变量的属性,那么,在脚本中自定义的变量为全局变量,它的作用范围在整个脚本中都有效。
在函数中使用内置的命令local,可以在设定变量为函数私有,变量在函数内才有效,比如:
i=2
getline()
{
local i
}
此处的的i 即使和外部的变量i,是完全不同的变量。
3.位置参数
位置参数的的使用 $0 代表script 文件名,$1 代表第一个位置参数,$2代表第二个。依次类推,如果超过9个位置参数,要用
${n}来表示,如${10} 代表第10个。$#代表参数的个数,$@代表所有以空白隔开的参数,$* 代表所有参数所组成的字符串。
当函数借用命令行的位置参数时,原位置参数值会被暂时保存起来,等到函数执行结束,在复原其值。
传递参数给函数的语法如下:
函数名称 参数1 参数2 参数3 ...
函数名称及各参数之间用空格符隔开。
4.命令行的位置参数
script 参数1 参数2 参数3 ... ...
用法和函数的位置参数一致
5.移动位置参数
bash 的内置命令shift 可以往前移动位置参数的值
shift n
其中,n是正整数,代表要往前移动的次数。n可以省略不写,代表移动1次。执行shift n ,${n+1}的值会放入$1.
以执行shift 命令来说(不制定次数),$2的值会放入$1,$3的值会放入$2,$4 会放入$3,依次类推。如果一直执行shift(次数>=n),最后会把所有的位置参数($1~$n)清空
6.制定位置参数的值
根据需要可以指定位置参数的值,称为重置(reset).bash 的内置命令set,可以达成这目的。par3.sh
set 61 62 63 64 65 67 68 69
for p in $@
do
((i++))
echo "第$i个位置参数 \$$i = $p" \$$i 获得变量的ID
echo "本程序命令行的参数值:$@"
# par3.sh dean tom joy
命令行的参数值不受调用函数的影响
7.取用命令行的选项和参数
在script 设计时,往往需要有命令行中取得用户的提供的选项和参数,根据不同的选项,脚本有不同的处理方式和执行
结果。选项的使用方式,可以是单一选项,也可以在选项后方加上准备作用的参数,而且,选项出现的次序并没有严格要求。
8.函数库
例如建立一个函数库叫mylib1.sh,在文件中可以写多个个函数。
在/etc 目录下建立libs 目录
. 路径/函数库文件名 或者 source 路径/函数库文件名
如果需要调用函数库文件中的函数
#!/bin/bash
source $mydir/mylib1.sh
这样在本脚本中就可以调用mylib1.sh 中的脚本
9.递归函数
bash 也支持递归函数,在函数体内,调用函数本身