从每个文件中读取第一行并将它们与参考号进行比较

时间:2015-05-07 10:36:09

标签: bash

我有三个输入文件。我将读取每个输入文件的第一行,我将它们与参考编号进行比较。我从不同输入文件中读取的所有值(a1,a2和a3)应小于我的"绝对参考值(aref)"。我的脚本给出了参考值的错误:line ..:-2.13:没有这样的文件或目录。我该如何修复我的代码?我的if条件是否正确?

#!/bin/bash -f

a1=$(head -n 1 input1.xvg)
a2=$(head -n 1 input2.xvg)
a3=$(head -n 1 input3.xvg)

aref=-2.13

if [a1 < $aref && a2 < $aref && a3 < $aref] ; then

    echo "It's good"

else 

   echo "It isn't good"

fi

2 个答案:

答案 0 :(得分:0)

使用[[而不是[在你的if语句中]。因为您正在使用[shell认为您正在传递文件,而不是与值进行比较。

尝试写下你的if

if [[ $a1 < $aref && $a2 > $aref && $a3 > $aref ]] ; then

要使用aref的绝对值,请使用:

let "aref=$aref<0?-$aref:$aref"

答案 1 :(得分:0)

除了您的语法错误(在测试中[之前和]之后需要空格而且您的变量名称中缺少一些$),它看起来像你'试图比较bash不支持的浮点数。一种选择是在算术上下文中使用bc

if (( $(bc <<<"$a1 < $aref && $a2 > $aref && $a3 > $aref") )); then
    echo "It's good"
else
    echo "It isn't good"
fi

命令替换$( ... )的输出为10,具体取决于条件是真还是假。如果输出返回1,则算术上下文(( ... ))返回成功,如果返回0则返回失败。

如果您想使用变量的绝对值,一种方法是使用${a1#-}${aref#-}等来删除前导-每个变量。