bash:设置退出状态而不打破循环?

时间:2016-03-07 18:15:11

标签: bash

我正在编写bash脚本来检查fstab结构。

for循环中,我已经放置了一个return语句,以便稍后在脚本中使用退出代码,但似乎return语句在打印后打破了循环首先要求输出

如何在不破坏循环的情况下指定返回码1,这样我才能得到所有结果,而不仅仅是第一个?

for i in $(printf  "$child"|awk '/'$new_mounts'/'); do

    chid_count=$(printf  "$child"|awk '/'$new_mounts'/'|wc -l)

    if [[ $chid_count -ge 1 ]]; then
        echo -e "\e[96mfstab order check failed: there are child mounts before parent mount:\e[0m"
        echo -e "\e[31mError: \e[0m "$child"\e[31m  mount point, comes  before \e[0m $mounts \e[31m on fstab\e[0m"
        return 1
    else
        return 0
    fi
done

1 个答案:

答案 0 :(得分:1)

如果您阅读了该语言的文档,请立即返回假设返回的内容。这并不是shell的独特之处 - 我实际上无法想到使用return构造的单一语言,而不会以这种方式行事。< / p>

如果要将值设置为稍后用作返回值,请使用变量:

yourfunc() {
  local retval=0

  for i in ...; do
    (( child_count >= 1 )) && retval=1
  done

  return "$retval"
}