Bash if else然后在一行中使用bash版本的sys.exit()

时间:2016-07-04 20:55:40

标签: python linux bash

我正在运行这个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)也会起作用。我没有意识到这一点。谢谢你。这似乎非常直观。

1 个答案:

答案 0 :(得分: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将退出该子shell而不是整个脚本。请参阅SubShell或"创建子shell的操作" the processtree bash-hackers.org page的一部分。