函数的定义和用途
函数function是由若干条shell命令组成的语句块,实现shell代码的重用和模块化编程。
函数和shell程序的异同点
它与shell程序形式上是相似的,不同的是它不是一个单独的进程,不能独立运行,而是shell程序的一部分
区别:
1.shell程序会启动一个子shell来执行
2.函数会在当前shell中运行,因此在当前shell中,函数可以对shell中的变量进行修改 ( 函数的有效范围是在当前shell )
函数的优先级高于内部命令,外部命令,别名. 函数名称如果和以上三种名称冲突,优先函数执行.
删除函数 执行unset functionname
调用函数 functioname 调用时候不要添加()
全局函数 export -f functioname
匿名函数 cmd1 || { cmd2; cmd3; } 后面的 { } 相当于匿名函数
多个脚本中复用函数
source functions(functions表示包含很多个函数的脚本文件) 或者 . functions
source /etc/rc.d/init.d/functions
函数变量类型
1.全局(环境)变量 export
当前shell和子shell有效
2.局部变量(普通变量)
只在当前shell进程有效,为执行脚本会启动专用子shell进程; 因此,本地变量的作用范围是当前shell脚本程序文件,包括脚本中的函数
3.本地变量 local
函数的生命周期;函数结束时变量被自动销毁
declare num 在函数中使用的话 相当于declare local num 会自带local的特性 declare -g num 声明为局部变量
如果函数中有局部变量,如果其名称同本地变量相同,使用局部变量
函数参数
传递参数给函数:调用函数时,在函数名后面以空白分隔给定参数列表即可;如“testfunc arg1 arg2 ...”
在函数体中当中,可使用$1, $2, ...调用这些参数;还可以使用$@, $*, $# 等特殊变量
函数返回值
return 退出函数本身 或者 return 100; 函数的返回值必须是一个数字 return 只能在函数中使用
$? 获取函数的返回值
函数有两种返回值:
函数的执行结果返回值:
(1) 使用echo等命令进行输出
(2) 函数体中调用命令的输出结果
函数的退出状态码:
(1) 默认取决于函数中执行的最后一条命令的退出状态码
(2) 自定义退出状态码,其格式为:
return 从函数中返回,用最后状态命令决定返回值
return 0 无错误返回
return 1-255 有错误返回
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1(){ return ;}
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun1
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $? [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2(){ return "aaa"; }
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun2
-bash: return: aaa: numeric argument required
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $? [root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3() { echo ; }
[root@iz2ze6e5pr6sbu9qxhzulaz ~]# fun3 [root@iz2ze6e5pr6sbu9qxhzulaz ~]# echo $?