创建并使用函数
function name {
command
}
脚本中定义的每个函数必须有唯一的名称,除了这种定义方法,还有另外一种定义方法
name() {
command
}
可以通过使用函数名的方式调用函数,像其他语言一样,在函数未定义之前调用函数会返回一个错误信息。除此之外,如果两个函数同名,则后一个函数会覆盖前一个函数的定义,并且不会返回任何错误信息
返回值
默认退出状态码
一般来说:0-命令成功结束,1-一般性位置错误,126-命令不可执行,127-没有找到命令
在函数执行结束后,可以通过标准变量$?
来确定函数的退出状态码。如果退出状态码为1,只代表最后一条命令没有成功运行,但无法得知其他明林是否成功运行
使用return命令
该命令允许指定一个整数值(0-255)来定义函数的退出状态码
#!/bin/bash
function doubleNum {
read -p "Enter a value:" value
return $[ $value * 2 ]
}
doubleNum
echo "The new value is $?"
通过这种方法获得返回值需要注意一个问题:必须在函数一结束就接收返回值,因为$?
变量只返回最后一条命令的退出状态码
使用函数输出
#!/bin/bash
function doubleNum {
read -p "Enter a value:" value
return $[ $value * 2 ]
}
result=$(doubleNum)
echo "The new value is $result"
在这个例子当中,read命令使用-p参数输出了一条简短的消息,但是脚本并不把它作为标准输出的一部分,但如果在函数中使用echo命令来输出,则会被读进shell变量中
变量
向函数传递参数
函数相当于小型脚本,因此函数可以使用标准变量接收命令行上传递给它的参数(例如$0
、$1
等)
function adds {
......
elif [$# -eq 2 ]
then
echo $[ $1 + $2 ]
......
}
value=$(adds 12 12)
函数中的标准变量和脚本主体中的标准变量并不相同,必须在调用函数时手动将它们传过去
全局变量
在脚本中定义的变量都是全局变量,在函数外定义的变量可以在函数内正常访问
局部变量
local temp
实例
local temp=$[ $value + 5 ]
通过这种声明保证了变量只局限在该函数中,如果该函数外有同样名字的变量,shell会保持这两个变量是分离的
向函数传递数组参数
向函数传递数组参数是一个容易犯错的操作,以下为错误的传参方式
showArray $newArray
这种传参方式只会将数组中第一个元素传递给函数,要想避免这种错误,需要采用以下方式传参
showArray "${newArray[*]}"
完整程序
#!/bin/bash
function showArray() {
newArray=($1)
echo "${newArray[*]}"
}
myArray=("SJZ" "BJC")
showArray "${myArray[*]}"