首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何编写一个秘密shell脚本来测试每个命令的结果?

我如何编写一个秘密shell脚本来测试每个命令的结果?
EN

Unix & Linux用户
提问于 2017-02-13 21:56:43
回答 1查看 1.8K关注 0票数 1

如果其中任何一个失败,如何让这个脚本检查命令的状态并退出:

代码语言:javascript
复制
#!/bin/sh
echo JFFS2 Preparation

cd /root

/root/config 1 > /root/formatted

if grep "PAR_JFFS2_FORMATTED = -1" /root/formatted; then
  echo Need to Format MTD2
  rm -f /root/formatted

  flash_eraseall -j /dev/mtd2

  echo Marking file system as formatted
  /root/config 1 1355270400

  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt

  echo "Formmatted" > /mnt/formatted.txt

else
  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt
fi
EN

回答 1

Unix & Linux用户

发布于 2017-02-13 22:06:37

在脚本的早期添加set -e,或者将#!行更改为#!/bin/sh -e,这将产生同样的效果。

这将设置errexit外壳选项,这意味着脚本将在命令返回非零退出状态时立即退出,但有以下例外(取自POSIX描述set):

  1. 多命令管道中任何单个命令的失败都不应导致外壳退出。应只考虑管道本身的故障。
  2. -e设置在执行whileuntilifelif保留字之后的复合列表、以!保留字开头的管道或除最后一个以外的和- or列表的任何命令时将被忽略。
  3. 如果子shall命令以外的复合命令的退出状态是在忽略-e时失败的结果,则-e将不适用于此命令。

另一种方法是在希望退出的每个命令之后添加|| exit,如果这些命令失败的话。例如

代码语言:javascript
复制
flash_eraseall -j /dev/mtd2 || exit
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/344746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档