需求:
從 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