美文网首页
【Linux shell学习笔记-04-函数返回值的处理】

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

作者: 西布鲁克 | 来源:发表于2021-04-30 09:13 被阅读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命令需要注意两点

  • 函数一结束就取返回值,$?变量在提取函数返回值之前入过执行了其他命令,return的返回值就会丢失。
  • 退出状态码必须是0-255之间的整数

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

相关文章

网友评论

      本文标题:【Linux shell学习笔记-04-函数返回值的处理】

      本文链接:https://www.haomeiwen.com/subject/ndkgrltx.html