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 也支持递归函数,在函数体内,调用函数本身