例子1 每日一文件
要求
按照xxxx年-xx月-xx日每日生成一个文件
例如生成文件为2017-02-20.log
不用考虑cron
核心:
date用法
df命令
#!/bin/bash
time=`date+%F`
dir=/data/logs/disklog
if [ ! -de $dir ]
then
mkdir -p $dir
fi
df -h >$dir/$time.log
find $sdir/ -mtime +365 | xargs rm
例子2 根据日志统计访问量
要求:统计日志中每个IP 访问量有多大
核心:awk、sort、uniq
#!/bin/bash
awk '{print $1} ' 1.log | sort |uniq -c | sort -n -r
例子3 统计内存总使用量
要求:写一个脚本计算一下linux系统所有进程占用内存大小的和
核心:ps用法(ps aux )for循环、加法运算
#!/bin/bash
for n in `ps aux | grep -v 'TIME COMMAND' | awk '{print $6}' `
do
sum=$[$sum+$n]
done
echo $sum
~
例子4 检测机器存活
要求:设计一个脚本,架空远程的一台机器(假设IP为180.163.26.39)的存活状态,当发现宕机时发一封邮件给自己
核心要点
ping -c10 180.163.26.39
#!/bin/bash
a=` ping -c5 192.168.1.132 | grep 'packet' | awk -F '%' '{print $1}' | awk '{print $NF}'`
name=123@qq.com
if [ -z "$n" ]
then
echo "脚本有问题"
python mail.py $name "检测机器存活脚本$0有问题" “获取变量的值为空”
exit
else
n1=`echo $a | s/[0-9]//g`
if [ -n "$n" ]
then
echo "脚本有问题"
python mail.py $name "检测机器存活脚本$0有问题" “获取变量的值不是纯数字”
fi
fi
while :
do
if [ $a -ge 50 ]
then
python /root/bin/mail.py $name "机器宕机" "丢包率为$a%"
fi
sleep 30
done
例子5 批量修改文件
要求:找到/123目录下所有后缀名为.txt的文件
1.批量修改txt为txt.bak
2.把所有哦.bak文件打包压缩为123.tar.gz
3.批量还原文件的名字,即把增加的.bak再删除
核心:
find 用来查找所有.txt文件
tar打包一堆文件
还原文件名用for还原
#!/bin/bash
find /123/ -type f -name "*.txt" >/tmp/txt.list
for f in `cat /tmp/txt.list`
do
mv $f $f.bak
done
#find /123/ -type f -name *.txt | xargs -1 mv {} {}.bak
#find /123/ -type f -name *.txt -exec mv {} {}.bak \;
for f in `cat /tmp/txt.list`
do
echo $f.bak
done > /tmp/txt.bak.list
tar -czvf 123.tar.gz `cat /tmp/txt.bak.list`
for f in `cat /tmp/tmp.txt.list`
do
mv $f.bak $f