我有三个输入文件。我将读取每个输入文件的第一行,我将它们与参考编号进行比较。我从不同输入文件中读取的所有值(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
答案 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
命令替换$( ... )
的输出为1
或0
,具体取决于条件是真还是假。如果输出返回1,则算术上下文(( ... ))
返回成功,如果返回0则返回失败。
如果您想使用变量的绝对值,一种方法是使用${a1#-}
,${aref#-}
等来删除前导-
每个变量。