您的位置:首页 > 运维架构 > Shell

shell 文件中使用sed/cut/grep命令和变量

2017-12-08 15:26 549 查看

需求:

从 all-test-suite.xml 文件中查询出对应的配置信息,然后将查询出的信息替换至suite.xml文件中

遇到的问题:

sed命令中包含变量,执行无效果:

问题现象:在命令行窗口执行
sed -n '/123/p' file.xml
没问题,但是写入shell文件中,用sh执行时并无效果。

根本原因:在sed命令中使用了变量,导致失败。

解决方法:在sed命令中的变量前后加上单引号,如
sed -n '/'$CASE_NUM'/p' $ALL_SUITE
或参考这个文章:在sed中引入shell变量的四种方法

代码:

#!/bin/sh
# 判断输入参数是否为空
if [ "$1" = "" ];then
echo "Need print case number!"
exit 1
fi

ALL_SUITE=all-test-suite.xml
SUITE_FILE=suite.xml
CASE_NUM=${1}

# 从all-test-suite.xml文件中查找需要的信息
CASE_NAME=`sed -n '/'$CASE_NUM'/p' $ALL_SUITE | sed -n '1p' | cut -d '"' -f 2`
CLASS_NAME=`sed -n '/'$CASE_NUM'/p' $ALL_SUITE | sed -n '2p' | cut -d '"' -f 2`

if [ "$CASE_NAME" = "" ];then
echo "Can not find case number from ${ALL_SUITE}"
exit 1
fi

# 从suite.xml文件中查找需要替换的字符串并替换
REPLACE_CASE_NAME=`grep 'test name=' $SUITE_FILE | cut -d '"' -f 2`
sed -i 's/'${REPLACE_CASE_NAME}'/'${CASE_NAME}'/g' $SUITE_FILE

REPLACE_CLASS_NAME=`grep 'class name=' $SUITE_FILE | cut -d '"' -f 2`
sed -i 's/'${REPLACE_CLASS_NAME}'/'${CLASS_NAME}'/g' $SUITE_FILE

cat $SUITE_FILE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell