출력으로 여러 줄을 포함하는 명령이 있습니다. 이를 처리하려면 각 줄을 다른 명령의 소스로 사용해야 합니다. 변수를 할당하고 반복해 보았지만 실패했습니다.
이것은 명령줄의 출력입니다.
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** )