超详细的5个Shell脚本实例分享(值得收藏)

概述

今天主要分享5个shell脚本实例,大家可以借鉴下里面的思路,看下有没另外一种实现方式。

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

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

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

#!/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_n
 sum=$[$sum+$n_n]
done
 echo "sum:$sum" 

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

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

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

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

输出结果:

5、杀死所有脚本

#!/bin/bash
################################################################
#有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,
#导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。
################################################################
ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 输出执行操作和打印日志的shell脚本实例

    cat /mnt/log_function.sh #!/bin/bash #log function ####log_correct函数打印正确的输出到日志文件 function log_correct () { DATE=`date "+%Y-%m-%d %H:%M:%S"` ####显示打印日志的时间 USER=$(whoami) ####那个用户在操作 echo "${DATE} ${USER} execute $0 [INFO] $@" >>/v

  • ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 server 亲测!! ssh执行远程操作 命令格式 复制代码 代码如下: ssh -p $port $user@$p 'cmd'    $port : ssh连接端口号  $user: ssh连接用户名  $ip:ssh连接的ip地址  cmd:远程服务器需要执行的操作 准备工作 基于公私钥认证或者用户

  • Shell脚本遍历一个日期范围实例

    如果跟shell脚本打交道,遍历一个时间范围是很常见的事情,那么今天就跟大家分享一下: 复制代码 代码如下: #!/usr/bin/env bash date1="$1" date2="$2" echo "date1: $date1" echo "date2: $date2" tempdate=`date -d "-0 day $date1" +%F` enddate=`date -d "-0 d

  • 备份shell脚本实例代码

    1.backup_run.sh 复制代码 代码如下: #!/bin/sh    # backup_run    # script to run the backups    # loads in a setting file for the user to change    SOURCE=/home/bob/backup.defaults    check_source()    {        # check_source        # can we load the file    

  • shell脚本 自动创建用户详解及实例代码

    shell脚本 自动创建用户详解 需求:判断用户zhangsan是否存在,不存在就创建并设置密码为123456 1.vi createuser.sh 2.写入: USER_COUNT=`cat /etc/passwd | grep '^zhangsan:' -c` USER_NAME='zhangsan' if [ $USER_COUNT -ne 1 ] then useradd $USER_NAME echo "123456" | passwd $USER_NAME --stdin

  • Shell脚本中的位置变量参数(特殊字符)实例讲解

    $# : 传递到脚本的参数个数 $* : 以一个单字符串显示所有向脚本传递的参数.与位置变量不同,此选项参数可超过 9个 $$ : 脚本运行的当前进程 ID号 $! : 后台运行的最后一个进程的进程 ID号 $@ : 与$#相同,但是使用时加引号,并在引号中返回每个参数 $- : 显示shell使用的当前选项,与 set命令功能相同 $? : 显示最后命令的退出状态. 0表示没有错误,其他任何值表明有错误. 复制代码 代码如下: #!/bin/sh #param.sh # $0:文件完整路径名

  • Shell脚本编程中常用的数学运算实例

    这部分主要讨论数学相关的shell脚本编程. 加法运算 新建一个文件"Addition.sh",输入下面的内容并赋予其可执行的权限. 复制代码 代码如下: #!/bin/bash echo "Enter the First Number: " read a echo "Enter the Second Number: " read b x=$(expr "$a" + "$b") echo $a + $b =

  • Shell脚本去重的几种方法实例

    测试文件 复制代码 代码如下: [root@bogon ~]# cat >test jason jason jason fffff jason 按 Ctr + D保存 1.sort -u 复制代码 代码如下: [root@bogon ~]# sort -u test fffff jason 2.uniq 复制代码 代码如下: [root@bogon ~]# uniq test jason fffff jason 由此可见,uniq需要先排序后才能去重 3.sort.管道和uniq结合运用 去除重

  • Linux 在Shell脚本中使用函数实例详解

    Linux 在Shell脚本中使用函数实例详解 Shell的函数 Shell程序也支持函数.函数能完成一特定的功能,可以重复调用这个函数. 函数格式如下: 函数名() { 函数体 } 函数调用方式: 函数名 参数列表 实例:编写一函数add求两个数的和,这两个数用位置参数传入,最后输出结果. root@ubuntu:/home/study# vi test3 #!/bin/bash add(){ a=$1; b=$2; z=`expr $a + $b`; echo "The sum is $z&

  • shell脚本之判断输入参数是否为整数值的实例

    在写脚本时,通常会有很多关于命令行参数,变量等的判断其是否存在或者类型是否正确.当判断一个从命令行接收到一个值,需要判断其是否为整型值时,有以下两种方法: 1.用shell命令使其与某个整型值进行计算,通过$?来判断其是否是一个整型值. flag=true read -p "please input a number:" num while $flag do expr $num + 0 &>/dev/null [ $? -eq 0 ] && flag=fa

  • Shell脚本注册到Linux系统服务实例

    注册一个系统服务,开机自启动. 1 脚本编写 #vim test.sh 复制代码 代码如下: #!/bin/bash    #description: hello.sh  #chkconfig: 2345 20 81    EXEC_PATH=/usr/local/  EXEC=hello.sh  DAEMON=/usr/local/hello.sh  PID_FILE=/var/run/hello.sh.pid    . /etc/rc.d/init.d/functions    if [ !

随机推荐