2

これは私のコードの一部です:

FCWWN=`fcinfo hba ポート | グレップ HBA | awk '{print $4}'`

${FCWWN}の私のために
行う
    FCREMOTE=`fcinfo リモート ポート -p ${i} | grep リモート | nawk '{print $4}'`
    PRODUCT=`/usr/sbin/luxadm ディスプレイ ${FCREMOTE} | grep 製品 | nawk -F: '{print $2}'`
    CAPACITY=`/usr/sbin/luxadm display ${FCREMOTE} | グレップ容量 | nawk -F: '{print $2}'`
    LUNNAME=`/usr/sbin/luxadm ディスプレイ ${FCREMOTE} | grep /dev/rdsk | grep -i -v DEVICE`
    FCSTATE=`fcinfo hba ポート ${i} | grep 状態: | nawk '{print $2}'`
    エコー ""
    echo -e FC ポート WWN "\033[1m \E[36;40m ${i} \033[0m is \033[1m \E[37;42m ${FCSTATE} \033[0m"; echo -ne "\E[0m"
    printf "################################################## ####################################\n"
    printf "%-6s %9s %18s \n" "LUN:" "ストレージ" "ディスク"
    printf "%-6s %9s %18s \n" " " "Type" "Size"
    printf "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- \n"
    printf "%-6s\n %9s\n %2s\n" "${LUNNAME}" "${PRODUCT}" "${CAPACITY}"
終わり

出力は次のとおりです。

FC ポート WWN 10000000c9822976 はオンラインです
#################################################### ##################################
LUN: ストレージ ディスク
            タイプ サイズ
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2
  /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2
  /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2
  /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2
  /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2
                DF600F
                DF600F
                DF600F
                DF600F
                DF600F
        131072.000 メガバイト
        131072.000 メガバイト
        65536.000 メガバイト
        262144.000 メガバイト
        65536.000 メガバイト

そして、望ましい出力は次のとおりです。

FC ポート WWN 10000000c9822976 はオンラインです
#################################################### ##################################
LUN: ストレージ ディスク
            タイプ サイズ
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  /dev/rdsk/c4t60060E80102A8AF005119C37000000C2d0s2 DF600F 131072.000 メガバイト
  /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 DF600F 131072.000 メガバイト
  /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 DF600F 65536.000 メガバイト
  /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 DF600F 262144.000 メガバイト
  /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F 65536.000 メガバイト

どんな助けでも感謝します。

4

2 に答える 2

1

簡単な方法の 1 つは、3 つの複数行の文字列を配列に変換することです。

# bash 4 or later
mapfile -t LUN_ARR <<< "$LUNNAME"
mapfile -t PROD_ARR <<< "$PRODUCT"
mapfile -t CAP_ARR <<< "$CAPACITY"

# bash 3
IFS=$'\n' read -d '' -a LUN_ARR <<< "$LUNNAME"
IFS=$'\n' read -d '' -a PROD_ARR <<< "$PRODUCT"
IFS=$'\n' read -d '' -a CAP_ARR <<< "$CAPACITY"

次に、C スタイルのループを使用して配列を単純に反復処理します。

for (( idx=0; idx < ${#LUN_ARR[@]}; idx++ )); do
    printf "%-40s %9s %s\n" "${LUN_ARR[idx]}" "${PROD_ARR[idx]}" "${CAP_ARR[idx]}"
done
于 2012-08-17T22:23:07.703 に答える
0

あなたはとても近くにいます。テストするリソースはありませんが、これで問題が解決すると確信しています。

いいえ

    printf "%-6s\n %9s\n %2s\n" "${LUNNAME}" "${PRODUCT}" "${CAPACITY}"

しかし

    printf "%-6s %9s %2s\n" "${LUNNAME}" "${PRODUCT}" "${CAPACITY}"

余分な '\n' は常に改行を挿入しますよね?

また、これを 1 つの awk スクリプトとして記述することもできます。

または、スクリプトの前の部分を次のように書き直すことで、開始するプロセスの数を少なくとも減らします

PRODUCT=`/usr/sbin/luxadm display ${FCREMOTE} | nawk -F: '/Product/{print $2}'`

そして、nawk を使用しているので、solaris と表示されます。/bin/sh (ボーン シェル スクリプト) を書いているのかもしれませんが、そうでない場合、バックティックは 1995 年以降 (少なくとも) 廃止されています。次のような最新のコマンド置換を使用します

PRODUCT=$(/usr/sbin/luxadm display ${FCREMOTE} | nawk -F: '/Product/{print $2}')

IHTH

于 2012-08-17T21:38:19.553 に答える