day 15-16 例题16-25

例题16

[1]+  Stopped                 vim 16.sh
[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# fg
vim 16.sh
#Linux系统中是否有自定义用户
#!/bin/bash
v=`awk -F 'release ' '{print $2}' /etc/redhat-release |cut -d '.' -f1`
user()
{
      if [ $1 -eq 0 ]
      then
          echo "系统没有自定义的用户"
      else
          echo "系统存在自定义用户,有$1个"
      fi
}
case $v in
  5|6)
      n=`awk -F ':' '$3>=500' /etc/passwd|wc -l`
      user $n
  ;;
  7)
      n=`awk -F ':' '$3>=1000' /etc/passwd|wc -l`
      user $n
  ;;
  *)
     echo "脚本出错."
  ;;
esac

例题17

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# fg
vim 17.sh
#检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知
dir=/tmp/disk
#!/bin/bash
dir=/tmp/disk
d=`date +%F`
mail=123@qq.com

[ -d $dir ] || mkdir $dir

df >> $dir/$d.log
df -i >> $dir/$d.log

df|sed '1d' |awk -F ' +|%' '$5>=85 {print $7}' > $dir/df.tmp
df -i|sed '1d' |awk -F ' +|%' '$5>=85 {print $7}' > $dir/df_i.tmp

n1=`wc -l $dir/df.tmp|awk '{print $1}'`
n2=`wc -l $dir/df_i.tmp|awk '{print $1}'`

tag=0
if [ $n1 -gt 0 ]
then
    if [ $n2 -gt 0 ]
    then
        tag=11
    else
        tag=10
    fi
else
    if [ $n2 -gt 0 ]
    then
        tag=01
    else
        tag=00
    fi
fi

case $tag in
    11)
        python mail.py $mail "磁盘空间和inode使用率高于85%" "`cat $dir/df.tmp $dir/df_i.tmp|xargs`"
        ;;
    10)
        python mail.py $mail "磁盘空间使用率高于85%" "`cat $dir/df.tmp|xargs`"
        ;;
    01)
        python mail.py $mail "磁盘inode使用率高于85%" "`cat $dir/df_i.tmp|xargs`"
        ;;
    *)
        ;;
esac

例题18

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 18.sh
#每5分钟做一次检测是否有新文件生成,若是有新文件,将新文件的列表输出到一个按年、月、日、时、分为名字的日志里
#!/bin/bash
basedir=/data/web/attachment
t=`date +%Y%m%d%H%M`

find $basedir/ -type f -mmin -5 > /tmp/file.list
n=`wc -l /tmp/file.list|awk '{print $1}'`
if [ $n -lt 0 ]
then
   mv /tmp/file.list /tmp/$t.list
fi

~    

例题19

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 19.sh
#写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10
#!/bin/bash
cat ~/.bash_history |sort |uniq -c |sort -nr |head
~                                                       

例题20

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 20.sh
#当时间是0点和12点时,需要将目录/data/log/下的文件全部清空,其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里
#需要考虑/data/log/目录下的二级、三级、…  等子目录里面的文件
#!/bin/bash
dir=/tmp/log_stat
t=`date +%d%H`
t1=`date +%H`
logdir=/data/log

[ -d $dir ] || mkdir $dir
[ -f $dir/$t.log ] && rm -f $dir/$t.log

if [ $t == "00" -o $t == "12" ]
then
    for f in `find $logdir/ -type f`
    do
        > $f
    done
else
    for f in `find $logdir/ -type f`
    do
        du -sh $f >> $dir/$t.log
    done
fi
~                

例题21

#每一行中出现的数字个数并且要计算一下整个文档中一共出现了几个数字
[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# cat 21.sh 
#!/bin/bash
sum=0
while read line
do
    line_n=`echo $line|sed 's/[^0-9]//g'|wc -L`
    echo $line_n
    sum=$[$sum+$line_n]
done < $1
echo "sum:$sum"
[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# 

例题22

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 22.sh
#检测A机器和B机器/data/web/目录下文件的异同,我们以A机器上的文件作为标准。
比如,假若B机器少了一个a.txt文件,那我们应该能够检测出来,或者B机器上的b.txt文件有过改动,我们也应该能够检测出来(B机器上多了文件不用考虑)。
#!/bin/bash
dir=/data/web
[ -f /tmp/md5.list ] && rm -f /tmp/md5.list
find $dir/ -type f > /tmp/file.list
while read line 
do
    md5sum $line  >> /tmp/md5.list
done < /tmp/file.list

scp /tmp/md5.list B:/tmp/
[ -f /tmp/check_md5.sh ] && rm -f /tmp/check_md5.sh

cat >/tmp/check_md5.sh << EOF
#!/bin/bash
dir=/data/web
n=\`wc -l /tmp/md5.list|awk '{print \$1}'\`
for i in \`seq 1 \$n\`
do
    file_name=\`sed -n "\$i"p /tmp/md5.list |awk '{print \$1}'\`
    md5=\`sed -n "\$i"p /tmp/md5.list|awk '{print \$2}'\`
    if [ -f \$file_name ]
    then
        md5_b=\`md5sum \$file_name\`
        if [\$md5_b != \$md5 ]
        then
            echo "\$file_name changed."
        fi
    else
        echo "\$file_name lose."
    fi
done
EOF
scp /tmp/check_md5.sh B:/tmp/
ssh B "/bin/bash /tmp/check_md5.sh"

例题23

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 23.sh
#检测你的网络流量,并记录到一个日志里。 并且一分钟统计一次
#!/bin/bash
logdir=/tmp/sar_log
file=$logdir/`date +%d%H`.log
t=`date +"%F %H:%M"`

[ -d $logdir ] || mkdir -p $logdir
LANG=en
sar -n DEV 1 5 |grep eth0 |grep "Average" > /tmp/sar.tmp

exec >>$file
echo "$t" 
awk '{print "eth0 input:",$5*8000"bps""\n""eth0 output:",$6*8000"bps"}' /tmp/sar.tmp
echo "#### ###################" 

例题24

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 24.sh
#写一个脚本批量杀死所有sh的进程
#!/bin/bash
for pid in `ps aux |grep clearnen.sh |awk '{print $2}'`
do 
    echo $pid
    kill -9 $pid
done
~             

例题25

[root@iZwz96qzfgxh9l2rk7esxnZ xiti]# vim 25.sh 
#判断你的Linux服务器里是否开启web服务 如果开启了,请判断出跑的是什么服务
#!/bin/bash
n=`netstat -lntp |grep ':80 '|wc -l`
if [ $n -eq 0 ]
then
    echo " it is not listen port 80"

else
    ser=`netstat -lntp |grep ':80 '|awk -F '/' '{print $NF}'|sed 's/ //g'`
    echo "It is listenning port 80, and the service is $ser."
fi

~    

猜你喜欢

转载自www.cnblogs.com/huzhendong/p/10242125.html