函数定义
格式1
function fname()
{
Code Block
......
}
格式2
fname()
{
Code Block
......
}
格式3
fname() { Code Block ; } # ;必须要有{} 和代码块之间要有至少一个空格
函数调用
不带参数
function fname()
{
echo "In fname function."
}
fname # 直接使用函数名即可调用
带参数
function fname()
{
echo $0 # $0为函数名
echo $1 # $1为函数的第一个参数
echo $@ # $@为所有参数
echo $# # $#为参数的数量
}
fname a b c # arg1就是第一个参数
递归函数
function fname()
{
fname # 在定义的函数内部执行函数本身
}
Fork炸弹
:(){ :|:& };:
# 该函数会不断生成新的进程直至耗尽系统资源,可以通过修改件/etc/security/limits.conf nproc限制最大打开进程数
# :是函数名
# ()是语法中的()
# { 代表代码块开始
# :是在内部执行函数
# |是把结果发给:函数执行
# & 表示放到后台执行
# } 表示函数的代码块结束
# ;命令分隔符
# :调用刚刚定义的函数
导出函数
function demo() { echo "In demo function."; }
echo demo > demo.sh
sh demo.sh # 此时调用会报错demo not found
export -f demo
sh demo.sh # 此时调用会正常demo函数中的语句
shell 函数