Linux Shell脚本中捕获外部CLI操作返回的模型句柄值的方法
Linux Shell脚本中捕获外部CLI操作返回的模型句柄值的方法
嗨,我来帮你搞定这个问题!要从create model命令的输出里捕获那个十六进制模型句柄,我们可以借助Shell的命令替换和常用的文本处理工具,下面给你几种简单可靠的实现方式:
方法一:用awk直接提取目标值
awk是处理结构化文本的利器,因为你的输出格式固定(created model handle = 0x2004332),我们可以匹配包含指定字符串的行,然后提取该行的最后一个字段(也就是那个十六进制值):
# 直接将命令输出通过管道传给awk,提取后赋值给变量 MODEL_HANDLE=$(${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val="${FNAME}" attr=0xd70000,val="${MTL}" | awk '/created model handle =/ {print $NF}')
解释:
/created model handle =/:匹配包含这个固定字符串的行$NF:表示当前行的最后一个字段,正好是你需要的模型句柄
方法二:用sed做字符串替换提取
如果你更习惯用sed,可以通过替换掉不需要的前缀内容来得到目标值:
MODEL_HANDLE=$(${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val="${FNAME}" attr=0xd70000,val="${MTL}" | sed -n 's/^created model handle = *//p')
解释:
-n:让sed只输出我们处理后的行s/^created model handle = *//p:把行开头的created model handle =(包括后面的任意空格)替换为空,然后打印剩下的部分
方法三:先保存输出再提取(更易维护)
如果后续可能需要用到命令的其他输出内容,建议先把所有输出保存到临时变量,再从中提取模型句柄,这样脚本可读性更强:
# 先保存create命令的全部输出 CREATE_RESULT=$(${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val="${FNAME}" attr=0xd70000,val="${MTL}") # 从保存的输出中提取模型句柄 MODEL_HANDLE=$(echo "$CREATE_RESULT" | awk '/created model handle =/ {print $NF}')
注意事项
如果发现MODEL_HANDLE变量是空的,大概率是因为create命令把结果输出到了**标准错误(stderr)**而不是标准输出(stdout),这时候需要把stderr重定向到stdout,只需要在命令末尾加上2>&1即可:
MODEL_HANDLE=$(${CLIPATH}/create model mth=0xd70002 attr=0x1006e,val="${FNAME}" attr=0xd70000,val="${MTL}" 2>&1 | awk '/created model handle =/ {print $NF}')
之后你就可以在脚本的后续流程中直接使用$MODEL_HANDLE这个变量啦!
备注:内容来源于stack exchange,提问作者Dan Lundwall
相关产品推荐
相关产品推荐

