首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bash: while循环转到无限循环而case语句

bash: while循环转到无限循环而case语句
EN

Stack Overflow用户
提问于 2022-04-15 11:32:44
回答 1查看 141关注 0票数 0

这是我下面的bash脚本

代码语言:javascript
复制
#!/bin/bash
verify()
{
  while true ;do
      read -p "Have you fixed  ? Yes/No: " yn
      case $yn in
         YES|Yes|yes|y|Y)
         printf "Hola"
         check_status
         break
         #continue
         ;;
         NO|No|no|n|N)
         printf "Please fix"
         ;;
         *)
         printf "Please answer yes or no.\n"
         ;;
     esac
  done
}

check_status()
{
  while IFS=" " read -r rec1 rec2
  do
  if [ $rec2 == 'up' ]
  then
    echo "$rec1 is up"
  else
    echo "$rec1 is down so please fix"
    verify
  fi
  done < <(cut -d " " -f1,2 compute_list)
}


check_status

我的计算列表是

代码语言:javascript
复制
abcd up
efgh down
..

它总是给予

它没有显示这条线

你修好了吗?是/否:

但它却无穷无尽地展示了下面

请回答是还是否?请回答是还是否?

无限循环,它一次又一次地显示相同的消息。

任何帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-15 12:07:51

外部函数将标准输入重定向为从cut进程替换读取,因此read就是从那里读取输入的。

可能会为进程替换使用单独的文件描述符。

此外,您的verify函数再次递归地调用check_status;可能会删除它!

代码语言:javascript
复制
verify()
{
  while true ;do
      read -p "Have you fixed? Yes/No: " yn
      case $yn in
        YES|Yes|yes|y|Y)
         echo "Hola"
         # check_status # DON'T!
         break
         ;;
        NO|No|no|n|N)
         echo "Please fix"
         ;;
        *)
         echo "Please answer yes or no."
         ;;
     esac
  done
}
 
check_status()
{
  # Notice read -u 3 to read from fd3
  # Notice _ to read fields 3 and up
  while IFS=" " read -u 3 -r rec1 rec2 _
  do
    # Syntax: single =, add quoting
    if [ "$rec2" = 'up' ]
    then
      echo "$rec1 is up"
    else
      echo "$rec1 is down so please fix"
      verify
    fi
  # Notice 3<
  done 3< compute_list
}
 
check_status

我还冒昧地修复了缩进,避免了不必要的进程替换;read可以在第二步之后很好地读取和丢弃字段。

printfecho更通用,但在本例中,当您只想输出静态字符串时,我切换到了echo

演示:https://ideone.com/pVerFm (我留在了进程替换中,以防您想要看到它在语法上是什么样子)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71883496

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档