例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