我是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条件继续下一个。 它看起来不正确。
你能帮我解决一下这个问题吗?
答案 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