shell编程面试必会30题

来源:《跟老男孩学Linux运维》Shell编程实战

面试题1:批量生产随机字符文件名

代码:

[email protected]:/home/dell/shell# vim creat_ten_htmlfile.sh 
#!/bin/bash

#Date: 2017-8-25
#Author: XianWei

Path=/tmp/shelltmp
[ -d "$Path" ] || mkdir -p $Path                #如果测试结果为假,就执行mkdir语句
cd $Path
for((i=0;i<10;i++))                             #循环执行10次
do
        namepre=`date +%s|md5sum|tr -dc "a-z"`  #生成随机的10个字母
        namepost=‘_oldboy.html‘                 #文件名的后缀
        filename=${namepre}${namepost}          #字符串连接
        touch $filename
        echo "$filename have been created."
        sleep 1

done &
wait

测试

[email protected]:/home/dell/shell# ./creat_ten_htmlfile.sh 
adcaeeafbc_oldboy.html have been created.
ecbdeabdaedceb_oldboy.html have been created.
edffdbddee_oldboy.html have been created.
beadcabbbdcbdb_oldboy.html have been created.
fcaadeaedafbc_oldboy.html have been created.
adddadbc_oldboy.html have been created.
bcadafebdabe_oldboy.html have been created.
deffebcd_oldboy.html have been created.
fafbbcdcfcfecef_oldboy.html have been created.
fbfdedccbcc_oldboy.html have been created.
[email protected]:/home/dell/shell# 
[email protected]:/home/dell/shell# ll /tmp/shelltmp/
total 8
drwxr-xr-x  2 root root 4096 Aug 25 07:53 ./
drwxrwxrwt 15 root root 4096 Aug 25 08:05 ../
-rw-r--r--  1 root root    0 Aug 25 07:53 adcaeeafbc_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 adddadbc_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 bcadafebdabe_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 beadcabbbdcbdb_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 deffebcd_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 ecbdeabdaedceb_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 edffdbddee_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 fafbbcdcfcfecef_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 fbfdedccbcc_oldboy.html
-rw-r--r--  1 root root    0 Aug 25 07:53 fcaadeaedafbc_oldboy.html

总结:

考察知识点:

1)生成随机数的方法

2)字符串连接的方法

面试题2:将面试题1中的字符串oldboy全部改为oldgirl

方法一:使用awk生成所需命令,再用bash执行

代码和测试:

[email protected]:/tmp/shelltmp# for i in `ls /tmp/shelltmp`;do echo $i|awk -F "_" ‘{print "mv " $0 " " $1"_oldgirl.html" }‘ |bash ;done

[email protected]:/tmp/shelltmp# ls
adcaeeafbc_oldgirl.html    beadcabbbdcbdb_oldgirl.html  edffdbddee_oldgirl.html       fcaadeaedafbc_oldgirl.html
adddadbc_oldgirl.html      deffebcd_oldgirl.html        fafbbcdcfcfecef_oldgirl.html
bcadafebdabe_oldgirl.html  ecbdeabdaedceb_oldgirl.html  fbfdedccbcc_oldgirl.html
[email protected]:/tmp/shelltmp#

方法2:使用sed替换文件名,再用mv修改文件名

代码

#!/bin/bash

#Date: 2017-8-25
#Author: XianWei

Path=/tmp/shelltmp
[ -d "$Path" ] || exit 0                #如果测试结果为假,就执行mkdir语句
cd $Path

for oldfile in `ls $Path/ |grep oldboy`
do
        newfile=`echo $oldfile | sed s/oldboy/oldgirl/g` #生成新的文件名
        mv $oldfile $newfile

done &
wait

面试题3:批量创建用户和密码

代码

[email protected]:/home/dell/shell# vim 3_create_user.sh 
 
#!/bin/bash

#Date: 2017-8-25
#Author: XianWei
#create ten users in bulk

for((i=0;i<=10;i++))
do
        username="oldboy${i}"                           #cannot use symbol ‘‘
        password=`tr -dc "a-zA-Z0-9" </dev/urandom |head -c 8`        #create 8 random charactors
        #echo $username         
        useradd $username
        echo $username:$password |chpasswd              #change passwd.if os=centos,use passwd --stdin
        #echo ${username}" "${password} 
        echo ${username}" "${password} >> passwd.txt    #record the username and it‘s password
done

测试

[email protected]:/home/dell/shell# ./3_create_user.sh 
[email protected]:/home/dell/shell# cat /etc/passwd
......
hello:x:1001:1001::/home/hello:
oldboy0:x:1002:1002::/home/oldboy0:
oldboy1:x:1003:1003::/home/oldboy1:
oldboy2:x:1004:1004::/home/oldboy2:
oldboy3:x:1005:1005::/home/oldboy3:
oldboy4:x:1006:1006::/home/oldboy4:
oldboy5:x:1007:1007::/home/oldboy5:
oldboy6:x:1008:1008::/home/oldboy6:
oldboy7:x:1009:1009::/home/oldboy7:
oldboy8:x:1010:1010::/home/oldboy8:
oldboy9:x:1011:1011::/home/oldboy9:
oldboy10:x:1012:1012::/home/oldboy10:
[email protected]:/home/dell/shell# 

