使用函数和if语句在Bash脚本中进行无限循环

时间:2012-12-11 22:27:01

标签: bash function shell loops if-statement

试图了解这里发生了什么以及为什么?

首先调用名为“why”的函数,然后结果应该是对函数的另一个调用或完全退出。预期的结果永远不能在if语句下面运行循环,这可能是if-else-fi语句或if-elif-else-fi并不重要。

问题是为什么回声结束?

我不明白为什么能够调用最后一个回声。

why ()  {
  read -p 'Loop now?  [y/n]' answer
      case $answer in
        y | Y | yes | YES ) answer="y";;
        *) exit;;
       esac
}

if [ $answer = 'y' ]
then
    why
fi
why 
echo "End"

2 个答案:

答案 0 :(得分:1)

您在调用why的程序部分周围没有循环。你是说这个吗?

while true; do
  why ">" y n
  if [ $answer = y ]; then
    do something
  else
    do something else
  fi
done
echo "I'll never get here"

答案 1 :(得分:0)

if语句认为在函数完成时自行完成。在此示例中更好地显示,脚本将不会循环回到echo start。

echo start
why ()  {
  read -p 'Loop now?  [y/n]' answer
      case $answer in
        y | Y | yes | YES ) answer="y";;
        *) echo 'Invalid response -- exiting now'
           exit;;
       esac
}

answer=y

if [ $answer = 'y' ]
then

    why
    echo "Ok done running the if statement ready to exit the condition now"
fi

所以要来回循环一个函数来包装if语句,如下所示:

echo start
why ()  {
  read -p 'Loop now?  [y/n]' answer
      case $answer in
        y | Y | yes | YES ) answer="y";;
        n | N | no | NO ) answer="n";;
        *) echo 'Invalid response -- exiting now'
           exit;;
       esac
  ifFunction
}

ifFunction () { 
  if [ $answer = 'y' ]
  then

    why
    echo "yes"
  elif [ $answer = 'n' ]
  then
    echo "to bad looping anyway"
    why
  else
    echo "else nothing but another question"
    why
  fi
}
why
echo never

所以答案是它已经完成了该功能,现在按预期继续运行脚本,在提供的示例中,它将作为下一个完成的任务回显结束。