脚本练习:

2017/09/13

1、需求:
请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为)2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron,仅仅写脚本即可);

[root@DasonCheng sbin]# cat 0913.sh 
#! /bin/bash
##Written by chengzhenge at 20170913
d=`date +%F`
cd /tmp/sbin 
touch $d.log
df -h > $d.log
[root@DasonCheng sbin]# sh 0913.sh 
[root@DasonCheng sbin]# cat /tmp/sbin/2017-09-13.log
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda3        19G  7.8G   12G   42% /
devtmpfs        479M     0  479M    0% /dev
tmpfs           489M     0  489M    0% /dev/shm
tmpfs           489M   13M  476M    3% /run
tmpfs           489M     0  489M    0% /sys/fs/cgroup
/dev/sda1       197M  109M   88M   56% /boot
tmpfs            98M     0   98M    0% /run/user/0

2、需求:统计出每个IP的访问量有多少?
有日志1.log,内容如下:
日志片段:

112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com “/seccode.php?update=0.5593110133088248″ 200″http://formula-x.haotui.com/registerbbs.php” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)”

61.147.76.51 – [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com “/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=1334564048&fid=9&sid=zgohwYoLZq2qPW233ZIRsJiUeu22XqE8f49jY9mouRSoE71″ 301″http://xyzdiy.5d6d.com/thread-1435-1-23.html” “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)”
[root@DasonCheng sbin]# awk '{print $1}' 1.log |sort -n |uniq -c |sort -n
      1 
      1 112.111.12.248
      1 61.147.76.51
参考答案:

1、

#! /bin/bash
d=`date +%F`
logfile=$d.log
df -h > $logfile

2、

awk ‘{print $1}’ 1.log |sort -n|uniq -c |sort -n}’ 1.log |sort -n|uniq -c |sort -n  
##这个答案有误;

2017/09/14

1、需求:写一个脚本计算一下linux系统所有进程占用内存大小的和。(提示,使用ps或者top命令)

[root@DasonCheng sbin]# cat 09140.sh
#! /bin/bash
##Written by chengzhenge at 2017/09/14
ps=`ps aux |awk '{print $6}'`
sum=0
for i in `$ps`
do
  ps2=`echo $i |sed 's/[0,9]//'`
  if [ -n "$ps2" ]
  then
    continus
  fi
sum=$[$ps+$sum]
done
echo $sum
##没有实现效果,参考了答案:
[root@DasonCheng sbin]# cat 09140.sh 
#! /bin/bash
##Written by chengzhenge at 2017/09/14
sum=0
for i in `ps aux |awk '{print $6}' |grep -v 'RSS'`    //awk默认以空格为分隔符;有时候我们得到的结果里面想删掉一个字符 可以用取反嘛;
do
sum=$[$i+$sum]
done
echo $sum
[root@DasonCheng sbin]# sh 09140.sh 
942040

awk默认以空格为分隔符;有时候我们得到的结果里面想删掉一个字符 可以用取反嘛;

2、需求:设计一个脚本,监控远程的一台机器(假设ip为123.23.11.21)的存活状态,当发现宕机时发一封邮件给你自己。
提示:

  1. 你可以使用ping命令 ping -c10 123.23.11.21
  2. 发邮件脚本可以参考 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
  3. 脚本可以搞成死循环,每隔30s检测一次
##
[aming@Dasoncheng ~]$ cat a.sh 
#!/bin/bash
ip=8.8.8.8
while : ;
do
  ping -c 2 $ip &>/dev/null
  if [ $? != 0 ];
  then
      python \/usr\/local\/sbin\/mail.py inbox@163.com "title" "contents"
  fi
sleep 30
done

如何判断ping一个ip 是否通呢?:
ping 192.168.60.11 >/dev/null 将结果重定向到空设备,然后echo $?根据其返回值判断:0通、1不通;

参考答案:

1、

#! /bin/bash
sum=0
for mem in `ps aux |awk ‘{print $6}’ |grep -v ‘RSS’ `
do
sum=$[$sum+$mem]
done
echo “The total memory is $sum””k”
##也可以使用awk 一条命令计算:
ps aux | grep -v ‘RSS TTY’ |awk ‘{(sum=sum+$6)};END{print sum}’

2、

#!/bin/bash
ip=123.23.11.21
ma=abc@139.com
while 1    //这里貌似有问题;
do
ping -c10 $ip >/dev/null 2>/dev/null
if [ $? != “0” ];then
python /usr/local/sbin/mail.py $ma “$ip down” “$ip is down”   
//这样的格式应该发不了邮件,python无法调用Linux里面的绝对路径
#假设mail.py已经编写并设置好了
fi
sleep 30
done

转载于:https://my.oschina.net/u/3651233/blog/1536898

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值