文章目录
- 前言
- 函数定义
- 处理函数参数
- 通过getopts接收参数
前言
函数是编程语言中最重要的部分之一,虽然在shell脚本中并不是必须的,但是函数可以提高代码的复用性和可读性,当我们编写稍微复杂的脚本时,函数就是一个好帮手,否则我们的脚本可能就又臭又长,过一段时间自己都不认得了。
接下来我们就一起看看在shell中应该怎么定义和使用函数。
函数定义
首先函数的定义语法如下:
# function 关键字
# helloWorld 函数名
function helloWorld(){echo "hello world!"
}#函数调用
helloWorld
注意事项:
- 函数定义的关键字
function
并不是必须的,但是为了可读性还是建议加上 - 在ubuntu系统上的
/bin/sh
中不支持function
关键字,建议使用#!/bin/bash
解释执行脚本 - 定义函数时,不需要显式的申明函数参数
处理函数参数
在上面的函数定义中我们可以看到并没有申明函数的参数,那么函数参数是怎么传递的呢? 其实函数参数我们可以通过$n
的方式获取,如下:
#!/bin/bash# 定义一个函数
function func(){# 输出所有的参数echo "all parameters are $*"# 输出所有的参数echo "all parameters are $@"# 输出脚本名称echo "the script's name is $0"# 输出第 1 个参数echo "the first parameter is $1"# 输出第 2 个参数echo "the second paramter is $2"
}# 函数调用
func hello 2
从上面的例子可以看到,我们在调用函数时,直接将函数跟在函数名称后面即可,在函数内部我们可以通过位置参数的形式接收。
通过getopts接收参数
上面的方式演示了函数的位置参数如何传递和接收,但是如果出现某个函数参数特别多的情况,使用位置参数可能会导致可读性差,而且必须每个位置都必须要传递参数,使用起来不方便。
接下来演示通过getopts
方式传递可选参数,代码如下:
#!/bin/bash
# 定义函数
func()
{# 逐个接收选项及其参数while getopts "a:b:c" argdo# 当指定了 -a 选项时case "$arg" ina)# 输出 -a 选项的参数值echo "a's argument is $OPTARG";;b)echo "b's argument is $OPTARG.";;c)echo "c";;?)# 未知选项echo "unkown argument."exit 1;;esacdone
}
# 调用函数
func -a hello -b world