【问题标题】:Infinite loop while scripting case statement in bash在bash中编写case语句时的无限循环
【发布时间】:2014-02-01 15:57:06
【问题描述】:

你好~我已经想了半天解决这个问题。

INPUT=lookup.txt
IFS=":"
while read vTitle vAuthor vPrice vStock vSold
do
    tempString="$vTitle:$vAuthor:$vPrice:$vStock:$vSold"
    #echo "$tempString"
    while [ "$iTitle" == "$vTitle" ]; do
        ./testcase.sh

    done 

done < $INPUT

Testcase.sh 包含子菜单的脚本。当我运行这个脚本时,我的子菜单会不断重复,就像在递归循环中一样。知道如何解决这个问题吗? 编辑# 抱歉,$iTitle 包含用户输入。以及 testcase.sh 的示例如下:

#! /bin/bash
menu=""
until [ "$menu" = "f" ]; do
echo "  a.) Update title"
echo "  b.) Update author"
echo "  c.) Update price"
echo "  d.) Update quantity available"
echo "  e.) Update quantity sold"
echo "  f.) Back to main menu"
echo " Make selection"
read menu
case $menu in
a)
echo "a" ;;
b)
echo "b" ;;
c)
echo "c" ;;
d)
echo "d" ;;
e)
echo "e" ;;
f)
break ;;
*) ;;
esac
done

我意识到我的问题并不清楚。我有一个用户输入$iTitle,第一个代码摘录检查lookup.txt 是否有相同的$vTitle。成功后,我希望程序运行 testcase.sh。目前它确实运行,但 testcase.sh 递归运行。

【问题讨论】:

  • $iTitle 的价值是多少?我在示例代码中的任何地方都没有看到它定义...
  • testcase.sh 长什么样子?
  • 请更新您的问题以包括testcase.sh 中的内容(或模拟问题的小示例)。如果它是使用 shell 的 select 关键字的代码,您可以尝试获取文件而不是 . ./testcase.sh,但如果它有一个 shebang 标头,您可能需要删除它。很多其他的东西浮现在脑海。让我们先看看./testcase.sh 中的内容;-)。祝你好运。
  • 你的意思是无限循环,不是吗?递归函数在概念上可能自称为无穷大,但在计算机中,fn_a->fn_a->fn_a->INF 将很快耗尽计算机资源并崩溃。 while 条件始终为真导致的无限循环意味着同一个块被一遍又一遍地执行,但会建立一个调用“堆栈”并且不会持续消耗越来越多的计算机资源;只是你的时间;-)。祝你好运。

标签: bash while-loop case infinite


【解决方案1】:
while [ "$iTitle" == "$vTitle" ]; do
        ./testcase.sh
done

在这个块语句中,$iTitle$vTitle 都没有改变。这就是为什么循环没有结束。可能你想用

替换它
if [ "$iTitle" == "$vTitle" ]; then
            ./testcase.sh
fi

而且,在代码中看不到$iTitle 的值。

【讨论】:

  • :) $iTitle 是用户输入。所以换句话说,我不希望 $iTitle/$vTitle 改变我想比较它们。但是在比较它们时,我遇到了递归循环。
  • 比较在while循环中完成,循环直到表达式变为false,在这种情况下,如果两个值都匹配,那么循环永远不会结束。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
相关资源
最近更新 更多