语法错误Bash命令bc

时间:2017-06-01 18:02:44

标签: arrays bash shell bc

我遇到了bc命令的问题。生成的输出是:

(standard_in) 2: syntax error

在这里,我发布我的代码,任何建议将不胜感激。

value="100%"          # the threshold to cause a break out
kb="kB/s"
mb="MB/s"             # strings to mask out
conversor=1024        # kb->mb conversion
contador=0            # initalize our total in megabytes
for ((x=3; x<=${#array[@]}; x+=5)); do
    paraula=${array[$x]};

    if [[ $paraula =~ .*kB.* ]]; then
        paraula=${paraula%$kb}
        paraula=$(echo "scale=4; $paraula/$conversor" | bc) # convert to $mb
        contador=$(echo "scale=4; $contador+$paraula" | bc)
        echo "Counting: "$contador
    else
        paraula=${paraula%$mb}
        contador=$(echo "scale=4; $contador+$paraula" | bc)
        echo "Counting: "$contador
    fi

    if [[ " ${array[$x]} " =~ " $value " ]]; then
        break;
    fi
    echo "Value : ${array[$x]} ";

done 

echo "final value: $contador"

然后,执行脚本后终端上的错误是

Hacker News - The war against autocomplete=off (2013)

1 个答案:

答案 0 :(得分:0)

问题是,当管道输入bc时,你的最后一行没有换行符。

这很好用。

$ echo "scale=4; 2046/1024" | bc
1.9980
$ echo -e "scale=4; 2046/1024\n" | bc
1.9980

这已经破产

$ echo -n "scale=4; 2046/1024" | bc
(standard_in) 1: syntax error

我认为你可以改为

contador=$(echo -e "scale=4; $contador+$paraulao\n" | bc)

那应该解决它。另外,缩进并添加注释。