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 ~