这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战
前言
本文对shell中函数的定义、使用、返回值等作一个示例说明.
函数
定义
bash shell函数的定义需要使用function来声明,格式如下:
function function_name
{
....相关代码/命令
}
上面的写法是在bash shell中,其它shell可能不支持,比如dash就不能识别function。
除了上面那种写法,还有另一种写法:
function_name()
{
...相关代码/命令
}
在函数名后面加一对英文括号()来声明(这个在bash和dash通用,其它的脚本没用过)。
function_name是函数名,必须是唯一的。函数需要先定义后使用。
使用
使用的时候,就像执行一个命令一样,调用函数名即可(不要像其它语言如c一样加括号)。示例如下:
1 | bash复制代码#! /bin/bash |
执行结果如下:
函数名重复
上面函数定义提到函数名必须唯一,如果不唯一呢,作个验证,将上面的示例代码改下,两个函数名改成一样:hello,如下:
1 | bash复制代码#! /bin/bash |
看下执行结果:
重名的话,后面定义的函数把前面的定义覆盖了
函数参数用法
即使函数要传递参数,函数的定义还是上面定义的格式。调用函数时想要传递参数,用法就和执行脚本一样,在调用函数后以空格分隔设置参数,如下:
function_name arg1 arg2 arg3 …
如果想要在函数体内获得参数值,使用位置变量获得。
示例如下:
1 | bash复制代码#! /bin/bash |
注意一下,这里$0的值是执行的脚本的名字,可不是调用的函数名。获取3个参数,但是我只传递了两个,那个后面的就是空了,执行结果如下:
注意一下,虽然脚本第一行我声明的#!使用bash来解释,但是执行的时候,我是直接使用bash解释执行的,也就是说#!声明不生效的,这是为了$0可以获得执行的当前脚本的名字。
函数返回值
函数的返回值需要注意以下3点:
- 函数的返回值可以使用$?获取,来表示函数的调用状态:成功/失败。默认返回值情况下:0表示成功,非0表示失败,就像命令一样,如下:
1 | bash复制代码#! /bin/bash |
执行结果:
- 使用return返回特定的状态码,但是这个值必须在0-255之间,如下:
1 | bash复制代码#! /bin/bash |
执行结果:
不在0-255的用其它值代替。
- 如果这个返回值不是一个数字,而我们用$?获取这个结果,如下:
1 | bash复制代码#! /bin/bash |
执行结果:
调用失败,返回值必须是数字类型
本文转载自: 掘金