【Linux中高级运维: 第57天——Shell编程】第8章:批量改名特殊案例+批量创建特殊要求用户案例+筛选符合长度的单词案例+数据库备份

作业:
19.1.1 企业Shell面试题1:批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含oldboy固定字符串加10个随机小写字母,名称示例如下:
[root@oldboy scripts]# ls /oldboy
oldboy_amaeeurmja.html oldboy_jmtiqwhinw.html oldboy_rnbwmjkjkh.html oldboy_yhufdiceox.html
oldboy_antodvkjcf.html oldboy_ncivkckvok.html oldboy_tyqfhfxvup.html
oldboy_epwmszmttm.html oldboy_osjmrurgsx.html oldboy_vpgslhajdn.html

19.1.2 企业Shell面试题2:批量改名特殊案例
将上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写HTML。
三种方法实现:

[root@web01 /oldboy]# ll
总用量 4
-rw-r–r-- 1 root root 328 6月 5 09:11 a.sh
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_affnopfpqy.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_apdvdhzfsi.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_cfkcbopkut.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_eighyfyyay.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_ejmzkzcewv.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_gvgsexkibe.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_kuxgpnflfn.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_rslahqrxky.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_sgduhepgtt.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldgirl_sqlcafkzpj.HTML
[root@web01 /oldboy]# rename oldgirl oldboy *.HTML
[root@web01 /oldboy]# ll
总用量 4
-rw-r–r-- 1 root root 328 6月 5 09:11 a.sh
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_affnopfpqy.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_apdvdhzfsi.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_cfkcbopkut.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_eighyfyyay.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_ejmzkzcewv.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_gvgsexkibe.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_kuxgpnflfn.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_rslahqrxky.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_sgduhepgtt.HTML
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_sqlcafkzpj.HTML
[root@web01 /oldboy]# rename HTML html *.HTML
[root@web01 /oldboy]# ll
总用量 4
-rw-r–r-- 1 root root 328 6月 5 09:11 a.sh
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_affnopfpqy.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_apdvdhzfsi.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_cfkcbopkut.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_eighyfyyay.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_ejmzkzcewv.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_gvgsexkibe.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_kuxgpnflfn.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_rslahqrxky.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_sgduhepgtt.html
-rw-r–r-- 1 root root 0 6月 5 09:08 oldboy_sqlcafkzpj.html
[root@web01 /oldboy]# ls *.html
oldboy_affnopfpqy.html oldboy_cfkcbopkut.html oldboy_ejmzkzcewv.html oldboy_kuxgpnflfn.html oldboy_sgduhepgtt.html
oldboy_apdvdhzfsi.html oldboy_eighyfyyay.html oldboy_gvgsexkibe.html oldboy_rslahqrxky.html oldboy_sqlcafkzpj.html
[root@web01 /oldboy]#
[root@web01 /oldboy]#
[root@web01 /oldboy]# ls *.html|awk -F “[.]" ‘{print “mv”}’
mv
mv
mv
mv
mv
mv
mv
mv
mv
mv
[root@web01 /oldboy]# ls *.html|awk -F "[
.]” ‘{print “mv”,$0}’
mv oldboy_affnopfpqy.html
mv oldboy_apdvdhzfsi.html
mv oldboy_cfkcbopkut.html
mv oldboy_eighyfyyay.html
mv oldboy_ejmzkzcewv.html
mv oldboy_gvgsexkibe.html
mv oldboy_kuxgpnflfn.html
mv oldboy_rslahqrxky.html
mv oldboy_sgduhepgtt.html
mv oldboy_sqlcafkzpj.html
[root@web01 /oldboy]# ls *.html|awk -F “[.]" '{print “mv”,$0,"oldgirl”}’
mv oldboy_affnopfpqy.html oldgirl_
mv oldboy_apdvdhzfsi.html oldgirl_
mv oldboy_cfkcbopkut.html oldgirl_
mv oldboy_eighyfyyay.html oldgirl_
mv oldboy_ejmzkzcewv.html oldgirl_
mv oldboy_gvgsexkibe.html oldgirl_
mv oldboy_kuxgpnflfn.html oldgirl_
mv oldboy_rslahqrxky.html oldgirl_
mv oldboy_sgduhepgtt.html oldgirl_
mv oldboy_sqlcafkzpj.html oldgirl_
[root@web01 /oldboy]# ls *.html|awk -F “[.]" '{print “mv”,$0,"oldgirl”$2}’
mv oldboy_affnopfpqy.html oldgirl_affnopfpqy
mv oldboy_apdvdhzfsi.html oldgirl_apdvdhzfsi
mv oldboy_cfkcbopkut.html oldgirl_cfkcbopkut
mv oldboy_eighyfyyay.html oldgirl_eighyfyyay
mv oldboy_ejmzkzcewv.html oldgirl_ejmzkzcewv
mv oldboy_gvgsexkibe.html oldgirl_gvgsexkibe
mv oldboy_kuxgpnflfn.html oldgirl_kuxgpnflfn
mv oldboy_rslahqrxky.html oldgirl_rslahqrxky
mv oldboy_sgduhepgtt.html oldgirl_sgduhepgtt
mv oldboy_sqlcafkzpj.html oldgirl_sqlcafkzpj
[root@web01 /oldboy]# ls *.html|awk -F “[.]" '{print “mv”,$0,"oldgirl”$2".HTML"}’
mv oldboy_affnopfpqy.html oldgirl_affnopfpqy.HTML
mv oldboy_apdvdhzfsi.html oldgirl_apdvdhzfsi.HTML
mv oldboy_cfkcbopkut.html oldgirl_cfkcbopkut.HTML
mv oldboy_eighyfyyay.html oldgirl_eighyfyyay.HTML
mv oldboy_ejmzkzcewv.html oldgirl_ejmzkzcewv.HTML
mv oldboy_gvgsexkibe.html oldgirl_gvgsexkibe.HTML
mv oldboy_kuxgpnflfn.html oldgirl_kuxgpnflfn.HTML
mv oldboy_rslahqrxky.html oldgirl_rslahqrxky.HTML
mv oldboy_sgduhepgtt.html oldgirl_sgduhepgtt.HTML
mv oldboy_sqlcafkzpj.html oldgirl_sqlcafkzpj.HTML
[root@web01 /oldboy]# ls *.html|awk -F “[.]" '{print “mv”,$0,"oldgirl”$2".HTML"}’|bash
[root@web01 /oldboy]# ls
a.sh oldgirl_cfkcbopkut.HTML oldgirl_gvgsexkibe.HTML oldgirl_sgduhepgtt.HTML
oldgirl_affnopfpqy.HTML oldgirl_eighyfyyay.HTML oldgirl_kuxgpnflfn.HTML oldgirl_sqlcafkzpj.HTML
oldgirl_apdvdhzfsi.HTML oldgirl_ejmzkzcewv.HTML oldgirl_rslahqrxky.HTML

