このコマンドを実行するとき:
cat output | grep -i state | sort | uniq | awk '{print $ 3}')
出力は次のとおりです
00x1
00x5
0080
配列に割り当てるには、次の手順を実行します。
STATUS_ARRAY=($(cat output | grep -i state | sort | uniq | awk '{print $ 3}'))
しかし、成功しませんでした。このコマンドの出力はシステムによって異なりますので、それぞれを確認したいと思います。
たとえば、21の州があります。 -- このコードは次のとおりです。
for STATUS in "${STATUS_ARRAY=[@]}"
do
if [ "$STATUS" == '00x1' ] && [ "$STATUS" == '00x5' ];
then
echo " everything is normal"
else [ "$STATUS" == '0080' ];
echo " check your system "
fi
done
しかし、配列が機能しない場合は何も返されません。これは何の問題ですか?
その内容はoutput
次のとおりです。
State = 00x1
State = 00x5
State = 0080
答え1
この問題を解決する1つの方法は次のとおりです。
配列の作成
mapfile -t array < <(awk '{printf("%s\n", $NF)}' output)
その後、インデックスを繰り返し、インデックスに基づいて必要なすべての操作を実行します。たとえば、
for status in "${array[@]}"
do
if [[ $status == @(00x1|00x5) ]]
then echo "All ok"
else echo "All NOT ok"
fi
done
答え2
「ここに文字列」、「パラメータ拡張」、およびcase
...構造を使用するesac
のはどうですか?
readarray -t TMP <<< $(grep -i "state" output | sort -u)
for STATUS in "${TMP[@]##* }"
do case $STATUS in
00x[15]) echo "everything normal";;
0080) echo "check system";;
*) echo "error: status unknown";;
esac
done
check system
everything normal
everything normal