【Linux shell学习笔记-04-函数返回值的处理】

2021-04-30  本文已影响0人  西布鲁克

Linux shell脚本中可以通过定义函数的方式对需要重复调用的代码进行定义,这样可以在脚本中只定义一次,但是可以在任何地方多次使用这段代码,也就是通常所说的封装。

函数体执行完成都会生成一个返回值,可以用标准变量$?来确定函数的退出状态码,在shell中函数的返回值通常是函数最后一条命令执行的状态码,所以这里存在一个问题,就是函数体中的其他命令执行的状态码在默认情况下是无法获取的,在这种情况下,无法根据函数的返回值来判断函数调用执行是否成功。

来看下面的例子:

#!/bin/bash

func1() {
    echo "尝试显示一个不存在的文件的详细信息"
    ls -l noexistfile
    echo "这里不会显示前面命令的执行状态码"
}

echo "函数测试:"
func1 
echo "退出状态码 : $?"

脚本的执行结果如下:


截屏2021-04-30 上午8.57.29.png

可以看到虽然函数中执行显示不存在的文件,但是函数最后的退出状态码仍然是0(执行成功,echo语句的执行状态码)

为了避免上述可能存在的问题,可以采用以下方法来处理

1.使用return命令

#!/bin/bash

func1() {
    echo "尝试显示一个不存在的文件的详细信息"
    ls -l noexistfile
    if [ $? -ne 0 ]
    then
        return 12
    fi
    echo "这里不会显示前面命令的执行状态码"
}

echo "函数测试:"
func1 
echo "退出状态码 : $?"

使用return可以将自定义的返回码赋值给$?标准变量,使用return命令需要注意两点

2.使用函数输出
可以对需要获取命令执行结果的语句显式使用echo语句,来自定义返回值,这样就不会被0-255的返回值约束了。

上一篇 下一篇

猜你喜欢

热点阅读