2016-07-04 71 views
0

我运行这个bash命令一行:猛砸如果其他然后用sys.exit的bash的版本()

xe pbd-unplug uuid=$PBDUUID 

如果结果存在 - 也就是说,如果变量PBDUUID不是空的话,我想运行另一个命令:

xe sr-forget uuid=$SRUUID 

然而,如果变量是空白,则我想打印错误消息

Error: No PBD.

并且脚本立即退出(类似于Python中的sys.exit())。

有没有办法将if else then合并成一行?另外,什么是sys.exit()的bash相当于?

更多信息/评论:由Dilettant

至于评论,是这一做法(if [ -z ${PBDUUID} ]; then)也将正常工作。我没有意识到这一点。谢谢你。这似乎很直观。

+0

道歉,如果这是一个重复的问题。如果是这样,请让我知道。 –

+1

'if [-z $ {PBDUUID}];然后printf“foo”; else printf“bar”; fi' - 请修改问题。谢谢。 – Dilettant

+2

“在一行中”?为什么?单线通常不太易读,或者如果使用短路布尔逻辑来构造它们,则会比使用简洁结构的等效代码更具错误性。 –

回答

2
if xe pbd-unplug uuid="$PBDUUID"; then xe sr-forget "uuid=$SRUUID"; else echo "Error: No PBD."; exit 1; fi 

其可读性,那就是:

if xe pbd-unplug uuid="$PBDUUID"; then 
    xe sr-forget "uuid=$SRUUID" 
else 
    echo "Error: No PBD." >&2 
    exit 1 
fi 

顺便说一句,如果你的目标是要检查一个变量是否为空,这看起来更像是以下几点:

if [ -z "$PDBUUID" ]; then 
    xe pdb-unplug uuid="$PDBUUID" && xe sr-forget "uuid=$SRUUID" 
else 
    echo "Error: No PBD." >&2 
    exit 1 
fi 

如果exit不符合您的要求,那么此代码大概是在一个子shell中运行,因此exit正在退出该子外壳,而不是整个脚本。请参见SubShellthe processtree bash-hackers.org page的“创建子壳体的操作”部分。

+0

谢谢。这样做! –