shell训练计划30天之第二十四天

例61 查找文件差异

要求:有两个文件a.txt和b.txt,需求是吧a.txt中有的但b.txt中没有的行找出来,并写入到C.txt,然后计算出c.txt文件的行数

要点:可以使用while循环遍历a.txt,逐行进行匹配,如果这一行在b.txt中没有就直接重定向到C.txt中即可

 

#!/bin/bash

cat a.txt | while read line

do

if ! grep -q "$line" b.txt

then

echo $line

fi

done >c.txt

wc -l c.txt

 

 

 

例62 杀进程

要求:把当前用户下所有进程名字冲含有“amingh”的进程关闭

#!/bin/bash

ps -u $USER|awk '$NF ~ /aminhg/ {print $1}' | xargs kill

 

 

 

 

例63 迸发备份数据库

用shell,以并发进程的形式将mysql数据库所有的表备份到当前目录,并把所有的表压缩到一个压缩包文件里

要点:

1.在shell中加上&可以将命令丢到后台,从而可以同时执行多条命令达到并发效果。

2.如果表数量很大,全部丢到后台去,服务资源恐怕支持不了,所以需要控制并发数

3.备份表的命令式mysqlldump -uaming-ppasswd mydb tbname > tbname.sql

 

 

 

#!/bin/bash

N=5

mysql -uaming -ppasswd myda -e "show tables" | sed '1d' > /tmp/table.txt

n=`wc -l` /tmp/table.txt | awk '{print $1}'

 

div()

{

n=`echo "scale=1;$1/$2"|bc`

n1=`echo "scale=1;$n+0.5"|bc`

echo $n1 |cut -d -f1

}

n1=`div $n $N`

split -l $n1 /tmp/table.txt

myd()

{

for t in `cat $1`

do

mysqldump -uaming -ppasswd mydb $t >$t.sql

done

}

 

for f in xaa xab xac xad xae

do

my $f &

done

 

wait

tar czf mydb.tar.gz *.sql

rm -f *.sql

 

 

例64 监控cdn节点

要求: 一个网站,使用率cdn,全国各地有几十个节点。需要你写一个shell脚本来监控各个节点是否正常。假如1.监控的url为www.aming.com/index.php

2.源ip为88.88.88.88

要点:

某个节点正常,那访问到的内容应该和源站上的一致

比较两个文件内容是否有差异的命令为diff,如:diff 1.txt 2.txt如果结果为空,说明两个文件不存在差异

3.几十个节点,需要把所有节点的IP全部拿到,然后对所有IP进行遍历。

 

#!/bin/bash

 

s_ip=88.88.88.88

url=www.aminglinux/index.html

ipf=/data/ip.list

curl -x $s_ip:80 $url 2>/dev/null >/tmp/source.txt

for ip in `cat $ipf`

do

curl -x$ip:80 2>/dev/null >/tmp/$ip.txt

diff /tmp/source.txt /tmp/$ip.txt >/tmp/$ip.diff

n=`wc -l /tmp/$ip.diff|awk '{print 1}'`

if [ $n -gt 0 ]

then

echo "节点$ip有异常"

fi

done

 

 

 

例65 破解字符串

要求:已知下面的字符串是通过RANDOM随机变量md5sum|cut -c 1-8截取后的结果,请破解这些字符串对应的md5前的RANDOM对应数字

21029299

00205d1c

a3da1677

1f6d12dd

890684ba

要点:$RANDOM的范围为0-32767,想要解此题,需要遍历0-32767所有的数字,逐一和题目给出的字符串匹配

 

21029299

00205d1c

a3da1677

1f6d12dd

890684ba

 

 

 

例66 判断CPU厂商

要求:

1.判断当前主机的cpu厂商,其信息在/proc/cpuinfo文件中vendoe id 一行中

2.如果生产昌盛为AuthenticAMD,就显示其为AMD公司

3.如果其生产厂商为GenuineIntel,就显示其为Intel公司

4.否则,就说其为非主流公司

要点:

截取:/proc/cpuinfo文档包含“vendor_id”哪行的文本

 

 

 

#!/bin/bash

cpu=`grep '^vendor_id' /proc/cpuiinfo |head -1 |awk -F ':' '{print $2}'`

if [ $cpu == "AuthenticAMD" ]

then

echo "cpu厂商是AMD."

elif [ $cpu == "GenuineIntel" ]

then

echo "GenuineIntel"

else

echo "CPU是非主流厂商."

fi

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值