#!/usr/bin/ksh -p
hotplug_dev="/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2"
tmpfile=$(mktemp)
cat > $tmpfile << EOF
/
/ ONLINE
/pci @340
{ PCI Express Root Complex }
/pci@340 1,0> ONLINE
/pci@340/pci@1
/pci@340/pci@1 0,0> ONLINE
/pci@340/pci@1/pci@0
/pci@340/pci@1/pci@0 5,0> ONLINE
/pci@340/pci@1/pci@0/pci@5
/pci@340/pci@1/pci@0/pci@5 0,2> ONLINE
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp/disk
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp/st
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,2/fp@0,0
{ IO Multipathing PHCI (online) }
{ IOV virtual function 'pci.0,2' }
{ IOV virtual function 'pci.0,3' }
/pci@340/pci@1/pci@0/pci@5 0,3> ONLINE
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp/disk
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp/st
/pci@340/pci@1/pci@0/pci@5/SUNW,emlxs@0,3/fp@0,0
{ IO Multipathing PHCI (online) }
EOF
hotplug_dev_format=$(echo $hotplug_dev|sed 's/\//\\\//g')
#hotplug_dev_format=${hotplug_dev//\//\\\/}
print $hotplug_dev_format
print "sed -n '/^${hotplug_dev_format}$/=' $tmpfile"
hotplug_dev_num=$(sed -n '/^${hotplug_dev_format}$/=' $tmpfile)
print $hotplug_dev_num
这段代码是某一个function的片段,其主要就是想获得hotplug_dev在tmpfile文件中所处的行数,继而通过该行数去取得想要的某一行
这段代码中的需要注意的点:
print "sed -n '/^${hotplug_dev_format}$/=' $tmpfile"
这句的结果就是
sed -n '/^$\/pci@340\/pci@1\/pci@0\/pci@5\/SUNW,emlxs@0,2$/=' $tmpfile
那么接下来执行这句
hotplug_dev_num=$(sed -n '/^${hotplug_dev_format}$/=' $tmpfile)
按理说应该执行的就是
sed -n '/^$\/pci@340\/pci@1\/pci@0\/pci@5\/SUNW,emlxs@0,2$/=' $tmpfile
但是其实得到的是空值,我自己手工在终端得到的就是12,但是在脚本中运行却为空值当换成下面的双引号后就会得到正确的结果.
hotplug_dev_num=$(sed -n "/^${hotplug_dev_format}$/=" $tmpfile)
这里就涉及到了单引号双引号的问题了