Bash 输出命令未找到。

3
我遇到了以下问题,我已经创建了所述条件,但当我选择y表示是时,一切都正常,但当我选择n表示否时,我会得到令人讨厌的错误输出:
输出: 你同意吗?是(y)还是不同意(n) n ./myscript:[n:命令未找到]
这是我的脚本名称: Code here:
echo  "Do you agree yes (y) or not (n)"
read  answer
if ( [ "$answer" =  'y' ]  ||  ["$answer" = 'Y' ]);
then

echo  -e  “  output for y”
done
else
echo -e "  output for n "
exit 1;

有什么办法可以消除输出并解决问题吗?谢谢。

if 语句中,不必使用括号来分组测试命令。 - glenn jackman
4个回答

7

您在以下内容中漏掉了空格:

["$answer" = 'Y' ]

改为:

[ "$answer" = 'Y' ]

脚本中还有其他错误。这里是可用的代码:

echo  "Do you agree yes (y) or not (n)"
read  answer
if ( [[ "$answer" =  'y' ]] || [[ "$answer" = 'Y' ]]);
then
 echo -e "  output for y"
else
 echo -e "  output for n"
exit 1
fi

x 在测试条件中是为了解决古老的 Bourne 和 C shell 中的 bug。请使用 [[ - jordanm
你说得对,我刚刚检查了一下代码,发现缺少x不是问题所在,而且我忘记把它删除了。 - stanwise
这太棒了!! - David Kariuki

5
你的第二个条件中 [ 后面缺少一个空格。实际上,[ 是一个命令,由于它们在一起,它会尝试直接运行 [n。你没有看到 y 的输出是因为评估被短路了(即第一个条件为真,所以没有必要评估第二个条件)。

2

这不是bash。在bash中,“done”不能终止“if”条件。您应该删除“done”,并在else主体的末尾添加“fi”。

另外,“exit 1”后面的分号是不必要的。


0

done 应该在 else 子句之后,即在 exit 之前。而且它是 "fi" 而不是 "done"。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接