簡體   English   中英

從每個文件中讀取第一行並將它們與參考數字進行比較

[英]reading the first line from each file and comparing them to a reference number

我有三個輸入文件。 我將閱讀每個輸入文件的第一行,並將它們與參考數字進行比較。 我從不同的輸入文件中讀取的所有值(a1,a2和a3)應小於我的“絕對參考值(面)”。 我的腳本給出了參考值的錯誤:行..:-2.13:沒有這樣的文件或目錄。 如何修復我的代碼? 而我的條件是否正確?

#!/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

在if語句中使用[[代替[]。 因為您正在使用[shell認為您正在傳遞文件,而不是與值進行比較。

嘗試這樣寫你的

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

要使用aref的絕對值,請使用以下命令:

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

以及語法錯誤(測試中[]之前需要空格,並且變量名中缺少$ ),這似乎是您在嘗試比較浮點數,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#-}等,以從每個變量中刪除前導-

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM