算术运算符无效(从读取命令传递浮点数时,错误标记为“ 7.16.3

算术运算符无效(从读取命令传递浮点数时,错误标记为“ 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

答案1

-ne进行数字比较,而7.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 的方法。

相关内容