2016-04-26 82 views
0

我是新来的bash脚本。 我写了一个简单的代码来查找从10到190的所有10的倍数的平均值。 代码是:为什么代码不工作?

#!/bin/bash 

a=10 

ans=0 

while[ $a -le 190 ] 

do 

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

done 

echo "$ans" 

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

+2

尝试粘贴http://www.shellcheck.net/中的代码以获取基本错误。纠正它们并编辑,如果你仍然有问题。另外,请阅读[如何在bash脚本中添加数字](http://stackoverflow.com/a/6348941/1983854)。最后,“不工作”是没有用的:什么不起作用?你会得到什么错误?你可能想阅读[问]。 – fedorqui

+0

谢谢。解决了这个问题。 是一个非常愚蠢的错误。 :) – hfarwah

+0

然后提供有关错误的反馈,并最终[写下自己的答案](http://stackoverflow.com/help/self-answer)或接受其中一个答案解。 – fedorqui

回答

-1

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

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

你在你的代码的语法错误,试试这个,而不是 - 你所面对

#!/bin/bash 

    a=10 

    ans=0 

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

    echo "$ans" 

错误 -

  • 之后没有空间,而
  • 使用'在ANS的代替` =`一个EXPR $ + $ ANS' 的
  • 使用而不是` A =`EXPR $ A + 10 “
0

让你有夫妇在你的代码错误的,这是你的正确版本:

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将它们全部相同即可。

0

你的脚本有一些语法问题。一个建议你可以使用“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))"