【发布时间】:2013-07-23 12:46:02
【问题描述】:
每个状态检查 if 语句中的 exit 语句不会中断 while 循环并真正退出脚本。我可以做些什么来打破循环并使用 $STATUS 代码退出?
编辑:我已经更新了我的代码,但它仍然无法正常工作。如果语句成功中断循环,则状态检查,但是当我尝试评估 $EXIT_STATUS 时,它始终为空,可能与范围有关。我在这里想念什么?
if [ $RESTART -le $STEP ]; then
. tell_step
while read XML_INPUT; do
XML_GDG=`get_full_name $GDG_NAME P`
cp $XML_INPUT $XML_GDG
STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi
add_one_gen $XML_GDG
STATUS=$?
EXIT_STATUS=$STATUS
if [ $STATUS -ne 0 ]; then
break
fi
done < $XML_STAGE_LIST
echo $EXIT_STATUS
if [ $EXIT_STATUS -ne 0 ]; then
exit $EXIT_STATUS
fi
fi
【问题讨论】:
-
快速评论 - 很难阅读包含很多大写字母的脚本。尝试为一些“特殊”变量保留大写名称(或者更好,仅用于导出的变量)..
-
使用
break而不是exit。 -
@fedorqui break 将退出循环,但不会以状态退出脚本,我实际上是在尝试两者。
-
那么在这些情况下,将退出状态存储在变量 (
exit_status=$STATUS) 中,然后使用它退出exit $exit_status? -
@fedorqui 好电话,应该可以。
标签: shell unix while-loop