이 명령을 실행할 때:
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
이 문제를 해결하는 한 가지 방법은 다음과 같습니다.
배열 생성
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