2

这是我的代码的一部分:

FCWWN=`fcinfo hba 端口 | grep HBA | awk '{打印 $4}'`

对于我在 ${FCWWN}
做
    FCREMOTE=`fcinfo 远程端口-p ${i} | grep 远程 | 瑙克'{打印 $4}'`
    PRODUCT=`/usr/sbin/luxadm 显示 ${FCREMOTE} | grep 产品 | nawk -F: '{打印 $2}'`
    CAPACITY=`/usr/sbin/luxadm 显示 ${FCREMOTE} | grep 容量 | nawk -F: '{打印 $2}'`
    LUNNAME=`/usr/sbin/luxadm 显示 ${FCREMOTE} | grep /dev/rdsk | grep -i -v 设备`
    FCSTATE=`fcinfo hba 端口 ${i} | grep 状态:| 瑙克'{打印 $2}'`
    回声“”
    echo -e FC 端口 WWN "\033[1m \E[36;40m ${i} \033[0m 是 \033[1m \E[37;42m ${FCSTATE} \033[0m”; 回声 -ne "\E[0m"
    printf "############################################### ##################################\n"
    printf "%-6s %9s %18s \n" "LUN:" "存储" "磁盘"
    printf "%-6s %9s %18s \n" " " "类型" "大小"
    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 MB
  /dev/rdsk/c4t60060E80102A8AF005119C37000000C0d0s2 DF600F 131072.000 MB
  /dev/rdsk/c4t60060E80102A8AF005119C370000016Cd0s2 DF600F 65536.000 MB
  /dev/rdsk/c4t60060E80102A8AF005119C3700000028d0s2 DF600F 262144.000 MB
  /dev/rdsk/c4t60060E80102A8AF005119C37000000E1d0s2 DF600F 65536.000 MB

任何帮助将不胜感激。

4

2 回答 2

1

一种快速的方法是将三个多行字符串转换为数组:

# 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' 总是会换行,对吗?

你也可以把它写成一个 awk 脚本。

或者至少通过重写脚本的前面部分来减少您开始的进程数量,例如

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

而且,当您使用 nawk 时,这对我来说就是 solaris。也许您正在编写 /bin/sh (bourne shell 脚本),但如果没有,反引号自 1995 年以来已被弃用(至少)。使用现代命令替换,如

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

IHTH

于 2012-08-17T21:38:19.553 回答