注:初学shell,以下为本人自己写的答案,如果有更好的,请指教!

1. 求2个数之和:

2. 计算1-100的和

3. 将一目录下所有的文件的扩展名改为bak

4.编译并执行当前目录下的所有.c文件

5.打印本机的交换分区大小,处理结果: Swap:1024M

6. 文本分析,取出/etc/password中shell出现的次数

第一种方法结果:

4  /bin/bash

1  /sbin/halt

2  /sbin/nologin

7. 文件整理,employee文件中记录了工号和姓名

100 Jason Smith

200 John Doe   

300 Sanjay Gupta

400 Ashok Sharma

bonus文件中记录工号和工资:

100 $5,000

200 $500

300 $3,000

400 $1,250

要求把两个文件合并并输出如下,处理结果:

400 ashok sharma $1,250

100 jason smith  $5,000

200 john doe  $500

300 sanjay gupta  $3,000

sort employee.txt
sort salary.txt
join employee.txt salary.txt | sort -k2

8. 写一个shell脚本来得到当前的日期,时间,用户名和当前工作目录。

 1 #!/bin/bash
2 echo "the present date is : `date` "
3 echo "the present user is : `whoami`"
4 echo "the present dir is : `pwd`"

9. 编写shell脚本获取本机的网络地址。

 1 #!/bin/bash
2 echo "IP=$(ifconfig eth3| sed -n '/inet addr:/p'|awk '{print $2}'|awk -F: '{print $2}')"

10. 编写个shell脚本将当前目录下大于10K的文件转移到/tmp目录下

 1 #!/bin/bash
2 for file in $(ls -l | awk '$5 >100 {print $9}')
3 do
4 mv $file /home/chenjj/shell/temp
5 done

11. 编写一个名为myfirstshell.sh的脚本,它包括以下内容。

a) 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的。

b) 问候用户。

c) 显示日期和时间。

d) 显示这个月的日历。

e) 显示您的机器名。

f) 显示当前这个操作系统的名称和版本。

g) 显示父目录中的所有文件的列表。

h) 显示root正在运行的所有进程。

i) 显示变量TERM、PATH和HOME的值。

j) 显示磁盘使用情况。

k) 用id命令打印出您的组ID。

m) 跟用户说“Good bye”

  1 #!/bin/bash
2 echo "hello!"
3 echo "Today is : $(date)"
4 #echo $(date)
5 echo "this month is :"
6 cal
7 echo "the hostname is : $(hostname)"
8 echo "the name of OS is $(uname -r) and the verion is $(uname -r) "
9 echo "the files are :$(ls -l ../)"
10 echo "the running process of root is $(ps -u root)"
11 echo "TERM=$TERM"
12 echo "PATH=$PATH"
13 echo "HOME=$HOME"
14 echo "the use of disk is :$(df -lh)"
15 echo "the id of the group is $(id -g)"
16 echo "Goodbye Sir!"

12. 文件移动拷贝,有m1.txt m2.txt m3.txt m4.txt,分别创建出对应的目录,m1 m2 m3 m4 并把文件移动到对应的目录下

  1 #!/bin/bash
2 touch m1.txt m2.txt m3.txt m4.txt
3 for((i=1;i<=4;i++))
4 do
5 mkdir m$i
6 mv m$i.txt m$i
7 done

13. 终端输入一个文件名,判断是否是设备文件

  1 #!/bin/bash
2 #coding=utf-8
3 echo "please input a filename:"
4 read fileName
5 if [ -c $fileName -o -b $fileName ]
6 then
7 echo "$fileName 是设备文件!"
8 else
9 echo "$fileName 不是设备文件!"
10 fi

14. 统计IP访问:要求分析apache访问日志,找出访问页面数量在前100位的IP数。日志大小在78M左右。以下是apache的访问日志节选:

202.101.129.218 - - [26/Mar/2006:23:59:55 +0800] "GET /online/stat_inst.php?pid=d065 HTTP/1.1" 302 20-"-" "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

关于apache日志的了解请见https://blog.csdn.net/xingxiupaioxue/article/details/70153166

