linux shell脚本linux编写脚本文件?


导读
今天主要分享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
超详细的5个shell脚本实例分享,值得收藏
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"
超详细的5个shell脚本实例分享,值得收藏超详细的5个shell脚本实例分享,值得收藏
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
超详细的5个shell脚本实例分享,值得收藏
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个shell脚本实例分享,值得收藏
输出结果:超详细的5个shell脚本实例分享,值得收藏
5、杀死所有脚本#!/bin/bash
################################################################
#有一些脚本加入到了cron之中,存在脚本尚未运行完毕又有新任务需要执行的情况,
#导致系统负载升高,因此可通过编写脚本,筛选出影响负载的进程一次性全部杀死。
################################################################
ps aux|grep 指定进程名|grep -v grep|awk '{print $2}'|xargs kill -9
超详细的5个shell脚本实例分享,值得收藏
本文原创地址:https://www.linuxprobe.com/shell-share.html编辑:王华超,审核员:逄增宝

一、shell是什么
二、shell脚本如何执行
2.1 新建一个shell脚本
## 第一步新建一个shell脚本
vim aaa.sh
## 内容如下,#!/bin/bash 表示shell脚本的执行协议,必须要写
#!/bin/bash
echo "hello word!!!"
2.2 执行方式
方式一:先给脚本权限,在输入脚本的绝对路径或相对路径
chmod 777 aaa.sh
./aaa.sh
方式二:★直接用sh + 脚本,不需要权限
sh aaa.sh
三、句法
3.1 shell变量
定义变量的规则:将命令的返回值赋给变量(重点)多行注释
3.1.1 系统变量
#!/bin/bash
echo "HOME=$HOME"
echo "PWD=$PWD"
echo "SHELL=$SHELL"
echo "USER=$USER"
3.1.2 自定义变量
echo 自定义变量
AAA=100
BBB=张三
# 撤销变量
unset BBB
echo AAA=$AAA
echo BBB=$BBB
3.1.3 静态变量
静态变量不能 unset
echo 静态变量
readonly CCC=200
echo 静态变量CCC=$CCC
3.1.4 配置环境变量
export 变量名=变量值
(功能描述:将shell变量输出为环境变量)
source 配置文件
(功能描述:让修改后的配置信息立即生效)
echo $变量
(功能描述:查询环境变量的值
vim /opt/profile
## 在其他添加
export TOMCAT_9001=/opt/tomcat_9001
## 使得环境变量生效
source /etc/profile
## 验证
echo $TOMCAT_9001
3.1.5 位置参数变量
注意注意:再center7.x以后 $* 和 $@ 是一样的,都是分开的多个参数aaa.sh
echo ------------------
echo 位置参数变量
echo "各个参数:$0,$1,$2"
echo "参数:$*"
echo "参数:$@"
echo "参数个数:$#"
执行
sh aaa.sh 100 200 300
3.1.6 预定义变量
shell设计者预算定义好的参数echo 预定义参数
echo "当前的进程号:$$"
# 后台运行aaa.sh
./bbb.sh $
echo "后台运行的最后的进程号:$!"
echo "上一个命令的返回值:$?"
3.2 运算符
echo 运算符
## 注意这里是2个小括号才可以
echo "1+1=$((1+1))"
## 推荐
echo "1+1=$[1+1]
3.3 条件判断语句
echo 条件判断
if [ "ok" = "ok" ]
then
echo ok
fi
if [ 1 -lt 1 ]
then
echo 小于
fi
if [ -r aaa.sh ]
then
echo 可以读
fi
if [ -f aaa.sh ]
then
echo 常规文件
fi
3.4 流程控制 if case for while
3.4.1 if 条件判断
echo 小于
fi
if [ -r aaa.sh ]
then
echo 可以读
fi
if [ -f aaa.sh ]
then
echo 常规文件
fi
3.4.2 case 选择
read -p "请输入星期:" DAY
echo case 语句
case $DAY in
"1")
echo "星期一"
;;
"2")
echo "星期二"
;;
"3")
echo "星期三"
;;
*)
echo "星期天"
;;
esac
3.4.3 for循环
echo "for的两种用法:"
for i in $@
do
echo "then num is $i"
done
SUM=0
for((i=1;i<100;i++))
do
SUM=$[$SUM+$i]
done
echo "SUM=$SUM"
3.4.4 while循环
echo while 循环
i=1
WSUM=0
while [ $i -le $1 ]
do
WSUM=$[$WSUM+$i]
i=$[$i+1]
done
echo "WSUM=$WSUM"
3.5 read读取控制台输入
echo 从前台输入
## 10秒内输入
read -t 10 -p "10秒内输入:" DAYTIME
echo $DAYTIME
3.6 ★函数
3.6.1 系统函数
basename 函数 获取文件名
dirname 函数 获取文件路径
echo 系统函数
echo "dirname"
$(dirname /usr/myshell/aaa.sh)
echo "basename" $(basename /usr/myshell/aaa.sh)
echo "basename" $(basename /usr/myshell/aaa.sh .sh)
3.6.2 ★自定义函数

我要回帖

更多关于 linux编写脚本文件 的文章