Bash

算術運算符無效(從讀取命令傳遞浮點數時,錯誤標記為“ 7.16.3

  • January 25, 2022

我正在嘗試使用 bash 腳本自動更新軟體。當我傳遞版本號時,例如 7.16.3,我收到以下錯誤:“)語法錯誤無效的算術運算符(錯誤標記是”

read從命令傳遞值時,我找不到任何相關的答案。我的程式碼如下所示:


DATE=`date +'%Y%m%d'`
BSI_SETUP=/opt/bsi/source/setup/elk_${DATE}
OLD_VERSION_FILEBEAT=`/usr/share/filebeat/bin/filebeat version| awk '{print $3 }' 2>/dev/null`
OLD_VERSION_METRICBEAT=`/usr/share/metricbeat/bin/metricbeat version| awk '{print $3 }' 2>/dev/null`
MY_HOME=~

read -p 'Enter filebeat & metricbeat version: ' NEW_VERSION_BEATS 
read -p 'Enter CSC environmet: ' CSC_ENV

if [[ ${NEW_VERSION_BEATS} -ne ${OLD_VERSION_FILEBEAT} ]]; then # I get error here
  sudo yum install -y $BSI_SETUP/filebeat-*.rpm 2>/dev/null
else
  echo "Filebeat is up-to-date"   
fi

if [[ ${NEW_VERSION_BEATS} -ne ${OLD_VERSION_METRICBEAT} ]]; then # and here 
  sudo yum install -y $BSI_SETUP/metricbeat-*.rpm 2>/dev/null
else
  echo "Metricbeat is up-to-date"      
fi

-ne進行數字比較,while7.16.3不是數字。(即使它被稱為“版本號”。)碰巧,就 Bash 而言,兩者都7.16不會,因為 Bash 只處理整數。Bash 中的錯誤實際上更清楚[ .. ]

$ [ 7.16.3 -ne 7.16.3 ]
bash: [: 7.16.3: integer expression expected

使用[ "$a" = "$b" ][[ $a == "$b" ]]進行字元串等式比較,!=用於不等式。([ "$a" == "$b" ]適用於 Bash,但不是標準的。)

OTOH,如果您的錯誤確實看起來像那樣"),那是由於值中的輸入所致。

$ var=$'7.16\r'
$ [[ $var -ne 7.16 ]]
")syntax error: invalid arithmetic operator (error token is ".16

在這種情況下,請檢查您的輸入是否來自 Windows 文本文件,或使用類似var=${var%$'\r'}刪除 CR 的方法。

引用自:https://unix.stackexchange.com/questions/687885