如何将gunzip操作的状态捕获到变量中?

时间:2015-02-12 16:01:53

标签: bash shell unix

我是shell脚本的新手。我在开始时有一个解压缩操作,然后按照一系列步骤进行操作。我想只有在gunzip操作成功时才​​转到这些步骤。

为此我现在有一个非常简单的脚本

#!/bin/bash
set -x -e
x=$(gunzip myfile.dat.gz)
echo "X is " $x

输出

-bash-3.2$ ./unzipper.sh
++ gunzip myfile.dat.gz
+ x=
+ echo 'X is '
X is

我期待x有一个0 /非零状态代码,并且基于那个想要使用if条件继续下一个。 它看起来不正确。

你能帮我解决一下这个问题吗?

1 个答案:

答案 0 :(得分:3)

您最想做的事情是:

#!/bin/bash
if gunzip myfile.dat.gz; then
# What you want to do on success goes here
fi

至少,这是最简单的解决方案。 set -e有很多微妙的结果;它不推荐。

如果您确实要保存gunzip的状态代码,可以在命令后立即使用$?

#!/bin/bash
gunzip myfile.dat.gz
gunzip_status=$?
# Do some stuff whether or not gunzip succeeded
if ((gunzip_status==0)); then
  # Do some stuff only if gunzip succeeded
else
  # Do some stuff only if gunzip failed
fi
# What you want to do on success goes here
fi