我一直在收到错误: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
答案 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仅支持整数运算。