[root@web01 /server/scripts/19]# cat *
#!/bin/bash
##############################################################

File Name: 19_1_1.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
Path=/oldboy
[ -d $Path ] || mkdir $Path
for n in {1…10}
do
random=openssl rand -base64 40|sed 's#[^a-z]##g'|cut -c 2-11
touch KaTeX parse error: Expected group after '_' at position 12: Path/oldboy_̲{random}.html
done

#!/bin/bash
##############################################################

File Name: 19_1_2_1.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
#!/bin/sh
Dirname="/oldboy"
cd D i r n a m e ∣ ∣ e x i t 1 f o r O l d F i l e N a m e i n ‘ l s ‘ d o N e w F i l e N a m e = Dirname||exit 1 for OldFileName in `ls` do NewFileName= Dirnameexit1forOldFileNameinlsdoNewFileName=(echo $OldFileName|awk -F [.] '{print "oldgirl"$2".HTML"}’)
mv $OldFileName ${NewFileName}
done

19.1.3 企业Shell面试题3:批量创建特殊要求用户案例
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。
不用for循环的实现思路:http://user.qzone.qq.com/49000448/blog/1422183723
解答:
本题的详细答案见第11章范例11_14,此处仅作为Shell案例集中收集整理。

解题思路:
1、01 02 03
[root@web01 scripts]# echo {01…05}
01 02 03 04 05
[root@web01 scripts]# seq -s " " -w 10
01 02 03 04 05 06 07 08 09 10

2、for循环
3、随机数
4、useradd passwd

[root@web01 19]# cat 19_1_3_1.sh
#!/bin/bash
##############################################################

File Name: 19_1_3.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
. /etc/init.d/functions

for user in oldboy{26…30}
do
passwd=echo $user|md5sum|cut -c 1-8
if [ id $user 2>/dev/null|wc -l -ge 1 ]
then
action “$user is no” /bin/false
continue
else
useradd KaTeX parse error: Expected 'EOF', got '&' at position 6: user &̲>/dev/null &&{ …{user}:$passwd" >>/tmp/user1.txt
}
fi
done

if [ -s /tmp/user1.txt ]
then
chpasswd</tmp/user1.txt
fi

chpasswd<
用户名1:密码
用户名2:密码
用户名3:密码

[root@web01 19]# cat 19_1_3_1.sh
#!/bin/bash
##############################################################

File Name: 19_1_3.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
. /etc/init.d/functions

for user in oldboy{26…30}
do
passwd=echo $user|md5sum|cut -c 1-8
if [ id $user 2>/dev/null|wc -l -ge 1 ]
then
action “$user is no” /bin/false
continue
else
useradd KaTeX parse error: Expected 'EOF', got '&' at position 6: user &̲>/dev/null &&{ …{user}:$passwd" >>/tmp/user1.txt
}
fi
done

if [ -s /tmp/user1.txt ]
then
chpasswd</tmp/user1.txt
fi

范例12_4:已知下面的字符串是通过将RANDOM随机数
采用md5sum加密后任意取出连续10位的结果,
请破解这些字符串对应的md5sum前的数字?
4fe8bf20ed
1、RANDOM范围0-32767

[root@web01 scripts]# cat 12_4.sh
#!/bin/bash
##############################################################

File Name: 12_4.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
for n in {0…32767}
do
echo -n "$n " >>/tmp/md5sum.txt
echo $n|md5sum >>/tmp/md5sum.txt
done
grep “4fe8bf20ed” /tmp/md5sum.txt

19.1.18 企业Shell面试题18:破解RANDOM随机数案例
已知下面的字符串是通过RANDOM随机数变量md5sum后,再截取一部分连续字符串的结果,
请破解这些字符串对应的使用md5sum处理前的RANDOM对应的数字?
21029299
00205d1c
a3da1677
1f6d12dd
890684b
解答:

[root@web01 scripts]# cat char.txt
21029299
00205d1c
a3da1677
1f6d12dd
890684b
[root@web01 scripts]# tr “\n” “|” < ./char.txt
21029299|00205d1c|a3da1677|1f6d12dd|890684b|[root@web01 scripts]#
[root@web01 scripts]#
[root@web01 scripts]#
[root@web01 scripts]# cat 12_4_1.sh
#!/bin/bash
##############################################################

File Name: 12_4.sh

Version: V1.0

Author: oldboy

Organization: www.oldboyedu.com

##############################################################
#for n in {0…32767}
#do

echo -n "$n " >>/tmp/md5sum.txt

echo $n|md5sum >>/tmp/md5sum.txt

#done
egrep “21029299|00205d1c|a3da1677|1f6d12dd|890684b” /tmp/md5sum.txt

[root@oldgirl scripts]# cat 19_18_1.sh
#!/bin/sh
array=( #<==把待比较的字符串信息放到数组里。
21029299
00205d1c
a3da1677
1f6d12dd
890684b
)
Path=/tmp/md5.txt
funGetMd5() {
> KaTeX parse error: Expected '}', got 'EOF' at end of input: … Stat=(echo N u m ∣ m d 5 s u m ) e c h o " Num|md5sum) echo " Nummd5sum)echo"Stat $Num" >> $Path #<==建立数字和md5sum后的内容对应关系。
}&

