Bash
算術運算符無效(從讀取命令傳遞浮點數時,錯誤標記為“ 7.16.3
我正在嘗試使用 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 的方法。