ここにスクリプトがあります。
#!/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進数の代わりに整数)。
答え2
cut
範囲は含まれているので、3文字を削除しました。スペース、タブ、改行文字など、これらの文字のいずれかが表示されない場合があります。これは文字列を値とは異なります00
。
通常、set -o xtrace
スクリプトを実行するときに何が起こるのかを確認してください。そしてより多くの引用を使用™!