余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

超实用!18 个开箱即用的 Shell 脚本(1)

xiyangw 2023-05-14 11:41 14 浏览 0 评论

## 1、检测两台服务器指定目录下的文件一致性

```bash

超实用!18 个开箱即用的 Shell 脚本(1)

#!/bin/bash

######################################

检测两台服务器指定目录下的文件一致性

#####################################

#通过对比两台服务器上文件的md5值,达到检测一致性的目的

dir=/data/web

b_ip=192.168.88.10

#将指定目录下的文件全部遍历出来并作为md5sum命令的参数,进而得到所有文件的md5值,并写入到指定文件中

find $dir -type f|xargs md5sum > /tmp/md5_a.txt

ssh $b_ip "find $dir -type f|xargs md5sum > /tmp/md5_b.txt"

scp $b_ip:/tmp/md5_b.txt /tmp

#将文件名作为遍历对象进行一一比对

for f in `awk '{print 2} /tmp/md5_a.txt'`do

#以a机器为标准,当b机器不存在遍历对象中的文件时直接输出不存在的结果

if grep -qw "$f" /tmp/md5_b.txt

then

md5_a=`grep -w "$f" /tmp/md5_a.txt|awk '{print 1}'`

md5_b=`grep -w "$f" /tmp/md5_b.txt|awk '{print 1}'`

#当文件存在时,如果md5值不一致则输出文件改变的结果

if [ $md5_a != $md5_b ]then

echo "$f changed."

fi

else

echo "$f deleted."

fi

done

```

## 2、定时清空文件内容,定时记录文件大小

```bash

#!/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

```

## 3、检测网卡流量,并按规定格式记录在日志中

```bash

#!/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

```

## 4、计算文档每行出现的数字个数,并计算整个文档的数字总数

```bash

#!/bin/bash

#########################################################

#计算文档每行出现的数字个数,并计算整个文档的数字总数

########################################################

#使用awk只输出文档行数(截取第一段)

n=`wc -l a.txt|awk '{print $1}'`

sum=0

#文档中每一行可能存在空格,因此不能直接用文档内容进行遍历

for i in `seq 1 $n`do

#输出的行用变量表示时,需要用双引号

line=`sed -n "$i"p a.txt`#wc -L选项,统计最长行的长度

n_n=`echo $line|sed s'/[^0-9]//'g|wc -L`

echo $n_nsum=$[$sum+$n_n]

done

echo "sum:$sum"

```

### 杀死所有脚本

```bash

#!/bin/bash

################################################################

#有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,

#导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。

################################################################

ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9

```

## 5、从 FTP 服务器下载文件

```bash

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage: $0 filename"

fi

dir=$(dirname $1)

file=$(basename $1)

ftp -n -v << EOF # -n 自动登录

open 192.168.1.10 # ftp服务器

user admin password

binary # 设置ftp传输模式为二进制,避免MD5值不同或.tar.gz压缩包格式错误

cd $dir

get "$file"

EOF

```

## 6、连续输入5个100以内的数字,统计和、最小和最大

```bash

#!/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

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

```

### 用户猜数字

```bash

#!/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

```

## 7、监测 Nginx 访问日志 502 情况,并做相应动作

假设服务器环境为 lnmp,近期访问经常出现 502 现象,且 502 错误在重启 php-fpm 服务后消失,因此需要编写监控脚本,一旦出现 502,则自动重启 php-fpm 服务。

```bash

#场景:

#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

```

## 8、将结果分别赋值给变量

```bash

应用场景:希望将执行结果或者位置参数赋值给变量,以便后续使用。

方法1:

for i in $(echo "4 5 6"); do

eval a$i=$idone

echo $a4 $a5 $a6

方法2:将位置参数192.168.1.1{1,2}拆分为到每个变量

num=0

for i in $(eval echo $*);do #eval将{1,2}分解为1 2

let num+=1

eval node${num}="$i"

done

echo $node1 $node2 $node3

# bash a.sh 192.168.1.1{1,2}

192.168.1.11 192.168.1.12

方法3:arr=(4 5 6)

INDEX1=$(echo ${arr[0]})

INDEX2=$(echo ${arr[1]})

INDEX3=$(echo ${arr[2]})

```

## 9、批量修改文件名

```bash

示例:

#touch article_{1..3}.html

#lsarticle_1.html article_2.html article_3.html

目的:把article改为bbs

方法1:

for file in $(ls *html); do

mv $file bbs_${file#*_}

# mv $file $(echo $file |sed -r 's/.*(_.*)/bbs\1/')

# mv $file $(echo $file |echo bbs_$(cut -d_ -f2)

done

方法2:

for file in $(find . -maxdepth 1 -name "*html"); do

mv $file bbs_${file#*_}done

方法3:

#rename article bbs *.html

```

### 把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

1)准备测试文件,文件名为2.txt

```bash

第1行1234567不包含字母

第2行56789BBBBBB

第3行67890CCCCCCCC

第4行78asdfDDDDDDDDD

第5行123456EEEEEEEE

第6行1234567ASDF

第7行56789ASDF

第8行67890ASDF

第9行78asdfADSF

第10行123456AAAA

第11行67890ASDF

第12行78asdfADSF

第13行123456AAAA

```

2)脚本如下:

```bash

#!/bin/bash

###############################################################

把一个文档前五行中包含字母的行删掉,同时删除6到10行包含的所有字母

##############################################################

sed -n '1,5'p 2.txt |sed '/[a-zA-Z]/'d

sed -n '6,10'p 2.txt |sed s'/[a-zA-Z]//'g

sed -n '11,#39;p 2.txt

#最终结果只是在屏幕上打印结果,如果想直接更改文件,可将输出结果写入临时文件中,再替换2.txt或者使用-i选项

```




相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: