linux - 检查返回值的 shell 方法的错误代码

标签 linux bash shell unix

我有一个示例 shell 方法:

  1. 经过某种处理后返回一个值。
  2. 如果发生任何错误,则使用退出代码退出。

示例脚本如下:

a.sh

#!/bin/bash
test(){ # test method
 if [ $1 == 2 ]; then # the condition for checking
  exit 500 # exit with exit code
 else
  echo $1 # do some business logic here and return the value
 fi
}

我在检查错误代码时遇到问题。为了使用这个测试方法,我有另一个示例脚本。

b.sh

#!/bin/bash
source a.sh
val=`test $1` # call the test method
if [ $? == 500 ]; then # check the value
 echo "here is an error" # error occurs
else
 echo $val # no error, do something with returned value
fi

以下是输出:

输入: ./b.sh 10

输出: 10

预期输出: 10

输入: ./b.sh 2

输出:

预期输出:这是一个错误

我认为 b.sh 中存在问题,因为 if [ $? == 500];那么 总是。有什么方法可以使这个条件为真或者获取错误代码吗?

最佳答案

执行此操作的惯用方法是:

if val=$(test "$1"); then
  echo "$val"
else
  echo "An error occurred."
fi

if 语句测试其后面的命令(或管道)的状态,并执行指示成功的状态的 then 分支。您唯一需要显式检查 $? 值的情况是实用程序返回不同故障状态值(并记录它们的含义)的罕见情况。

许多人似乎认为 [ ... ] 和其他类似的东西是 if 命令语法的一部分。他们不是;它们只是名称为标点符号的命令(或内置命令)。您可以使用任何命令,甚至可以连续使用多个命令;在后一种情况下,检查的状态将是最后一个命令的状态。

关于linux - 检查返回值的 shell 方法的错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25518501/

相关文章:

bash - 在 bash 中调用自定义函数导致 "Command not found"

linux - ls | grep 变量作为正则表达式

shell - 根据命令行中的列拆分 csv 文件

linux - 如何查看谁杀死了脚本的执行?

linux - OpenGL,GLSL : Garbage values in uniforms

bash - 有没有办法使用 ARKit 加载 FBX 文件?

git - git 中的 ANSI 颜色显示不正确

Bash 脚本被打印而不是被执行

linux - Password expires 和 Account expires 和有什么不一样? chage -l 用户名命令的输出

linux - 在 Linux 下链接库