函数
函数可将一个复杂功能划分成若干模块,让程序结构更加清晰,代码重复利用率更高。
在 shell 中必须先定义函数,然后使用,而且不能独立运行,需要调用执行。函数可出现在任何位置,在代码执行时,都会被自动替换为函数代码。函数命名不应该为命令名,否则会发生冲突。
函数的定义方式
定义方式一
1 | function function_name { |
定义方式二
1 | function_name () { |
函数的生命周期
每次被调用时创建,返回时终止。在 RedHat 系列的系统中的 /etc/init.d/functions
文件中有很多系统原生的函数,可以用来参考学习。
调用函数
调用函数时直接写函数名即可调用该函数。
1 | [user1@study ~]$ cat test.sh |
函数的返回值
- 函数的返回值,可以使用
return
语句;如果不加,则将最后一条命令运行结果作为返回值。 - Shell 函数返回值只能是整数,一般用来表示函数执行成功与否,0表示成功,其他值表示失败。
- 如果 return 其他数据,比如一个字符串,往往会得到错误提示:“numeric argument required”
函数中参数的传递
在函数体中当中,可以使用 $1,$2,....$n
、$@
、$#
、$*
等引用传递给函数的位置变量;在调用函数时,在函数名后面以空白符分隔给定参数列表即可
1 | [user1@study ~]$ cat test.sh |
局部变量及作用域
使用 local VARIABLE=VALUE
的方式来定义一个局部变量,并且 local
关键字可以省略。局部变量的作用域是当前函数,不能被函数体外面的语句调用,在函数结束时被自动销毁。
1 | [user1@study ~]$ cat test.sh |
递归函数
能够调用自身的函数成为递归函数。经典的 fork 炸弹
1 | .(){.|.&};. |
说明
1 | . () |