각 출력 줄에 변수를 할당하고 bash에서 반복합니다.

각 출력 줄에 변수를 할당하고 bash에서 반복합니다.

출력으로 여러 줄을 포함하는 명령이 있습니다. 이를 처리하려면 각 줄을 다른 명령의 소스로 사용해야 합니다. 변수를 할당하고 반복해 보았지만 실패했습니다.

이것은 명령줄의 출력입니다.

r_mqsc -m ABCD -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'

 CHANNEL(TO.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.MQ95XRB01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRC01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRL01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.MQ95XRN01.SSL) CHLTYPE(CLUSSDR)
 CHANNEL(TO.XA.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.XB.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)
 CHANNEL(TO.XN.MQ95XCAT02.SSL) CHLTYPE(CLUSRCVR)

이제 각 줄(전체 줄)을 다른 명령에 입력해야 합니다.

이와 같이

r_mqsc -m ABCD -r "ALTER $VARIABLE SSLCIPH('123_ABC_XYZ')" -l

이것은 실패한 내 스크립트입니다.

_chl="$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}')"
chlcnt=$(r_mqsc -m MQ95XCAT02 -r "DIS CHL(*) WHERE(SSLCIPH EQ TLS_RSA_WITH_AES_256_CBC_SHA)" -l |awk '/Connected/,0'|grep -v Connected |awk -F'SSLCIPH' '{print $1}'|wc -l)
echo "$_chl"
set -A strqmgrs ${_chl}
i=$chlcnt
arrayindex=0
while [ i -ne 0 ]
do
 chl=${strqmgrs[$arrayindex]}

r_mqsc -m MQ95XCAT02 -r "ALTER $chl SSLCIPH('TLS_RSA_WITH_AES_256_CBC_SHA256')" -l

i=$((i-1))
 arrayindex=$((arrayindex+1))
done

$chl 변수는 다음과 같습니다

ALTER CHLTYPE--> 전체 라인이 아닌 실제 출력 라인에서만 CHLTYPE이라는 ​​단어를 가져옵니다.

답변1

C 코드를 작성하는 것처럼 bash 스크립트를 작성하지 마십시오(또는 그 반대).

cmd |\
while IFS= read -r line
do
  ...
done

답변2

루프 내에서 변수 설정을 유지해야 하는 경우 다음과 같이 수행하십시오.

while read -r line 
do
  stuff

done < <( **command-line** )

관련 정보