【问题标题】:if statement shell script errorif语句shell脚本错误
【发布时间】:2026-01-30 00:35:01
【问题描述】:

你好我不知道这是否会重复,但我真的没有看到这段代码中的错误。它在 then 语句中给了我一个错误,我认为没有错误。 我已将 cmets 放在代码中断的两行。 代码如下:

#!/bin/bash
echo -n "Enter first value:"
read firstvar
echo -n "Enter second value:"
read secondvar
echo -n "Enter last value:"
read compvar
echo -n "Enter operation:"
read ops
counter=0
result=0
while [ $result -eq $compvar ]
do
if [ $ops -eq "+" ]
then result = $((firstvar+secondvar))
elif [ $ops -eq "-" ]
then result = $((firstvar-secondvar))
#elif[ $ops -eq "*" ]
#then result = $((firstvar\*secondvar))
#elif[ $ops -eq "/" ]
#then result = $((firstvar/secondvar))
else
echo "Input valid operation !!!"
fi
(($counter++))
done

【问题讨论】:

  • 说“有一个错误”而不告诉确切的错误信息和错误的位置,就像去看医生并说“它在某处受伤”而不说它在哪里以及如何受伤。
  • 发帖前使用shellcheck
  • 是的,谢谢,我发现了我的错误。抱歉打扰了。
  • -eq 是比较数字,而不是字符串。
  • 为什么这是elif 链呢?使用case $ops in ....

标签: bash shell


【解决方案1】:

哎呀,我智障了。错过了“elif”和“[”之间的空格。

【讨论】:

  • 你有更多的问题。
【解决方案2】:

您需要学习如何使用空格和缩进让您的代码清晰易读。

#!/bin/bash

echo -n "Enter first value:";  read firstvar
echo -n "Enter second value:"; read secondvar
echo -n "Enter last value:";   read compvar
echo -n "Enter operation:";    read ops

counter=0; result=0     #initialize variables
while [ $result -eq $compvar ]; do
   if [ $ops = "+" ]; then
      result = $((firstvar+secondvar))
   elif [ $ops = "-" ]; then
      result=$((firstvar-secondvar))       
   else
      echo "Input valid operation !!!"
   fi
   ((++counter))
done

写代码和写文学作品是一样的。有一些表格可以让读者(即使只是 6 个月后的你)更容易理解。您上面的代码令人困惑,稍后会咬您一口。将 cmets 添加到。

while 循环是免费的,不会做任何事情——-eq 至少应该是 -ne。计数器可以初始化为整数以避免可能出现的问题,但它也从未使用过。

【讨论】: