Shell 编程3(函数)

来源:互联网 发布:淘宝旧版本4.1.2下载 编辑:程序博客网 时间:2024/05/22 01:33

1 在脚本中定义函数

(1)      使用关键字function 来定义函数。

function name(){

          ……

……

}

命名规则:都由小写字母和下划线组成,并以字母开头

                     不要使用命令作为函数名称

                     不要在函数名中使用特殊字符

                     函数名之外应该尽量体现其功能

 

2 在脚本中使用函数

  #!/bin/bash function hello(){ echo"hello world"} hello  # 直接使用即可


 

eg2

directory(){ let"filenum = 0" let"dirnum = 0"  ls echo""  forfile in $( ls ) do   if[ -d $file ]  then      let "dirnum = dirnum + 1"  else      let "filenum = filenum + 1"   fi done  echo "the number of file is $filenum" echo "the number of dirnum is $dirnum"} directory


 

3 向函数传递参数

使用位置变量$1,$2,$3等传递参数

例子1

#!/bin/bash function a(){ echo$1} a "hello world"


运行结果

Hello world

 

例子2

#!/bin/bashhalf(){ let"n = $1" let"n = n/2" echo"in function halt is $n"} let "m = $1"echo "before function halt m is$m"half $mecho "after function half m is$m"

运行结果:

anders@anders-virtual-machine:~/code/shell/function$./param1.sh 10

before function halt m is 10

in function halt is 5

after function half m is 10

 

4 函数返回值

 使用 变量来完成函数返回值

例子1

#!/bin/bashfunction a(){ d=$1}a "hello world" echo d=$d


运行结果:

anders@anders-virtual-machine:~/code/shell/function$./returnv1.sh

d=hello world

 

获取函数是否执行成功

可以使用$? 这个表示前一个命令的执行状态

 

5 返回函数的执行状态

 

手动的返回函数的执行状态,可以在函数最后使用return语句。Return 的使用方法和取值如下

 return:  将函数最后一条命令的执行状态作为其状态信息返回

 reurn0: 返回函数成功执行的信息

 reutn1: 返回函数错误的信息

 

当脚本执行到return 命令时,无论还有多少语句没有执行,脚本都会立即设置函数执行状态并且返回

 

6 函数调用函数

 

直接调用即可

 

#!/bin/bashfunction a(){ echo"a"} function b(){ echo"b"} function c(){ echo"c"} function d(){abc} d


 

7 函数文件

将众多的函数  变量放入一个单独的脚本内。

 

调用函数文件格式:  . ./***.sh

 

Eg 函数文件 func.sh

#!/bin/bashfunction a(){ echo"aa"} function b(){ echo"bb $1"}


 

调用文件 callFunc.sh

#!/bin/bash. ./s10.shab "123"

(注意:第二行:  .  ./s10.sh    具体原理是   用到的是  source 命令 即点命令  然后跟着的是  文件名,./代表当前路径)

 

运行:

anders@anders-virtual-machine:~/code/shell/function$./callFunc.sh

aa

bb hello

8 局部变量和全局变量

 

在Linux shell中可以通过local关键字来函数中声明局部变量  , 局部变量局限在函数范围内。

此外函数也可以函数外的局部变量,如果一个局部变量和一个全局变量名字相同,则在函数中局部变量会覆盖掉全局变量

#!/bin/bashtext="globalvar"#全局变量function fn(){ local text="local var"#局部变量覆盖掉全局变量 echo$text;} fn echo $text

9  函数递归

Linux Shell中可以递归调用函数,即函数可以直接或间接调用其自身。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。
                       一个函数递归调用
                             #!/bin/bash
 
                              #递归调用函数
                              foo()
                             {
                                    read y
                                    foo $y
                                    echo "$y"
                              }
 
                              #调用函数
                            foo
                            exit 0
(1)使用局部变量的递归

使用局部变量进行递归一般是针对数值运行来使用的。阶乘运算是一个使用局部变量的递归调用过程,实现了n! 的运算,其可以通过下面的公式表示:
                    n!=1           (n=0)
                    n!=n*(n-1)!      (n>=1)
按照该公式可实现对阶乘的运算,由于该阶乘运算中存在终止条件“0!=1”,所以可以使用函数递归来实现该运算。

















 

原创粉丝点击