目录一、什么是shell
二、shell脚本的运用场景
三、常用的shell脚本
四、总结
一、什么是shellshell 是一个应用程序,它连接了用户和 Linux 内核,让用户能够更加高效、安全、低成本地使用 Linux 内核,这就是 shell 的本质。
简单来说,我们就是通过shell来操作Linux。下面我来分享下我之前工作中常用的一些shell脚本。
二、shell脚本的运用场景掌握shell脚本的使用方式在我们环境管理上是非常有帮助的。
举例子,我们可以通过shell脚本检测测试开发环境的应用进程是否存在,若有异常可以发送钉钉通知或者邮件通知;检测应用是否正常启动;定时清理测试开发环境的日志文件,缓存文件等;等等一系列环境问题都可通过shell来帮我们实现。
三、常用的shell脚本1、for循环
#!/usr/bin/env bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:for循环.#-----------------------------------------------------------------------------for1() { array=(a b c) for i in ${array[@]}; do echo "for循环: ${i}" done}for2() { array1=(a1 b1 c1) array2=(a2 b2 c2) for ((i = 0; i < ${#array1[@]}; i++)); do for ((i = 0; i < ${#array2[@]}; i++)); do echo "for循环 第i=${i}次: ${array1[i]} ${array2[i]}" done done}for3() { array1=(a1 b1 c1) array2=(a2 b2 c2) #数组位置的话需要加! for i in ${!array1[@]}; do for j in ${!array2[@]}; do # ${i} -eq ${j}: 表示参数i和参数j的位置相同 if [ ${i} -eq ${j} ]; then echo "for循环 第i=${i} j=${j}次: array1=${array1} array2=${array2}" echo "for循环 第i=${i} j=${j}次: array1=${array1[$i]} array2=${array2[$j]}" echo " " fi done done}for1for2for3
2、检测服务
#!/bin/bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:检查服务进程是否存在, 若不存在则进行钉钉通知.#-----------------------------------------------------------------------------time=$(date +%Y-%m-%d_%H:%M:%S)# content里面的参数需要加 ''funDingTalk() { curl 'https://oapi.dingtalk.com/robot/send?access_token=1234567890' -H 'Content-Type: application/json' -d '{"msgtype": "text", "text": { "content": "'$time' '${HOSTNAME}' '$1' has been killed" } }'}pid_check() { pid=$(ps aux | grep $1 | grep -v grep | awk '{print $2}') if [ "$pid" ]; then echo -e "33[32m$time $1 $pid 存在进程n33[0m" else echo -e "33[31m$time $1 无进程n33[0m" funDingTalk $1 fi}app_list=(app1 app2 app3 app4)for i in ${app_list[@]}; do pid_check $idone
3、读取txt
#!/bin/bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:读取txt内容, 切割字符串.#-----------------------------------------------------------------------------array1=$(cat ./demo.txt)array2='a,b,c'for arr in ${array1}; do vars=(${arr//,/ }) echo "获取变量1: ${vars[0]} ${vars[1]} ${vars[2]}" for var in ${vars[@]}; do echo "获取变量2: ${var}" done echo " "donedemo.txt内容如下:a1,a2,a3b1,b2,b3c1,c2,c3
4、检查输出是否包含关键字
#!bin/bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:检测启动后输出的日志是否包含关键字, 包含在退出程序, 不包含则继续.#-----------------------------------------------------------------------------var=`cd /tmp/bin && su username stop.sh; su username start.sh`echo "var关键字: $var"if [[ $var = *not* ]];then echo "包含关键字啦, 退出" exit 1else echo "不包含关键字, 正常输出"fi
5、清除文件
#!/bin/bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:清除文件.#-----------------------------------------------------------------------------echo "清除3天前的tmp|zip文件"find /tmplogs/catalina.out); do cat /dev/null >$idoneecho "清除僵尸进程"for n in $(lsof | grep delete | awk '{print $2}'); do echo $n kill -9 $ndone
6、批量给文件名添加前缀
#!/usr/bin/env bash#-----------------------------------------------------------------------------# author: wmh# 脚本说明:批量给文件名添加前缀, 只支持文件, 不支持文件夹、注:cp表示复制, mv表示剪切#-----------------------------------------------------------------------------cd /tmpfor i in $(ls); do cp -rf $i "prefix_"$idone
相关脚本我已经放到仓库里面了,有需要的小伙伴可以自取:
https://github.com/WEIMHaaa/wei-notebook.githttps://gitee.com/weimenghua/wei-notebook.git
四、总结
掌握环境管理的能力是作为测试工程师很重要的技能之一,挖掘团队测试过程中遇到的痛点,将阻碍研发效率的一切问题作为切入点,去想方案进行解决。
关注【嘎嘎软件测试】
搞测试,不迷路
呱呱大王本呱带你飞!
嘎嘎软件测试
本公众号将分享个人成长、团队管理、软件测试技能知识等内容,更新频率一周两篇,做到有思想、有观点、有深度,欢迎订阅。