5.1 函数
格式:
func() {
command
}
function 关键字可写,也可不写。
#!/bin/bash
func() {
echo "This is a function."
}
func
# bash test.sh
This is a function.
Shell 函数很简单,函数名后跟双括号,再跟双大括号。通过函数名直接调用,不加小括号。
#!/bin/bash
func() {
VAR=$((1+1))
return $VAR
echo "This is a function."
}
func
echo $?
# bash test.sh
2
return 在函数中定义状态返回值,返回并终止函数,但返回的只能是 0-255 的数字,类似于 exit。
#!/bin/bash
func() {
echo "Hello $1"
}
func world
# bash test.sh
Hello world
通过 Shell 位置参数给函数传参。
函数也支持递归调用,也就是自己调用自己。
#!/bin/bash
test() {
echo $1
sleep 1
test hello
}
test
执行会一直在调用本身打印 hello,这就形成了闭环。
像经典的 fork 炸弹就是函数递归调用:
:(){
:|:&
};
: 或 .(){
.|.&
};.
这样看起来不好理解,我们更改下格式:
:() {
:|:&
};
:
再易读一点:
bomb()
{
bomb|bom
b&
};
bomb
分析下:
:(){ } 定义一个函数,函数名是冒号。
: 调用自身函数
| 管道符
: 再一次递归调用自身函数
:|: 表示每次调用函数":"的时候就会生成两份拷贝。
& 放到后台
; 分号是继续执行下一个命令,可以理解为换行。
: 最后一个冒号是调用函数。
因此不断生成新进程,直到系统资源崩溃。
一般递归函数用的也少,了解下即可!
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Eternal Night
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果