我正在尝试使用 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 的方法。