循环功能bash

时间:2017-07-31 17:09:10

标签: bash function loops break

我目前正在学习bash,而且我正在使用循环函数来调用函数,如果该值不是预期值。

我创建了一个小函数

#!/bin/bash

find_number(){
  echo "Enter number"
  read number

  if [ ! $number == 1 ]; then
    echo is not 1, enter number again
    find_number
  fi

echo "Got it"
}

find_number

如果输入一个错误的值,它会重新启动该函数并创建一个循环,但唯一的问题是函数会自行循环,最后当它继续时它会在错误的时候返回echo。

例:

   Enter number
   5
   is not 1, enter number again
   Enter number
   5
   is not 1, enter number again
   Enter number
   1
   Got it
   Got it
   Got it

如你所见,我得到了3次结果。 为了解决这个问题,我以另一种方式写了我的代码。

#!/bin/bash

find_number(){

  echo "Enter number"

  while read number; do
    if [ ! $number == 1 ]; then
      echo is not 1, enter number again
    else
      break
    fi
  done

echo "Got it"
}

find_number

我的问题是......我是通过应用第二种方法还是以正确的方式做到这一点,还是采用了另一种方法?

感谢您的反馈

2 个答案:

答案 0 :(得分:1)

由于你使用recursion来'循环',当每个函数完成时,你仍然在完成该函数的最后几行。

要真正创建循环,您可以使用while; do结构正确执行它。

如果没有可靠的基础(结束)条件,调用函数本身进行递归可能会产生更大的开销。

答案 1 :(得分:0)

您正在使用递归,而不是循环。尝试以这种方式使用循环:

#!/bin/bash

find_number(){
  echo "Enter number"
  read number

  while [ ! "${number}" == "1" ]; do
    echo "is not 1, enter number again"
    read number
  done

  echo "Got it"
}

find_number