使用shell脚本时函数的返回值有三种。
- echo
- return
- 全局变量
1、echo 是返回函数值。
#!/bin/bash
function addarray {
local sum=0
local newarray
newarray=(`echo "$@"`)
for value in ${newarray[*]};do
sum=$[ $sum + $value ]
done
echo $sum
}
myarray=(1 2 3 4 5)
echo The original array is ${myarray[*]}
arg1=`echo ${myarray[*]}`
result=`addarray $arg1`
echo The result is $result
输出结果:
original array is 1 2 3 4 5
The result is 15
2、return 返回的是状态,但配合$?可以实现返回函数的值的目的。(必须返回的是数值)
Shell 中的返回值表示的是函数的退出状态:返回值为 0 表示函数执行成功了,返回值为非 0 表示函数执行失败(出错)了。if、while、for 等语句都是根据函数的退出状态来判断条件是否成立。配合使用
?
实
现
返
回
函
数
结
果
,
?实现返回函数结果,
?实现返回函数结果,? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值
例子1
#!/bin/bash
function func1(){
count=0
for cont in {1..3}; do
count=`expr $count + 1`
done
# 函数中使用return返回时,返回值的数据类型必须是数字
return $count
}
# 在$()的圆括号中可以执行linux命令,当然也包括执行函数
res1=$(func1)
# 变量res2将会接收函数的返回值,这里是3
res2=`echo $?`
if [[ $res2 == 3 ]]; then
echo "func1() succeeded!"
else
echo "Not a right number!"
fi
输出结果:
func1() succeeded!
例子2
#!/bin/bash
function func2 {
local temp=2
return $temp
}
echo "func2 return value is :$?"
输出结果:
func2 return value is : 2
3、全局变量
val=10
function func1 {
echo "hello"
((val++))
}
func1
echo $val
输出结果:
hello
11
参考
$0:Shell 的命令本身
$1 到 $9:表示 Shell 的第几个参数
$? :显示最后命令的执行情况,或者函数
$#:传递到脚本的参数个数
$$:脚本运行的当前进程 ID 号
$*:以一个单字符串显示所有向脚本传递的参数
$!:后台运行的最后一个进程的 ID 号
$-:显示 Shell 使用的当前选项