Shell脚本练习题集合
1. 选择题
2. 填空题
3. 简答题
4. 编程题
5. 企业面试题
1. 函数内如何设置局部变量()
A:local B:export C:source D:function
2. 以下哪一种指令显示的结果为$test()
A:\echo $test B:echo “$test” C:echo ‘$test’ D:echo “${test}”
3. 一个bash shell脚本的第1行是什么()
A:#!/bin/bash B:#/bin/bash C:#/bin/csh D:/bin/bash
4. 以下参数,哪个可以查看脚本的执行过程()
A:-x B:-X C:-s D:-S
1. 写出以下位置参数的作用?
$0 $n $# $* $@
2. 写出以下特殊变量的作用?
$? $$ $! $_
3. 写出以下字母比较符的作用?
-eq -ne -gt -ge -lt -le
4. 写出下面特殊变量扩展的意义?
${qls} ${#qls} ${url#*.}
${url##*.} ${url%.*} ${url%%.*}
5. 填写以下字符串测试操作符的意义?
-n: -z:
6. 写出下面条件测试的含义?
[ -e dir|file ] [ -d dir ] [ -f file ]
[ -r file ] [ -x file ] [ -w file ]
1. 如何显示系统定义的环境变量?
2. 如何设置环境变量与局部变量?
3. 写出3个以上可用于计算的命令?
4. 定义变量内容,不加引号、单引号、双引号、反引号结果有什么不同?应该怎么用?
5. 写出break continue exit return 的区别。
6. 查看数组的索引与数组中元素的个数。
7. 数组array=(1 2 3 4 5 6)现在将数组中的3替换为C。
8. 如何定义普通数组与关联数组。
9. 写出输出数字 0 到 100 中 3 的倍数(0 3 6 9 …)的命令 ?
10. 如何向脚本传递参数 ?
11. 如何在脚本中使用参数 ?
12. 如何计算传递进来的参数 ?
13. 如何在脚本中获取脚本名称 ?
14. 如何检查之前的命令是否运行成功 ?
15. 如何获取一个文件每一行的第三个元素 ?
16. 假如文件中每行第一个元素是 test,如何获取第二个元素。
17. 如何调试 bash 脚本?
18. 举例如何写一个函数 ?
19. 如何将两个变量组合成一个变量?
20. 如何进行两个整数相加 ?
21. 如何检查文件系统中是否存在某个文件 ?
22. 写出 shell 脚本中所有循环语法 ?
23. 每个脚本开始的 #!/bin/sh 或 #!/bin/bash 表示什么意思 ?
24. 命令:[ -z "" ] && echo 0 || echo 1 的输出是什么?
25. 命令 “export” 有什么用 ?
26. 如何在后台运行脚本 ?
27. & 和 && 有什么区别?
28. 命令: name=qls && echo 'My name is $name' 的输出是什么?
29. bash shell 脚本中哪个符号用于注释 ?
30. 如何只用 echo 命令获取字符串变量的一部分 ?
31. 如果给定字符串 variable="User:123:321:/home/dir",如何只用 echo 命令获取 home_dir ?
32. 如何从上面的字符串中获取 “User” ?
33. 如何使用 awk 列出 UID 小于 100 的用户 ?
34. 如何在 bash shell 中更改标准的分隔符为 ":" ?
35. 如何获取变量长度 ?
36. 如何打印变量的最后 5 个字符 ?
37. 哪个命令将命令替换为大写 ?
38. "export $variable" 或 "export variable" 哪个正确 ?
39. 如何将整数 a 加到 b 并赋值给 c ?
40. 如何去除字符串中的所有空格 ?
41. 如何打印传递给脚本的所有参数 ?
42. [ $a == $b ] 和 [ $a -eq $b ] 有什么区别?
43. = 和 == 有什么区别?
44. 写出测试 $a 是否大于 12 的命令 ?
45. 写出测试 $b 是否小于等于 12 的命令 ?
46. 如何检查字符串是否以字母 "abc" 开头 ?
47. [[ $string == abc* ]] 和 [[ $string == "abc" ]] 有什么区别?
48. 如何输出当前 shell 的 PID ?
49. $* 和 $@ 有什么区别?
50. 如何打印数组的第一个元素 ?
51. 如何打印数组的所有元素 ?
52. 如何输出所有数组索引 ?
53. 如何移除数组中索引为 2 的元素 ?
54. 如何在数组中添加 id 为 333 的元素 ?
55. Shell 脚本如何获取输入的值 ?
56. 给出圆周率的值,精度为小数点后100位,什么是最简单的方法。
1. 按照时间生成文件2020-04-10.log将每天的磁盘使用状态写入到对应日期的文件。
2. 统计访问日志中每个IP的访问量有多少,日志如下:
`192.168.56.1 - - [21/May/2019:20:44:06 -0400] "GET /index.html HTTP/1.0" 404 169 "-" "ApacheBench/2.3" "-"/code/index.html`
3. 写一个脚本计算一下Linux系统所有进程占用内存大小的和。
4. 在/backup下创建10个.txt的文件,找到/backup目录下所有后缀名为.txt的文件。
1.批量修改txt为txt.bak
2.把所有的.bak文件打包压缩为123.tar.gz
3.批量还原文件的名字,及把增加的.bak再删除
5. 输入两个整数计算这两个整数的相加,相减,相乘,相除,求余的结果。
6. 把一个文本文档的前五行中包含字母的行删除掉,同时把6到10行中的全部字母删除掉。
7. 打印下面这句话中字母数小于5的单词 I am qiuzengjia teacher I am 18。
8. 写个shell,看看你的linux系统中是否有自定义用户(普通用户),若是有,一共有几个?
9. 写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10。
10. 编写一个脚本,计算100以内所有能被3整除数字的和。
11. 将下面的条件表达式改写为if条件语句。
[ -f /etc/hosts ] && echo ERROR
12. 写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些?
13. 用shell处理以下内容
the squid project provides a number of resources toassist users design,implement and support squid installations. Please browsethe documentation and support sections for more infomation
13.1 按单词出现频率降序排序!
13.2 按字母出现频率降序排序!
14. 使用ps aux查看系统进程发现有100多个test.sh脚本正在运行,如何杀死所有的test.sh。
15. 写一个猜数字脚本,当用户输入的数字和预设数字(随机生成一个0-100的数字)一样时,直接退出,否则让用户一直输入,并且提示用户的数字比语塞数字大或者小。
16. 用Shell实现,把一个文本文档中只有一个数字的行给打印出来。
17. 写一个Shell脚本通过curl命令返回的状态码来判定所访问的网站是否正常,比如当前状态码200,才算正常。
18. 使用while循环使1加到100并显示计算结果。
19. 查看磁盘/当前使用状态,如果使用率超过80%则把结果输出到/var/log/disk.err。
20. 脚本用read批量创建10个用户,密码统一为123,需要对用户输入是否为数字和输入的名字是否为空做判断。
21. 使用case语句编写nginx启动脚本。
22. 老男孩教育上海项目学生实践抓阄题目。
老男孩培训学生外出企业项目实践机会来了,但是名额有限,只限3人。因此需要挑选学生,因此需要一个抓阄的程序。
要求:
1、 执行脚本后,想去的同学输入英文名字全拼,产生随机数01-99之间的数字,数字越大就去参加项目实践,前面已经抓到的数字,下次不能在出现相同数字。
2、 第一个输入名字后,屏幕输出信息,并将名字和数字记录到文件里,程序不能退出继续等待别的学生输入。
23. 打印一个菜单如下,然后用循环加case语句输出用户输入菜单选项的结果。
h 显示命令帮助
f 显示登陆信息
d 显示磁盘挂载
m 查看内存使用
u 查看系统负载
q 退出脚本程序
24. 生成0-100之间的随机数,并相加,直到大于1000,输出相加的结果。
25. 生成0-100之间的随机数,并相加,直到大于1000,并判断最后一个随机数字能否被3整除。
26. 判断/tmp目录下是否有大于4k的文件,如果有则输出该文件的大小与创建时间。
27. 数组array=(1 2 3 4 5 6)使用脚本打印出每个元素(每行显示一个元素)。
28. 使用数组判断I am qiuzengjia teacher welcome to training class中字母数大于6的单词。
29. 检测服务器中重要的文件是否被修改吗如果被修改则报警(使用指纹)。
30. 计算nginx日志中访问最多的10个IP使用的流量总和。
31. 防止DOS攻击(检测nignx日志若某个IP短时间的PV过大则使用防火墙将其禁掉)。
32. 实时监控服务器CPU使用率大于80%、磁盘使用率大于80%,内存使用率大于80%时报警。
33. 编译安装Nignx到/usr/local目录中(脚本可以重复执行)。
34. 数据库分库分表备份到/tmp下。
35. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。
1. 监控MySQL主从同步是否异常,如果异常,则发送短信或者邮件给管理员。
要求:
1、编写一个守护进程脚本每30秒实现检测一次。
2、如果出现1158 1159 1008 1007 1062错误,请跳过此错误。
2. 使用for循环在/data目录下通过随机小写10个字母加固定字符串qls批量创建10个html文件,名称例如为:
[root@qls test]# ls
coaolvajcq_qls.html qnvuxvicni_qls.html vioesjmcbu_qls.html
gmkhrancxh_qls.html tmdjormaxr_qls.html wzewnojiwe_qls.html
jdxexendbe_qls.html ugaywanjlm_qls.html xzzruhdzda_qls.html
qcawgsrtkp_qls.html vfrphtqjpc_qls.html
3. 将以上文件名中的qls全部改成qiudao(用for循环实现),并且将html改成大写(两种方法实现)。
4. 批量创建10个系统帐号qls01-qls10并设置密码(密码为随机8位字符串)。
5. 写一个脚本,实现判断10.0.0.0/24网络里,当前在线用户的IP有哪些(方法有很多)?
6. 写一个脚本解决DOS攻击生产案例。请用至少两种方法实现!
提示:根据web日志或者或者网络连接数,监控当某个IP并发连接数或者短时内PV达到100,即调用防火墙命令封掉对应的IP,监控频率每隔3分钟。防火墙命令为:iptables -I INPUT -s 10.0.0.10 -j DROP。
7. 开发mysql多实例启动脚本:
已知mysql多实例启动命令为:mysqld_safe--defaults-file=/data/3306/my.cnf &
停止命令为:mysqladmin -u root -pqls123 -S /data/3306/mysql.sock
请完成mysql多实例启动启动脚本的编写
要求:用函数,case语句、if语句等实现。
8. 如何实现对MySQL数据库进行分库备份,请用脚本实现?
9. 如何实现对MySQL数据库进行分库加分表备份,请用脚本实现?
10. for循环打印下面这句话中字母数不大于6的单词(昆仑万维面试题)。请用至少两种方法实现!
11. 开发shell脚本分别实现以脚本传参以及read读入的方式比较2个整数大小。以屏幕输出的方式提醒用户比较结果。
注意:一共是开发2个脚本。当用脚本传参以及read读入的方式需要对变量是否为数字、并且传参个数做判断。
12. 打印选择菜单,一键安装Web服务:
[root@qls scripts]# sh menu.sh
1.[install lamp]
2.[install lnmp]
3.[exit]
please input the num you want: 2
要求:
1、当用户输入1时,输出“start installing lamp.”然后执行/server/scripts/lamp.sh,输出"lamp is installed" 后退出脚本;
2、当用户输入2时,输出“start installing lnmp.”然后执行/server/scripts/lnmp.sh,输出"lnmp is installed" 后退出脚本;
3、当输入3时,退出当前菜单及脚本;
4、当输入任何其它字符,给出提示“Input error”后退出脚本。
5、要对执行的脚本进行相关条件判断,例如:脚本是否存在,是否可执行等。
13. 分别监控web服务和db服务是否正常,不低于3种监控策略。要求间隔1分钟,持续监控。
14. 监控web站点目录(/var/html/www)下所有文件是否被恶意篡改(文件内容被改了),如果有就打印改动的文件名(发邮件),定时任务每3分钟执行一次。
15. 使用函数编写rsync的系统启动脚本。
16. 已知下面的字符串是通过RANDOM随机数变量md5sum|cut-c 1-8截取后的结果,请破解这些字符串对应的md5sum前的RANDOM对应数字?
21029299
00205d1c
a3da1677
1f6d12dd
31d30eea
17. 批量检查多个网站地址是否正常 。
要求:shell数组方法实现,检测策略尽量模拟用户访问思路
http://www.taobao.com
http://www.increase93.com
http://www.jddd.com
18. 使用shell脚本打印9x9乘法表?
19. 判断/etc/inittab文件是否大于100行,如果大于,则显示”/etc/inittab is a big file.”否者显示”/etc/inittab is a small file.”
20. 给定一个用户,来判断这个用户是什么用户,如果是管理员用户,则显示“该用户为管理员”,否则显示“该用户为普通用户”
21. 判断某个文件是否存在?
22. 判断当前系统上是否有用户的默认shell程序是否为bash程序,如果有,就显示有多个这类用户,否则就显示没有这类用户。(并且显示出那些用户是bash)
23. 统计netstat -tan中每种状态的数量?
24. 计算1-100内偶数的和?
25. 编写shell脚本,输入一个数字n并计算1~n的和。要求:如果输入的数字小于1,则重新输入,直到输入正确的数字为止。