日志记录的第六项信息是状态代码。它告诉我们请求是否成功,或者遇到了什么样的错误。大多数时候,这项值是200,它表示服务器已经成功地响应浏览器的请求,一切正常。此处不准备给出状态代码的完整清单以及解释它们的含义,请参考相关资料了解这方面的信息。但一般地说,以2开头的状态代码表示成功,以3开头的状态代码表示由于各种不同的原因用户请求被重定向到了其他位置,以4开头的状态代码表示客户端存在某种错误,以5开头的状态代码表示服务器遇到了某个错误。

1 #!/bin/bash
2 awk '{print $1}' $1 |sort |uniq -c |sort -k1nr | head -n 100
执行脚本:source apache.sh apache(文件)

15. 设计一个Shell程序,在/userdata目录下建立50个目录,即user1~user50,并设置每个目录的权限,其中其他用户的权限为:读;文件所有者的权限为:读、写、执行;文件所有者所在组的权限为:读、执行。

  1 #!/bin/bash
2 cd /Userdata
3 for ((i=1;i<=50;i++))
4 do
5 mkdir user$i
6 chmod 754 user$i
7 done

16. 设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30,并设置密码为对应的stdxx。

  1 #!/bin/bash
2 #coding=utf-8
3 #设计一个shell程序,添加一个新组为class1,然后添加属于这个组的30个用户,用户名的形式为stdxx,其中xx从01到30,并设置密码为对应的stdxx。
4 groupadd class1
5 i=1
6 while [ $i -le 30 ]
7 do
8 if [ $i -lt 10 ]
9 then
10 useradd -g class1 std0$i
11 passwd std0$i std0$i
12 else
13 useradd -g class1 std$i
14 passwd std$i std$i
15 fi
16 let "i++"
17 done

17.编写shell程序,实现自动删除30个账号的功能。账号名为std01至std30。

  1 #!/bin/bash
2 i=1
3 while [ $i -le 30 ]
4 do
5 if [ $i -lt 10 ]
6 then
7 userdel std0$i
8 else
9 userdel std$i
10 fi
11 let "i++"
12 done

18. 用户清理,清除本机除了当前登陆用户以外的所有用户

kill $(who -u | grep -v `whoami`| awk '{print $6}'|sort -u )

19.写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。

  1 #!/bin/bash
2 #coding=utf-8
3 #在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
4 files=`find /tmp -type f -name "abc*" | head -n 100`
5 for file in $files
6 do
7 sed -n '1p' $file >> new
8 done

20. 把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。

21. 查看TCP连接状态

netstat -ant | awk '{print $6}'|sort |uniq -c|sort -k1nr

22. 查找请求数为20个IP(常用于查找攻来源)

netstat -atn | grep 80 |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c |sort

23. 查找较多time_wait连接

netstat -n | grep 'TIME_WAIT' | awk '{print $5}'|sort | uniq -c |sort -k1nr

24. 获得访问前10位的ip地址,access.log日志记录

61.155.149.20 - - [13/Jan/2017:15:42:47 +0800] "GET /category/db/ HTTP/1.1" 200 23225

cat access.log | awk '{print $1}' | sort |uniq -c |sort -nr | head -n10

 Linux常用:

1. 查看服务器空间:

df -h

2. 查看当前目录下哪个文件占用最大:

du -h --max-depth=1

3. 查看指定目录下文件大小:

du -sh ${dir}
du -sh * # 查看当前目录下各文件及文件夹占用大小

4. 查看服务器端口是否被占用:

lsof  -i:8081

5.查看服务器所有端口:

netstat -ntlp

 

