Shell脚本练习题集合

Shell脚本练习题集合
         1. 选择题
         2. 填空题
         3. 简答题
         4. 编程题
         5. 企业面试题

1. 选择题

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

2. 填空题

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 ]

3. 简答题

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位,什么是最简单的方法。

4. 编程题

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脚本来得到当前的日期,时间,用户名和当前工作目录。

5. 企业面试题

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/myf &
停止命令为: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
http://www.increase93
http://www.jddd  

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,则重新输入,直到输入正确的数字为止。

 

更多推荐

Shell脚本练习题集合