软件测试脚本案例,23个⾮常实⽤的Shell拿来就⽤脚本实例shell脚本是帮助程序员和系统管理员完成费时费⼒的枯燥⼯作的利器,是与计算机交互并管理⽂件和系统操作的有效⽅式。区区⼏⾏代码,就可以让计算机接近按照你的意图⾏事。
为⼤家整理了23个实例,通过23个实战经典脚本实例,展⽰了shell脚本编程的实⽤技术和常见⼯具⽤法。⼤家只需根据⾃⼰的需求,将⽂中这些常见任务和可移植⾃动化脚本推⼴应⽤到其他类似问题上,能解决那些三天两头碰上的⿇烦事。
检测两台服务器指定⽬录下的⽂件⼀致性#!/bin/bash
>>>>>>>##
#检测两台服务器指定⽬录下的⽂件⼀致性
>>>>>>>##
#通过对⽐两台服务器上⽂件的md5值,达到检测⼀致性的⽬的
dir=/data/web
b_ip=192.168.88.10
#将指定⽬录下的⽂件全部遍历出来并作为md5sum命令的参数,进⽽得到所有⽂件的md5值,并写⼊到指定⽂件中
find $dir -type f|xargs md5sum > /tmp/
ssh $b_ip 'find $dir -type f|xargs md5sum > /tmp/'
scp $b_ip:/tmp/ /tmp
#将⽂件名作为遍历对象进⾏⼀⼀⽐对
for f in `awk '{print 2} /tmp/'`
do
#以a机器为标准,当b机器不存在遍历对象中的⽂件时直接输出不存在的结果
if grep -qw '$f' /tmp/
then
md5_a=`grep -w '$f' /tmp/awk '{print 1}'`
md5_b=`grep -w '$f' /tmp/awk '{print 1}'`
#当⽂件存在时,如果md5值不⼀致则输出⽂件改变的结果
if [ $md5_a != $md5_b ]
then
echo '$f changed.'
fi
else
echo '$f deleted.'
fi
done
定时清空⽂件内容,定时记录⽂件⼤⼩
#!/bin/bash
>>>>>>>>>>>>####
#每⼩时执⾏⼀次脚本(任务计划),当时间为0点或12点时,将⽬标⽬录下的所有⽂件内
#容清空,但不删除⽂件,其他时间则只统计各个⽂件的⼤⼩,⼀个⽂件⼀⾏,输出到以时#间和⽇期命名的⽂件中,需要考虑⽬标⽬录下⼆级、三级等⼦⽬录的⽂件
>>>>>>>>>>>>####
logfile=/tmp/`date +%H-%F`.log
n=`date +%H`
if [ $n -eq 00 ] || [ $n -eq 12 ]
then
#通过for循环,以find命令作为遍历条件,将⽬标⽬录下的所有⽂件进⾏遍历并做相应操作
for i in `find /data/log/ -type f`
do
true > $i
done
else
for i in `find /data/log/ -type f`
do
du -sh $i >> $logfile
done
fi
检测⽹卡流量,并按规定格式记录在⽇志中#!/bin/bash
>>>>>>>>>>>
#检测⽹卡流量,并按规定格式记录在⽇志中
#规定⼀分钟记录⼀次
#⽇志格式如下所⽰:
#2019-08-12 20:40
#ens33 input: 1234bps
#ens33 output: 1235bps
>>>>>>>>>>####3
while :
do
#设置语⾔为英⽂,保障输出结果是英⽂,否则会出现bug
LANG=en
logfile=/tmp/`date +%d`.log
#将下⾯执⾏的命令结果输出重定向到logfile⽇志中
exec >> $logfile
date +'%F %H:%M'
#sar命令统计的流量单位为kb/s,⽇志格式为bps,因此要*1000*8
sar -
n DEV 1 59|grep Average|grep ens33|awk '{print $2,'\t','input:','\t',$5*1000*8,'bps','\n',$2,'\t','output:','\t',$6*1000*8,'bps'}' echo '>>>>'
#因为执⾏sar命令需要59秒,因此不需要sleep
done
计算⽂档每⾏出现的数字个数,并计算整个⽂档的数字总数
#!/bin/bash
>>>>>>>>>>>##
#计算⽂档每⾏出现的数字个数,并计算整个⽂档的数字总数
>>>>>>>>>>>#
#使⽤awk只输出⽂档⾏数(截取第⼀段)
n=`wc -awk '{print $1}'`
sum=0
#⽂档中每⼀⾏可能存在空格,因此不能直接⽤⽂档内容进⾏遍历
for i in `seq 1 $n`
do
#输出的⾏⽤变量表⽰时,需要⽤双引号
line=`sed -n '$i'`
#wc -L选项,统计最长⾏的长度
n_n=`echo $line|sed s'/[^0-9]//'g|wc -L`
echo $n_n
sum=$[$sum+$n_n]
done
echo 'sum:$sum'
杀死所有脚本#!/bin/bash
>>>>>>>>>>>>####
#有⼀些脚本加⼊到了cron之中,存在脚本尚未运⾏完毕⼜有新任务需要执⾏的情况,
#导致系统负载升⾼,因此可通过编写脚本,筛选出影响负载的进程⼀次性全部杀死。
>>>>>>>>>>>>####
ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9
从FTP服务器下载⽂件
#!/bin/bash
if [ $# -ne 1 ]; then
echo 'Usage: $0 filename'
fi
dir=$(dirname $1)
file=$(basename $1)
ftp -n -v <
open 192.168.1.10 # ftp服务器
user admin password
binary # 设置ftp传输模式为⼆进制,避免MD5值不同或.压缩包格式错误cd $dir
get '$file'
EOF
连续输⼊5个100以内的数字,统计和、最⼩和最⼤#!/bin/bash
COUNT=1
SUM=0
MIN=0
MAX=100
while [ $COUNT -le 5 ]; do
read -p '请输⼊1-10个整数:' INT
if [[ ! $INT =~ ^[0-9]+$ ]]; then
echo '输⼊必须是整数!'
exit 1
elif [[ $INT -gt 100 ]]; then
shell代码echo '输⼊必须是100以内!'
exit 1
fi
SUM=$(($SUM+$INT))
[ $MIN -lt $INT ] && MIN=$INT
[ $MAX -gt $INT ] && MAX=$INT
let COUNT++
done
echo 'SUM: $SUM'
echo 'MIN: $MIN'
echo 'MAX: $MAX'
⽤户猜数字
#!/bin/bash # 脚本⽣成⼀个 100 以内的随机数,提⽰⽤户猜数字,根据⽤户的输⼊,提⽰⽤户猜对了,# 猜⼩了或猜⼤了,直⾄⽤户猜对脚本结束。# RANDOM 为系统⾃带的系统变量,值为 0‐32767的随机数# 使⽤取余算法将随机数变为 1‐100 的随机数
num=$[RANDOM%100+1]echo '$num' # 使⽤ read 提⽰⽤户猜数字# 使⽤ if 判断⽤户猜数字的⼤⼩关系:‐eq(等于),‐ne(不等于),‐gt(⼤于),‐ge(⼤于等于),# ‐lt(⼩于),‐le(⼩于等于)while :do read -p '计算机⽣成了⼀个 1‐100 的随机数,你猜: ' cai if [ $cai -
eq $num ] then echo '恭喜,猜对了' exit elif [ $cai -gt $num ] then echo 'Oops,猜⼤
了' else echo 'Oops,猜⼩了' fidone
监测Nginx访问⽇志502情况,并做相应动作
假设服务器环境为lnmp,近期访问经常出现502现象,且502错误在重启php-fpm服务后消失,因此需要编写监控脚本,⼀旦出现502,则⾃动重启php-fpm服务。#场景:
#1.访问⽇志⽂件的路径:/data/log/access.log
#2.脚本死循环,每10秒检测⼀次,10秒的⽇志条数为300条,出现502的⽐例不低于10%(30条)则需要重启php-fpm服务
#3.重启命令为:/etc/init.d/php-fpm restart
#!/bin/bash
>>>>>>>>>>>####
#监测Nginx访问⽇志502情况,并做相应动作
>>>>>>>>>>>####
log=/data/log/access.log
N=30 #设定阈值
while :
do
#查看访问⽇志的最新300条,并统计502的次数
err=`tail -n 300 $log |grep -c '502' '`
if [ $err -ge $N ]
then
/etc/init.d/php-fpm restart 2> /dev/null
#设定60s延迟防⽌脚本bug导致⽆限重启php-fpm服务
sleep 60
fi
sleep 10
done
将结果分别赋值给变量
应⽤场景:希望将执⾏结果或者位置参数赋值给变量,以便后续使⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
推荐文章
热门文章
-
随机森林算法的改进方法
2024-10-02 -
基于随机森林算法的风险预警模型研究
2024-10-02 -
Python中的随机森林算法详解
2024-10-02 -
随机森林发展历史
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(八)
2024-10-02 -
随机森林回归模型原理
2024-10-02 -
如何使用随机森林进行时间序列数据模式识别(六)
2024-10-02 -
如何使用随机森林进行时间序列数据预测(四)
2024-10-02 -
如何使用随机森林进行异常检测(六)
2024-10-02 -
随机森林算法和grandientboosting算法 -回复
2024-10-02 -
随机森林方法总结全面
2024-10-02 -
随机森林算法原理和步骤
2024-10-02 -
随机森林的原理
2024-10-02 -
随机森林 重要性
2024-10-02 -
随机森林算法
2024-10-02 -
机器学习中随机森林的原理
2024-10-02 -
随机森林算法原理
2024-10-02 -
使用计算机视觉技术进行动物识别的技巧
2024-10-02 -
基于crf命名实体识别实验总结
2024-10-02 -
transformer预测模型训练方法
2024-10-02
最新文章
-
随机森林算法介绍及R语言实现
2024-10-02 -
基于随机森林优化的神经网络算法在冬小麦产量预测中的应用研究_百度文 ...
2024-10-02 -
基于正则化贪心森林算法的情感分析方法研究
2024-10-02 -
随机森林算法和grandientboosting算法
2024-10-02 -
基于随机森林的图像分类算法研究
2024-10-02 -
随机森林结合直接正交信号校正的模型传递方法
2024-10-02
发表评论