명령의 출력을 배열에 할당

명령의 출력을 배열에 할당

이 명령을 실행할 때:

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

관련 정보