shell函数

shell函数

定义函数的两种方式

function name{            name(){

    commands                    commands

}                                    }

首先,shell中的后定义的同名函数将会直接覆盖之前函数的定义,而且没有任何提示。因此在编程过程中应该留意保证函数名的唯一性。

第二,函数的返回值可以使用 return 或者 $? 来获取但其限制了返回值必须在0~255之间,而且必须在函数返回后马上通过 $? 来读取,因此通常通过 echo 和 value=`function` 的方式来获取返回值。

而针对脚本内变量的使用,由于shell规定所有在脚本内定义的变量都具有全局属性,因此变量在脚本内通用(不过,参数彼此独立,必须在调用函数时指定才能正确传递)。如果需要定义函数内的局部变量可以使用 local 加以申明。

下面以数组变量和递归函数的两个例子来具体使用函数。

shell函数

递归函数

shell函数

shell函数

这里首先在加载脚本所用函数时,由于直接运行对应脚本将自动启动一个子shell进行运行而造成源环境函数依然无法使用,此时必须使用 source 或者 . 来执行命令,其会在当前shell上下文中执行之后的命令。其次,包含factorial函数的文件不需要可执行权限,且不用声明 #!/bin/bash

最后,如果希望某些函数能够在之后的shell中都能被使用,像其他语言的库函数一样,可以将其加入到 .bashrc 文件中。当然也可以安装一些库,比如 GNU shtool 库,来实现shell优化。