如果其中任何一个失败,如何让这个脚本检查命令的状态并退出:
#!/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发布于 2017-02-13 22:06:37
在脚本的早期添加set -e,或者将#!行更改为#!/bin/sh -e,这将产生同样的效果。
这将设置errexit外壳选项,这意味着脚本将在命令返回非零退出状态时立即退出,但有以下例外(取自POSIX描述set):
-e设置在执行while、until、if或elif保留字之后的复合列表、以!保留字开头的管道或除最后一个以外的和- or列表的任何命令时将被忽略。-e时失败的结果,则-e将不适用于此命令。另一种方法是在希望退出的每个命令之后添加|| exit,如果这些命令失败的话。例如
flash_eraseall -j /dev/mtd2 || exithttps://unix.stackexchange.com/questions/344746
复制相似问题