bash脚本中的逻辑错误

时间:2016-06-17 06:10:13

标签: bash shell

我一直在编写一个bash脚本,用于计算两个文件的值之间的错误拒绝率 file1.txt file2.txt 这两个文件都包含二进制值。所有错误都已修复,但输出 0 。我不知道我是否在不知不觉中在我的剧本中犯了任何错误,因为我在编写shell脚本方面非常新,并且还没有掌握它们。

#!/bin/bash
nfr=0
ns=0
frr=0

while read file1 <&3 && read file2 <&4; do
    if [$file1 == "1" ]
    then
       let "ns++"
    fi

    if [ "$file1" == "1" ] && [ "$file2" != "1" ]
    then
       let "nfr++"
    else
       continue
    fi
done 3< ./file1.txt 4< ./file2.txt

let frr="((nfr / ns) * 100)"
echo $frr

FILE1.TXT

2
2
2
2
1
1
1
1
1
2
1
1
2
2

FILE2.TXT

2
2
2
2
2
2
1
1
1
2
1
1
2
2

1 个答案:

答案 0 :(得分:0)

主要问题是shell使用整数运算,因此你的除法总是被截断为零。

您的脚本有语法错误([后没有空格),并且它没有对[ ... ]表达式中的变量引用进行双重引用,这会导致语法错误如果输入文件中有空行。

如果已安装,您可以使用dc进行任意精度算术。

这是我的版本:

#!/bin/bash
declare -i nfr=0
declare -i ns=0

while read file1 <&3 && read file2 <&4; do
    if [ "$file1" == "1" ]
    then
        let "ns++"

        if [ "$file2" != "1" ]
        then
            let "nfr++"
        fi
    fi
done 3< ./file1.txt 4< ./file2.txt

# this will remove the decimal fraction
echo $((nfr * 100 / ns))
# this will print the value with a precision of 5
precision=5
echo "$precision k$nfr $ns/100*p" | dc