注:初学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. linux系统ifconfig中网卡名和网卡配置文件名称不同的解决办法

    比如我的配置文件, cd /etc/sysconfig/network-scripts/ifcfg-eth1是这个名称,但是我使用ifconfig显示的信息却是 eth0,很明显这不是我配置文件的名称 ...

  2. python set去重简析

    python 中的集合可以去重是实现了__hash__与__eq__ 当class没有定义__eq__()方法时,那么它也不应该定义__hash__()方法.如果它定义了__eq__()方法,却没有定 ...

  3. .NET平台系列12 .NET未来之开源.NET Core

    系列目录     [已更新最新开发文章,点击查看详细] 微软于2014年11月推出了.NET Core 1.0..NET Core的目标是从我们在过去12年中对.NET Framework的构建.交付 ...

  4. MegEngine基本概念

    MegEngine基本概念 基本概念 MegEngine 是基于计算图的深度神经网络学习框架. 本文内容会简要介绍计算图及其相关基本概念,以及在 MegEngine 中的实现. 计算图 结合一个简单的 ...

  5. 激光雷达lidar与点云数据

    激光雷达lidar与点云数据 DEM是分布和显示数字地形的首个广泛使用的机制. 点云是在空间中随机放置的3D点的集合.传感器发出能量脉冲并乘以其返回行程(TWTT,双向行程时间).知道了传感器的位置以 ...

  6. 如果攻击者操控了 redirect_uri,会怎样?

    读者在看这篇文章之前,请先了解 Oauth2.0 的 Authorization Code 授权流程,可以看 Authorization Code 授权原理和实现方法 在 Token Enpoint ...

  7. 解决servlet响应乱码问题

    当我们使用servlet响应中文时,浏览器接收的内容就会乱码显示出来,原因是响应数据时使用的是utt-8编码,而浏览器解析响应用的的编码却不是utf-8,这样就会造成乱码. 解决办法: respons ...

  8. springmvc——基于xml的异常映射和基于注解的异常映射

    SpringMVC提供了基于XML和基于注解两种异常映射机制.这两种异常映射不能够只使用一个,他们需要一起使用.因为有些异常是基于注解异常映射捕获不到的. 在springmvc中,一个请求如果是由&l ...

  9. 码农飞升记-04-OracleJDK 与 OpenJDK 的区别和联系以及 OracleJDK builds 与其他 OpenJDK builds 的选择问题

    在前两篇 OracleJDK是什么?OracleJDK的版本怎么选择? 和 OpenJDK是什么? 中分别介绍了 OracleJDK 和 OpenJDK 的来历以及概念,那可能就有小伙伴要问了:那我到 ...

  10. 『无为则无心』Python基础 — 3、搭建Python开发环境

    目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...