循环函数 bash

Looping function bash

我目前正在学习 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

如果你输入了错误的值,它会重新启动函数并创建一个循环,但唯一的问题是函数会自行循环,最后当它继续它时 returns 回声与你弄错的次数一样多.

示例:

   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

我的问题是...我是通过应用第二种方法以正确的方式进行操作还是有另一种方式进行操作?

感谢您的反馈

由于您正在使用 recursion 到 'loop',当每个函数完成时,您仍在执行该函数的最后几行。

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

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

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

#!/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