
出力として複数行を含むコマンドがあります。これを処理するには、各行を別のコマンドのソースとして使用する必要があります。変数を割り当てて繰り返し試しましたが失敗しました。
これはコマンドラインの出力です。
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** )