Bash支持函数,如何去定义和使用的
function fname(){
statements;
}
或者
fname()
{
statememts
}
在使用方面,可以直接使用函数名来调用一个函数
$frame
也可以直接函数名
$frame arg1 arg2 传递参数
接下来我们看一个函数 frame()
frame(){
ehco $1 ,$2; 访问参数 1 2
echo “$@”; 以列表的方式一次性打印所有的参数
echo “$*”; 类似@,参数作为单个实体
return 0; 返回值
}
从参数可以直接传递给脚本并通过
script:$0(脚本名)访问
$@ 被扩展为 $1 $2 $3
$* 被扩展为$1c$2c$3
所以$@常被使用
还有就是
Shell中的函数,一般支持递归
比如 F(){
echo $1;
F hello;
sleep 1;
}
导致不断的递归调用自己,不断的生成进程,最终导致服务爆满
这个可以通过修改配置文件 /etc/security/limits.conf来限制生成最大进程数从而避免挤爆了
导出函数
将函数像是环境变量一样的用export 导出,这样,函数的作用域就可以扩展到了子进程之中了
export -f fname
读取返回值
我们获取到函数的方式可以如下
function name;
echo $?;
给出命令cmd的返回值
我们可以利用返回值的校验,将其检测是否正常执行流程结束
#!/bin/bash
function test(){ return 0; } test if [ $? -eq 0 ]; then echo “test is already successfully” else echo “test isnt successfully” fi |
命令传递参数
命令的参数可以以不同的格式进行传递,假设-p -v是可选的选项 -k NO是另一个可以接受数字的选项,同时这个命令还接受一个文件名作为参数,那么其执行方式很多,包含以下几种
command -p -v -k 1 file
command -pv -k 1 file
command -vpk 1 file
command file -pvk 1