if文エラー出力

if文エラー出力

ここにスクリプトがあります。

#!/bin/bash

set -e
echo ""

declare -i value=00
unset optics_status

optics_status=$(curl -I xx.xx.xx.xx:4512 | grep 'X-Trace' | awk '{print $NF}' | rev |cut -c 1-3 | rev)


if [ $optics_status != $value ]; then
    echo "result is different means I am in if loop"
    echo "stats is $optics_status"
else
    echo "result is equal means I am in else loop"
    echo "stats is $optics_status"
fi

xx.xx.xx.xxこれはサーバーIPで、curlコマンドのみを実行するとこれが私が得る出力です。

user@machine-lap:~/Documents$ curl -I xx.xx.xx.xx:4512 | grep 'X-Trace' | awk '{print $NF}' | rev |cut -c 1-3 | rev
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0  8359    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0
00
user@machine-lap:~/Documents$

ご覧のとおりvalueに設定しましたが、00出力optics_statusもです00。したがって、ifループによると、エコーが発生するはずi am in else loopですが、エコーのみが発生し、i am in if loopその理由を理解できません。

簡単に言うとではなく、ifドアをエコーし​​ますelse

ベストアンサー1

value変数をにしたい場合00は、整数として宣言しないでくださいbash。整数として宣言すると、シェルdeclare -iが整数として評価するように求められ、整数値は00ゼロになります。

次のコードが出力されますnot same

declare -i value='00'
optics_status='00'

if [ "$optics_status" = "$value" ]; then
   echo 'same'
else
   echo 'not same'
fi

declare -i value='00'に変更するとvalue='00'出力されますsame

また、上記の変数拡張への参照も参照してください。


もちろん、次のいずれかの方法を使用してその値を比較して、2つの変数を整数に昇格させることも検討できます。

if [ "$optics_status" -ne "$value" ]; then

または

if (( optics_status != value )); then

しかし、それはあなたが知っていると仮定します$optics_valueいつも整数に変換できる文字列です。少数8進数の代わりに整数)。

おすすめ記事