错误:第9行:* 12:语法错误:操作数预期

时间:2016-11-12 19:23:42

标签: bash shell if-statement

我一直在收到错误:line 9: * 12: syntax error: operand expected (error token is "* 12")(我作为对脚本的测试输入了3,4,1)我需要的结果仍然显示在结尾但是在此错误行之后。为什么这一行显示所有内容"是否有效?"?

这是我的代码,所以你可以理解我的所作所为:

y='1'
z='0'

while [ $z = 0 ]
do
read x
        if [[ "$x" -ge "0" ]];
        then
        y=$[$x*$y]
        fi
done

echo -n "The multiplication of positive numbers entered is: $y"

exit

3 个答案:

答案 0 :(得分:2)

line 9: * 12: syntax error: operand expected (error token is "* 12")

这怎么可能? 该消息试图告诉您操作数是预期的, 但它不存在。 作为附加提示,错误标记为* 12。 仔细看看这可能是什么。

这发生在表达式$x*$y中。 例如,如果x为2,y为12, 然后表达式为2 * 12。 但是如果x的值是空字符串, 表达式为* 12,即 没有乘以12。 这没有任何意义,因此错误。

x没有值时(您输入了一个空白行), 你可能想要摆脱循环:

while [ $z = 0 ]; do
    read x
    [[ $x ]] || break
    if [[ "$x" -ge "0" ]]; then
        y=$[$x*$y]
    fi
done

此外, 正如@mklement0在评论中指出的那样, $[...]语法已废弃,有利于$((...)), 并且没有充分理由混合[...][[...]]样式条件。 这是一个更现代,更清晰的脚本版本, 还删除了未使用的z变量:

while true; do
    read x
    [[ $x ]] || break
    if ((x >= 0)); then
        ((y = x * y))
    fi
done

答案 1 :(得分:2)

你如何结束输入?如果输入 Ctrl + d 或空字符串,则x为emtpy,shell尝试分配

y=$[*12]

因此错误。我不明白为什么循环在这种情况下结束,因为$z永远不会改变。

答案 2 :(得分:0)

此行的语法不正确:

y=$[$x*$y]

要将$x * $y的结果分配给$y,请使用此项:

y=$(( x * y ))

请记住,shell仅支持整数运算。