如何用bash单次执行sas2ircu读取匹配项写入enc、slot数组
实现方案
你可以通过单次调用sas2ircu+awk暂存匹配值的逻辑,一次性输出所有就绪硬盘的enclosure和slot编号,再写入对应数组,参考代码如下:
# 初始化空数组 enc=() slot=() # 仅执行一次sas2ircu,过滤数据后逐行写入数组 while read -r enc_id slot_id; do enc+=("$enc_id") slot+=("$slot_id") done < <(/root/sas2ircu 0 display | awk ' # 匹配到Enclosure行时暂存编号 /Enclosure #/{ cur_enc = $NF } # 匹配到Slot行时暂存编号 /Slot #/{ cur_slot = $NF } # 匹配到就绪状态时输出暂存的两组编号 /State.*RDY/{ print cur_enc, cur_slot } ')
实现逻辑
- awk 逐行解析
sas2ircu的输出,按顺序暂存每块盘的Enclosure和Slot编号 - 当识别到带RDY标识的就绪状态行时,将暂存的对应编号输出,每行对应一块就绪硬盘
- bash 侧通过
while read循环逐行读取awk输出的两组值,分别追加到enc和slot数组中
执行完成后你可以通过echo ${enc[@]}和echo ${slot[@]}验证数组内容,和你原有两次调用的实现结果完全一致。
内容的提问来源于stack exchange,提问作者clarknova
相关产品推荐
相关产品推荐