#查看密码文件
[email protected]:/home/dell/shell# cat passwd.txt 
oldboy0 Je28ZqTi
oldboy1 LcA5AX3u
oldboy2 QF36POh2
oldboy3 5BMoklFp
oldboy4 18slv8fB
oldboy5 8eIVWck3
oldboy6 ZuWQcqjT
oldboy7 lSeahDHM
oldboy8 XvqBiFPA
oldboy9 VNc8fLZC
oldboy10 zdbruc2S

未完待续.......

时间: 2024-11-01 11:37:50

shell编程面试必会30题的相关文章

shell编程基础必知

shell编程 ################################################ 静态语言 动态语言 ################################################ 编程语言:机器语言,汇编语言,高级语言 ################################################ 面向对象的编程语言:sehll c 面向对象的编程语言:JAVA Python perl c++ ################

数据结构笔记02:Java面试必问算法题

1. 面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min.push.pop.的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致 2. 具体分析: (1)栈的创建: 我们接下来通过链表的形式来创建栈,方便扩充. 代码实现: 1 public class Stack { 2 public Node head; 3 public

Java面试必问算法题

面试的时候,栈和队列经常会成对出现来考察.本文包含栈和队列的如下考试内容: (1)栈的创建 (2)队列的创建 (3)两个栈实现一个队列 (4)两个队列实现一个栈 (5)设计含最小函数min()的栈,要求min.push.pop.的时间复杂度都是O(1) (6)判断栈的push和pop序列是否一致 1.栈的创建: 我们接下来通过链表的形式来创建栈,方便扩充. 代码实现: public class Stack { public Node head; public Node current; //方法

Android面试必考基础题

(1)<必考题>请写出Android系统架构有几层,分别是哪几层? 考点:Android系统架构 答案:有四层.分别是Linux内核.本地库和Java运行时环境.应用程序框架.应用程序. (2)<必考题>请简要介绍Android的四大组件? 考点:Android四大组件 答案:Android系统有四种组件,这四种组件构成了Android应用的框架,然后由Intent联系这四种组件.Activity用来显示Android的程序界面,一个应用往往有多个界面,所以一个应用中会有多个Act

码农面试必问的题,太值了

随着互联网越来越普及,尤其是经过pc向移动端的转变,中国对互联网需求呈现爆炸式的增长趋势,与之对应的便是催生出一大批的软件工程师,程序员,码农,虽然程序员曾指数级的增长,但是优秀的软件工程师依然很少,目前互联网公司之间的竞争说到底就是人才的竞争,各个互联网公司对人才的渴望也是愈加强烈,为了筛选出理想的软件工程师,可谓费尽心思,一面,二面,甚至达到五面,六面.为了帮助各位程序员能顺利通过多轮的面试,小编整理出面试过程中被问的频率最高的面试题,助你在求职过程中,顺利被录用 关于web标准和w3c的理

合格linux运维人员必会的30道shell编程面试题及讲解

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1632876 超深度讲解shell高级编程实战,截至目前shell编程课程国内培训机构最细的课程,不信请看学员表现的水平. 课程牛不牛,不是看老师.课表,而是看培养的的学生水平,目前全免费中伙伴们赶紧看啊. http://edu.51cto.com/course/course_id-5257.html 企业合格的lin

嵌入式考试Shell编程题

单片机与嵌入式系统考试Shell编程题库,简单地做了下. 9. 与题7类似,多了个乘法运算. #!/bin/bash # test1.sh # 2016.1.2 echo "Please input N student grade:" read -a grade for ((i=0;i<${#grade[@]};i++)) do if [[ ${grade[i]} -ge 90 ]] then grade[i]=5 elif [[ ${grade[i]} -ge 80 ]] th

Shell编程进阶篇(完结)

1.1 for循环语句 在计算机科学中,for循环(英语:for loop)是一种编程语言的迭代陈述,能够让程式码反复的执行. 它跟其他的循环,如while循环,最大的不同,是它拥有一个循环计数器,或是循环变数.这使得for循环能够知道在迭代过程中的执行顺序. 1.1.1 shell中的for循环 shell中的for 循环与在c中不同,它包含三种形式:第一种结构是列表for 循环;第二种结构就是不带列表的for循环:第三种就类似于C语言. ①   列表for循环(常用) #!/bin/bash

老男孩新书Shell编程实战预定开始了-包邮包答疑

老男孩新书Shell编程实战预定开始了(扫图中二维码购买包邮定期包答疑),亲爱的伙伴们,让你们久等了.电脑用户猛戳 电脑购买链接 注意:包邮包3个月(2017春节后起算)Q群书籍内容答疑,等于白送书,还倒搭答疑服务. 如果觉得给力,请帮忙朋友圈.QQ群.空间转载! 活动优惠仅限本次活动,从其他渠道购买不享受此次的服务承诺. 定价 89元 基本信息 作者: 老男孩 丛书名: Linux/Unix技术丛书 出版社: 机械工业出版社 ISBN:9787111556077 上架时间:2017-1-6 出