实际工作中用到的shell命令 - sed

2022-06-27 18:10:29 浏览数 (1)

背景

目前跑的接口自动化是通过Testng Jenkins来做的, 但是项目可能跑在不同的平台上, 不同的平台有不同的ip.

目前是使用了Jenkins的参数化构建功能, 每次跑的时候,手动输入一个ip,然后对该ip的服务进行自动化测试.

Testng框架的配置文件是application.properties, 我们将服务的ip记录在这个文件中.

需求

根据从Jenkins传入的参数, 动态修改application.properties中的ip变量,然后进行后续测试工作.

application.properties 示例

代码语言:javascript复制
server_ip=http://192.168.100.100

port=9000

path=/home/data

需求分析

目前想到的方法有2个:

  • 用python脚本读取文件,正则替换制定文本,生成个新文件
  • 用shell脚本来操作

从最简化考虑,优先考虑shell的方法.

Linux有3剑客: grep ,sed, awk.其中grep主要做过滤, sed主要做文本的相关处理(如修改替换等),awk主要做数据处理,报告输出等。所以应该考虑使用sed命令来解决此问题.

实际操作

  1. 从网上搜了下相关的sed用法, 参考链接: https://blog.csdn.net/ganfanren00001/article/details/122765854

本次用到的sed命令截图

  1. 举一反三, 我是这样使用的
代码语言:javascript复制
sed "/server_ip=/c server_ip=http://192.168.200.200" application.properties
  1. 但是这样有个问题,这样修改的只是暂时的,并没实际影响到真实的文件.其实sed有个-i参数,加上这个参数才会对真实的文件生效, 所以优化下就是
代码语言:javascript复制
sed -i "/server_ip=/c server_ip=http://192.168.200.200" application.properties
  1. 这个命令在本地跑通了,接下来就是集成到Jenkins中使用这个命令
  • 首先在Jenkins中,选择参数化构建,我定义的参数名是server_ip
  • 在shell脚本中使用这个变量即可

注: Jenkins使用传入变量的格式为:${变量名}

代码语言:javascript复制
#!/bin/bash

echo "传入的ip是:${server_ip}"

# 根据传入参数修改项目的ip
cd /home/data/jenkins/workspace/maven_testng/maven_testng/src/main/resources
sed -i "/server_ip=/c server_ip=http://${server_ip}" application.properties
echo "项目已更改为传入的ip: ${server_ip}"

踩坑点: sed 命令后面要使用双引号, 不能使用单引号, 否则会将变量识别成普通字符串!

0 人点赞