【问题标题】:Why isn't the code working? [closed]为什么代码不起作用? [关闭]
【发布时间】:2016-04-26 06:17:20
【问题描述】:

我是 bash 脚本的新手。 我写了一个简单的代码来找到从 10 到 190 的所有十的倍数的平均值。 代码是:

#!/bin/bash

a=10

ans=0

while[ $a -le 190 ]

do

ans=`expr $a + $ans'
a=`expr $a + 10'

done

echo "$ans"

那么这个程序有什么问题呢?

【问题讨论】:

  • 尝试将代码粘贴到shellcheck.net 以了解基本错误。如果您仍然有问题,请更正它们并进行编辑。另外,请阅读How can I add numbers in a bash script。最后,“不工作”没有用:什么不工作?你得到什么错误?您可能想阅读How to Ask
  • 谢谢。解决了这个问题。真是个愚蠢的错误。 :)
  • 然后提供有关问题的反馈,最终,write your own answer 或接受提供的一个好的解决方案的答案。

标签: bash shell loops scripting mean


【解决方案1】:

你的代码中有语法错误,试试这个 -

#!/bin/bash

  a=10

  ans=0

  while [ $a -le 190  ] 
  do
      ans=`expr $a + $ans`
      a=`expr $a + 10`
  done

  echo "$ans"

您遇到的错误 -

  • while 后没有空格
  • ans=`expr $a + $ans' 中使用 ' 而不是 `
  • a=`expr $a + 10' 中使用 ' 而不是 `

【讨论】:

    【解决方案2】:

    您的脚本存在一些语法问题。一个建议您可以使用“let”而不是“expr”命令,它使您的代码更具可读性。例如:设 a=10+1。以可执行权限保存您的文件或使用“源”执行。

    #!/bin/bash
    
    a=10
    ans=0
    count=0
    while [ $a -le 190 ]; do
        ans=`expr $a + $ans`
        a=`expr $a + 10`
        count=`expr $count + 1`
    done
    
    echo "avg: $((ans/count))"
    

    【讨论】:

      【解决方案3】:

      所以你的代码中有几个错误,这是你的正确版本:

      a=10
      
      ans=0
      
      while test $a -le 190 
      do
          a=$(expr $a + 10)
          ans=$(expr $a + $ans)
      
      done
      
      echo $ans
      

      问题是您必须在循环中使用test,如whileif 语句,同样要使expr 工作,您必须将所有内容放在括号中,并在其中的dollar sign开始。 echo 中的"" 没有任何用处,只要 echo 对它们一视同仁。

      【讨论】:

        【解决方案4】:

        使用这样的封闭形式解决方案更有效:

        lower=10
        upper=190
        echo $(( ($upper + $lower) / 2 ))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-08-22
          • 1970-01-01
          • 2017-05-24
          • 2021-08-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多