shell 可以用户定义函数,然后在shell脚本中可以随便调用;shell中函数的定义格式如下:
[function] funname [()]
{
action;
[return int;]
}
说明:
- 1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数
- 2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值, return后跟数值n(0-255)
下面的例子定义了一个函数并进行调用:
下面定义一个带有return语句的函数:
函数返回值在调用该函数后通过 $? 来获得;
注意:所有函数在使用前必须定义,这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用;调用函数仅使用其函数名即可;
函数参数
在Shell中,调用函数时可以向其传递参数;在函数体内部,通过 $n 的形式来获取参数的值,例如,$1表示第一个参数,$2表示第二个参数...第10个参数需要使用{}
带参数的函数示例:
注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数;
另外,还有几个特殊字符用来处理参数:
数组作为函数参数
可以将数组作为一个整体传递给函数,格式如上面的例子所示,同时函数也可以返回一个数组,如下:
return 和 exit
return是语言级别的一个关键字,用于结束函数并返回一个结果,return不带参数时,则会返回函数体中最后一个命令的返回值;
由于 return 返回值的范围为0~255,所以当返回值大于255时会出错,如果将上面的 return 语句后的返回值参数去掉,结果如下:
可见,return 默认返回的是最后一条命令的状态码,同时将这个返回值赋给 $?,状态码为0表示正常退出,非0表示非正常退出;
如果要返回大于255的值,可以将函数的输出赋给变量,如下:
shell 中函数如果不显示添加 return 语句,则以最后一条语句的执行结果作为返回值,上面fun1 的最后一条语句的结果为400,所以返回值为400;
exit 是 shell 的内建命令,用于退出当前的 shell 进程,使用格式如下:
exit [<n>]
可以指定退出状态n,取值范围为0-255,一般情况下 0 表示正常退出,非0表示异常退出;状态码 n 可以不指定,默认是上一条命令的状态退出码;
局部变量和全局变量
shell中的变量默认是全局变量,不管是在shell脚本中定义的还是函数中定义的;对于函数中定义的变量,可以使用 local 关键字来将其作用域限定为 函数内,也就是局部变量;
注意,这里需要先执行函数fun1才能定义变量a,之后才能引用;如果将a 加上 local 关键字后,结果如下:
系统函数
- basename 基本语法
功能: 返回完整路径最后 / 的部分, 常用于获取文件名
basename [pathname] [suffix]
(功能描述: basename 命令会删掉所有的前缀包括最后一个(‘/’ )字符, 然后将字符串显示出来。
- 选项:
suffix 为后缀, 如果 suffix 被指定了, basename 会将 pathname 或 string 中的 suffix 去掉
- dirname 基本语法
功能: 返回完整路径最后 / 的前面的部分, 常用于返回路径部分
dirname 文件绝对路径
(功能描述: 从给定的包含绝对路径的文件名中去除文件名(非目录的部分) , 然后返回剩下的路径(目录的部分) )