Shell练习(16-20)-2019.1.7

16.输入数字执行命令

需求:

  • 写个shell,看看你的linux系统中是否存在自定义用户(普通用户),若是有,一共有几个

核心要点:

  • Centos6,uid>=500
  • Centos7,uid >=1000
[root@Chauncey ~]# cat /etc/redhat-release   ##判断系统版本,6,7,版本均可以使用此命令
CentOS release 6.9 (Final)
[root@Chauncey ~]# awk -F 'release' '{print $2}' /etc/redhat-release 
 6.9 (Final)
#####################非函数版######################
[root@Chauncey ~]# cat 16.sh
#!/bin/bash
v=`awk -F 'release''{print $2}' /etc/redhat-release |cut -d '.' -f1`
case $v in
   5|6)
     n=`awk -F ':' '$3>==500' /etc/passwd`
     if [ $n -eq 0 ]
     then
        echo "system meiyouzidingyideyonghu"
     else
        echo "xitongyouzidingyideyonghu,you$n"
     fi
   ;;
   7)
     n=`awk -F ':' '$3>=1000' /etc/passwd`
     if [ $n -eq 0 ]
     then
       echo "xitongmeiyouzidingyiyonghu"
     else
       echo "xitongcunzaizidingyiyonghu,you$n"
     fi
    ;;
    *)
      echo "jiaobenchucuo."
    ;;
esac
###################函数版######################
[root@Chauncey ~]# cat 16.sh
#!/bin/bash
v=`awk -F 'release' '{print $2}' /etc/redhat-release |cut -d '.' -f1`
user()
{
     if [ $1 -eq 0 ]
     then
        echo "system meiyouzidingyideyonghu"
     else
        echo "xitongyouzidingyideyonghu,you$n"
     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 "jiaobenchucuo."
    ;;
esac

17.检测磁盘

需求:

  • 写个shell,检测所有磁盘分区使用率和inode的使用率并记录到以当天日期为命令的日志文件里,当发现某个分区容量或者inode的使用量大于85%时,发邮件通知你自己

核心要点:

  • df
  • df -i
  • date +%F
[root@Chauncey ~]# cat 17.sh
#!/bin/bash
dir=/tmp/disk
d=`date +%F`
[email protected]
 
[ -d $dir ] || mkdir $dir         ###判断日志文件的路径是否存在,不存在即创建

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

df|sed '1d' | sed -r 's/%//g'|awk -F '.' '{print $1}'|awk '$5<=85 {print $6}' > $dir/df.tmp
df -i|sed '1d' | sed -r 's/%//g'|awk -F '.' '{print $1}'|awk '$5<=85 {print $6}' > $dir/df_1.tmp

n1=`wc -l $dir/df.tmp|awk '{print $1}'`
n2=`wc -l $dir/df_1.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 "cipankongjianheinodeshiyonglvgaoyu85%" "`cat $dir/df.tmp $dir/df_1.tmp|xargs`"
   ;;
   10)
        python mail.py  $mail "cipankongjianshiyonglvgaoyu85%" "`cat $dir/df.tmp|xargs`"
   ;;
   01) 
      python mail.py $mail "inodeshiyonglvgaoyu85%" "`cat $dir/df_1.tmp|xargs`"
   ;;
    *)
     ;;
esac 
[root@Chauncey ~]# 

18.检测新文件

需求:

  • 有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时的会被用户上传新文件,但是不知道什么时候上传。所以,需要我们每5分钟做一次检测是否有新文件生成。请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。

核心要点:

  • find -mmin -5        查找5分钟内的文件
  • date +%Y%m%d%H%M
[root@Chauncey ~]# cat 18.sh
#!/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
[root@Chauncey ~]# 

19.最常用的命令

需求:

  • 写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top 10

核心要点:

  • history或者~/.bash_history,sort,uniq
#!/bin/bash
cat ~/.bash_history |sort |uniq -c |sort -nr |head

20.统计文件大小

需求:

  • 每小时执行一个脚本。脚本功能:当0点和12点时,将目录/data/log/下的文件全部清空,只清空文件内容,不清空文件。其他时间只需要统计每个文件的大小,一个文件一行,输出到一个以日期和时间为名字的日志里。需要考虑/data/log/目录下的二级,三级 ... 等子目录的文件。

核心要点:

  • find列出所有文件
  • date +%H
  • >file 清空文件
[root@Chauncey ~]# cat 20.sh
#!/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"  $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
[root@Chauncey ~]# 

猜你喜欢

转载自blog.csdn.net/Chauncey_Qin/article/details/86020278