最近在看Shell 学习了有些时间,正巧在网上找到了一批实战题,自己动手练习一下 原文没有答案,我会和大家一起一边更新题目和把自己的答案贴出来,也和大家分享一下 http://oldboy.blog.51cto.com/2561410/1867160
1 企业Shell面试题1:批量生成随机字符文件名案例
使用for循环在/oldboy目录下批量创建10个html文件,其中每个文件需要包含10个随机小写字母加固定字符串oldboy,名称示例如下:
[root@oldgirl C19]# ls /oldboy
apquvdpqbk_oldboy.html mpyogpsmwj_oldboy.html txynzwofgg_oldboy.html
bmqiwhfpgv_oldboy.html mtrzobsprf_oldboy.html vjxmlflawa_oldboy.html
jhjdcjnjxc_oldboy.html qeztkkmewn_oldboy.html
jpvirsnjld_oldboy.html ruscyxwxai_oldboy.html
解答:
题2:批量改名特殊案例
将以上面试题19.1.1中结果文件名中的oldboy字符串全部改成oldgirl(最好用for循环实现),并且将扩展名html全部改成大写。
解答:
题3:批量创建特殊要求用户案例
批量创建10个系统帐号oldboy01-oldboy10并设置密码(密码为随机数,要求字符和数字等混合)。
不用for循环的实现思路:http://user.qzone.qq.com/49000448/blog/1422183723
解答:
题目1 答案:
1 #!/bin/bash
2
3 path="/root/oldboy/"
4 random(){
5 num_random=$(date +%S%N|md5sum|head -c 10)
#s=$(echo ${RANDOM}|md5sum|head -c 10)系统自带的 变量也可产生一个0--32767 之间的随机数
6 }
7 if [ -d $path ]; then
8 rm -rf $path
9 echo "$path removed"
10 fi
11 mkdir $path
12
13 for i in {1..10}
14 do
15
16 random
17 str="${path}${num_random}_oldboy.html"
18
19 touch $str
20 done
21 echo "################# Done #################"
22 cd $path
23 ls
~
题目2 答案:
在排序上折腾了好久。我答案的这个方法不太好,但也可以实现。同学们有好方法现实欢迎留言,
1 #!/bin/bash
2 path="/root/oldboy/"
3 cd $path
4 echo "$(pwd)"
5 for i in {1..10}
6 do
7 s=$(ls|sort -r +7 -13|sed -n ${i}p)
8 d=$(ls|sort -r +7 -13 |sed -e 's/oldboy/oldgirl/'|sed -n ${i}p|sed -e 's/html/HTML/g' -e 's/HTML/html/')
9 mv $s $d
10 # mv $(ls |sed -n "${i}p") $(ls |sed 's/oldboy/oldgirl/${i}p'|sed 's/html/HTML/g'|sed 's/HTML/html/'|head -1)
11 done
12 echo "################### Done ######################"
13 ls $path
14
15
~
题目3:答案
题给出了不用循环的办法,类似:
echo stu{11..12}|xargs -n1 useradd ;echo stu{11..12}:cat /dev/urandom|tr -dc 0-9|fold -w8|head -1
|xargs -n1|tee -a pass.txt|chpasswd
有兴趣的了可以了解下
1 #/bin/bash
2 path="/root/oldboy/"
3 name_start=1
4 name_end=10 # 要创建的数量
5 name="oldboy"
6 i=$name_start
7 echo "" > /root/password.txt
8 while (($i <= $name_end))
9 do
10 password=$(echo $RANDOM|md5sum|head -c 10)
11 echo $password
12 useradd -s /bin/sh -d /usr/$name$i -m $name$i
13 if [ $? -eq 0 ]
14
15 then
16 echo "账号 $name$i 已增加"
17 echo $password|passwd --stdin $name$i 2 >/dev/null
18 echo "用户: $name$i 密码: $password " >> /root/password.txt
19 echo "用户: $name$i 密码 修改完成!"
20 else
21 echo "账号$name$I增加出错了正在清理遗留文件"
22 userdel $name$i;rm -fr /usr/oldboy*;rm -fr /var/spool/mail/oldboy*
23 fi
24
25 ((i+=1))
26 done
27 cat /root/password.txt
~