嗨客网搜索

Shell函数返回值

Shell函数返回值教程

C++JavaPython 或者 Golang 等大部分编程语言中,返回值是指函数被调用之后,执行函数体中的代码所得到的结果,这个结果就通过 return 语句返回。

但是 Shell 中的返回值表示的是函数的退出状态:返回值为 0 表示函数执行成功了,返回值为非 0 表示函数执行失败(出错)了。ifwhilefor 等语句都是根据函数的退出状态来判断条件是否成立。

Shell 函数的返回值只能是一个介于 0 ~ 255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

函数执行失败时,可以根据返回值(退出状态)来判断具体出现了什么错误,比如一个打开文件的函数,我们可以指定 1 表示文件不存在,2 表示文件没有读取权限,3 表示文件类型不对。

Shell函数返回值详解

语法

return $?

说明

$? 是一个特殊变量,用来获取上一个命令的退出状态,或者上一个函数的返回值。

Shell得到函数的处理结果

有人可能会疑惑,既然 return 表示退出状态,那么该如何得到函数的处理结果呢?比如,我定义了一个函数,计算从 m 加到 n 的和,最终得到的结果该如何返回呢?

这个问题有两种解决方案:一种是借助全局变量,将得到的结果赋值给全局变量;一种是在函数内部使用 echo、printf 命令将结果输出,在函数外部使用 $() 或者 `` 捕获结果。

案例

全局变量

通过全局变量,返回函数值

#!/bin/bash sum=0 #全局变量 function getsum(){ for((i=$1; i<=$2; i++)); do ((sum+=i)) #改变全局变量 done return $? #返回上一条命令的退出状态 } read m read n if getsum $m $n; then echo "The sum is $sum" #输出全局变量 else echo "Error!" fi

程序运行后,控制台输出如下:

05_Shell函数返回值.png

我们通过了全局变量,返回了函数的值。

函数返回值

Shell函数,返回值

#!/bin/bash function getsum(){ local sum=0 #局部变量 for((i=$1; i<=$2; i++)); do ((sum+=i)) done echo $sum return $? } read m read n total=$(getsum $m $n) echo "The sum is $total"

程序运行后,控制台输出如下:

06_Shell函数返回值.png

我们在函数内部,使用了 $? 返回了函数值。

Shell函数参数返回值总结

Shell 中,获取函数返回值一种是借助全局变量,将得到的结果赋值给全局变量;一种是在函数内部使用 echo、printf 命令将结果输出,在函数外部使用 $() 或者 `` 捕获结果。

嗨客网顶部