無効な算術演算子(読み取りコマンドで浮動小数点数を渡すときに「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に関する限り、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の削除などの方法を使用してください。

関連情報