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

需求:

從 all-test-suite.xml 文件中查詢出對應的配置信息,然後將查詢出的信息替換至suite.xml文件中

遇到的問題:

  1. 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章