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に関する限り、Bashは整数のみを扱うので、両方はありません7.16
。エラーは実際には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の削除などの方法を使用してください。