shell运维习题训练的更多相关文章

  1. [转帖]Shell运维手册

    shell实例手册    https://github.com/liquanzhou/ops_doc   0 说明{       手册制作: 雪松   更新日期: 2018-09-11       欢 ...

  2. 最全的linux命令大全,shell运维手册

    shell实例手册 0 说明{ 手册制作: 雪松} 1 文件{        ls -rtl                 # 按时间倒叙列出所有目录和文件 ll -rt    touch file ...

  3. linux运维自动化shell脚本小工具

    linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU # ...

  4. CentOS 下运维自动化 Shell 脚本之 expect

    CentOS 下运维自动化 Shell脚本之expect 一.预备知识: 1.在 Terminal 中反斜杠,即 "" 代表转义符,或称逃脱符.("echo -e与pri ...

  5. Linux运维初级教程(一)Shell脚本

    序,掌握shell脚本是linux运维工程师的最基础技能. 一.脚本语言 与高级语言不通,脚本语言运行时需要调用相应的解释器来翻译脚本中的内容. 常见的脚本语言有Shell脚本.Python脚本.ph ...

  6. linux上安装shell编辑器与linux运维面试题

    分两个部分 一.安装B-shell解释器 安装cygwin  Eclipse要找到安装的bin路径 https://cygwin.com 二.安装编辑器shellEd 下载可以得到一个:net.sou ...

  7. 转 如何不耍流氓的做运维之——SHELL脚本

    家都是文明人,尤其是做运维的,那叫一个斯文啊.怎么能耍流氓呢?赶紧看看,编写 SHELL 脚本如何能够不耍流氓. 下面的案例,我们以 MySQL 数据库备份 SHELL 脚本的案例来进行阐述. 不记录 ...

  8. 自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)

    项目简介: 项目介绍:自动化运维是未来的趋势,最近学了不少东西,正好通过这个小项目把这些学的东西串起来,练练手. 基础架构: 服务器端:web框架-Django 前端:html css jQuery ...

  9. 运维shell全部语法进阶

    Linux运维之shell脚本进阶篇 一.if语句的使用 1)语法规则 1 2 3 4 5 6 7 8 9 if [条件]     then         指令 fi 或 if [条件];then ...

随机推荐

  1. Centos下删除文件后空间并未释放

    [root@DeviceSP /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/vda3 90G 82G 3.8G 96% / tmp ...

  2. 10.19 dig:域名查询工具

    dig命令 是常用的域名查询工具,可以用于测试域名系统的工作是否正常.  dig命令的参数选项及说明 @<DNS服务器地址>    指定进行城名解析的域名服务器.当不希望使用本机默认的DN ...

  3. 【odoo14】【用户侧】权限配置

    以下内容仅适用于odoo的客户,不适用于开发人员. 下文介绍中涉及的概念及UI均是在odoo14社区版中进行. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2.2 UI方式实现权限 ...

  4. Nginx_学习笔记

    Nginx_学习笔记 01-Nginx 课程介绍 02-Nginx 的简介 1. 什么是 Nginx ? 03-Nginx 相关概念(正向和反向代理) 1. 什么是反向代理?能否简要画出其示意图 2. ...

  5. Python3.6 的字典为什么会快

    作者:青南链接:https://zhuanlan.zhihu.com/p/73426505来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在Python 3.5(含)以 ...

  6. Non-Maximum Suppression,NMS非极大值抑制

    Non-Maximum Suppression,NMS非极大值抑制概述非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索. ...

  7. 代码生成codegen

    代码生成codegen 该模块提供了从SymPy表达式生成直接可编译代码的功能.该codegen功能是SymPy中代码生成功能的用户界面.下面为可能希望直接使用框架的高级用户提供了一些实现细节. 注意 ...

  8. 基于NVIDIA GPUs的深度学习训练新优化

    基于NVIDIA GPUs的深度学习训练新优化 New Optimizations To Accelerate Deep Learning Training on NVIDIA GPUs 不同行业采用 ...

  9. 编译ONNX模型Compile ONNX Models

    编译ONNX模型Compile ONNX Models 本文是一篇介绍如何使用Relay部署ONNX模型的说明. 首先,必须安装ONNX包. 一个快速的解决方案是安装protobuf编译器,然后 pi ...

  10. Java中List和Map的区别

    一.List和Map 1.特点 (1).List 1.可以允许重复的对象. 2.可以插入多个null元素. 3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序. 4.常用的实现类有 ...