作业:
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=
Dirname∣∣exit1forOldFileNamein‘ls‘doNewFileName=(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 "
Num∣md5sum)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/null∣gzip>/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/
dbname∣gzip>/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
MYUSER−pMYPASS -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="mysqldump−uMYUSER -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 `
DBPATHfordbnamein‘MYCMD -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 >
table∣gzip>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/
tablename∣gzip>/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负载节点状态监测案例