各出力行に変数を割り当て、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

おすすめ記事