done

}
funFindMd5() {
word= ( e c h o " (echo " (echo"{array[@]}"|sed -r ‘s# |\n#|#g’) #<==取出所有数组元素并用|分隔开。
grep --color=auto -E “$word” $Path #<==同时过滤包含所有不同字符串的内容。
}
funcMain(){
funGetMd5
funFindMd5
}
funcMain

19.1.8 企业Shell面试题8:筛选符合长度的单词案例
利用bash for循环打印下面这句话中字母数不大于6的单词(某企业面试真题)。
I am oldboy teacher welcome to oldboy training class
解答:
本题的详细答案见第13章范例13_4,此处仅作为Shell案例集中收集整理。

1)字符串长度
[root@web01 /server/scripts]# oldboy=“I am oldboy.”
[root@web01 /server/scripts]# echo ${#oldboy}
12
[root@web01 /server/scripts]# echo KaTeX parse error: Expected 'EOF', got '#' at position 47: …server/scripts]#̲ expr length "{oldboy}"
12
[root@web01 /server/scripts]# echo $oldboy|awk ‘{print length}’
12
[root@web01 /server/scripts]# echo $oldboy|awk ‘{print length($0)}’
12

chars=“I am oldboy teacher welcome to oldboy training class”
for word in $chars
do
if [ ${#word} -le 6 ]
then
echo $word
fi
done

[root@web01 /server/scripts]# sh 19_1_8.sh
I
am
oldboy
to
oldboy
class

所有库备份到一起:oldboy1 oldboy2 oldboy3
mysqldump -A -B |gzip >/tmp/bak.sql.gz

oldboy3出问题了需要恢复。
解答:把整库备份/tmp/bak.sql.gz恢复到测试库,
然后导出oldboy3,然后再把oldboy3恢复到正式库。

为什么要分库备份:所有库备份到一起的缺陷就是当某天,一个库出问题了,需要恢复,就比较困难。

mysqldump -B oldboy1 |gzip >/tmp/bak_oldboy1.sql.gz
mysqldump -B oldboy2 |gzip >/tmp/bak_oldboy2.sql.gz
mysqldump -B oldboy3 |gzip >/tmp/bak_oldboy3.sql.gz

先学会备份一个,然后循环 就是多个。。。。

mysqldump -B test |gzip >/tmp/test.sql.gz
mysqldump -B mysql |gzip >/tmp/mysql.sql.gz
mysqldump -B wordpress |gzip >/tmp/wordpress.sql.gz

[root@web02 ~]# cat a.sh
for dbname in mysql -uroot -poldboy123 -e "show databases;" 2>/dev/null|sed 1d|egrep -v "_schema";
do
mysqldump -uroot -poldboy123 -B d b n a m e 2 > / d e v / n u l l ∣ g z i p > / t m p / dbname 2>/dev/null|gzip >/tmp/ dbname2>/dev/nullgzip>/tmp/{dbname}_$(date +%F).sql.gz;
done

[root@web02 ~]# cat b.sh
for dbname in mysql -e "show databases;"|sed 1d|egrep -v "_schema";
do
mysqldump -B d b n a m e ∣ g z i p > / t m p / dbname|gzip >/tmp/ dbnamegzip>/tmp/{dbname}_$(date +%F).sql.gz;
done

#!/bin/sh
DBPATH=/server/backup
MYUSER=root
MYPASS=oldboy123
SOCKET=/data/3306/mysql.sock
MYCMD=“mysql -u M Y U S E R − p MYUSER -p MYUSERpMYPASS -S S O C K E T " M Y D U M P = " m y s q l d u m p − u SOCKET" MYDUMP="mysqldump -u SOCKET"MYDUMP="mysqldumpuMYUSER -p$MYPASS -S $SOCKET”
[ ! -d $DBPATH ] && mkdir -p D B P A T H f o r d b n a m e i n ‘ DBPATH for dbname in ` DBPATHfordbnameinMYCMD -e “show databases;”|sed ‘1,2d’|egrep -v “mysql|schema”do mkdir $DBPATH/${dbname}_$(date +%F) -p for table in$MYCMD -e “show tables from $dbname;”|sed ‘1d’`
do
$MYDUMP $dbname t a b l e ∣ g z i p > table|gzip > tablegzip>DBPATH/KaTeX parse error: Expected group after '_' at position 9: {dbname}_̲(date +%F)/KaTeX parse error: Expected group after '_' at position 9: {dbname}_̲{table}.sql.gz
done
done

mysql wordpress

mysqldump 库名 表名1|gzip >/tmp/库名_表名1.sql.gz
mysqldump 库名 表名2|gzip >/tmp/库名_表名2.sql.gz
mysqldump 库名 表名3|gzip >/tmp/库名_表名3.sql.gz

mysql
mysqldump mysql 表名1|gzip >/tmp/mysql_表名1.sql.gz
mysqldump mysql 表名2|gzip >/tmp/mysql_表名2.sql.gz
mysqldump mysql 表名3|gzip >/tmp/mysql_表名3.sql.gz

wordpress
mysqldump wordpress 表名1|gzip >/tmp/wordpress_表名1.sql.gz
mysqldump wordpress 表名2|gzip >/tmp/wordpress_表名2.sql.gz
mysqldump wordpress 表名3|gzip >/tmp/wordpress_表名3.sql.gz

分库分表
[root@web02 ~]# cat c.sh
for dbname in mysql -e "show databases;"|sed 1d|egrep -v "_schema";
do
for tablename in mysql -e "show tables from $dbname;"|sed 1d
do
mysqldump --lock-tables=0 $dbname t a b l e n a m e ∣ g z i p > / t m p / tablename|gzip >/tmp/ tablenamegzip>/tmp/{dbname}_KaTeX parse error: Expected group after '_' at position 12: {tablename}_̲(date +%F).sql.gz;
done
done

mysqldump -B test |gzip >/tmp/test.sql.gz
mysqldump -B mysql |gzip >/tmp/mysql.sql.gz
mysqldump -B wordpress |gzip >/tmp/wordpress.sql.gz

19.1.4 企业Shell面试题4:扫描网络内存活主机案例
写一个Shell脚本,判断10.0.0.0/24网络里,当前在线的IP有哪些?
解答:

19.1.14 企业Shell面试题14:开发脚本入侵检测与报警案例
面试及实战考试题:监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次。
解答:

19.1.20 企业Shell面试题20:单词及字母去重排序案例
用shell处理以下内容
1、按单词出现频率降序排序!
2、按字母出现频率降序排序!
the squid project provides a number of resources to assist users design,implement and support squid installations. Please browse the documentation and support sections for more infomation,by oldboy training.
课堂实战考察某企业shell面试考试题

19.1.28 企业Shell面试题28:51CTO博文爬虫案例
获取51CTO博客列表倒序排序考试题

老男孩教育培训机构需求:需求入下:
请把http://oldboy.blog.51cto.com 地址中的所有博文,按照时间倒序列表如下:
2013-09-13 运维就是一场没有硝烟的战争
http://oldboy.blog.51cto.com/2561410/1296694
2016-04-17 运维人员写项目方案及推进项目的基本流程思路
http://oldboy.blog.51cto.com/2561410/1764820
附加:高级要求:
生成html页面,并设置超链接。
结果如下:
http://oldboy.blog.51cto.com/2561410/1862041

http://oldboy.blog.51cto.com/2561410/1686891

19.1.29 企业Shell面试题29:Nginx负载节点状态监测案例

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值