学习5:函数

创建并使用函数

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[*]}"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值