Shell练习题(1)

(1)请按照这样的日期格式(xxxx-xx-xx)每日生成一个文件,例如今天生成的文件为2017-07-05.log, 并且把磁盘的使用情况写到到这个文件中,(不用考虑cron,仅仅写脚本即可)!

#! /bin/bash
d=`date +%F`
logfile=$d.log
df -h > $logfile

(2)统计日志

有日志1.log,内容如下: 日志片段:

112.111.12.248 - [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com "/seccode.php?update=0.5593110133088248" 200"http://formula-x.haotui.com/registerbbs.php" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)"
61.147.76.51 - [25/Sep/2013:16:08:31 +0800]xyzdiy.5d6d.com "/attachment.php?aid=4554&k=9ce51e2c376bc861603c7689d97c04a1&t=1334564048&fid=9&sid=zgohwYoLZq2qPW233ZIRsJiUeu22XqE8f49jY9mouRSoE71" 301"http://xyzdiy.***thread-1435-1-23.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"

要求: 统计出每个IP的访问量有多少?

# awk ‘{print $1}‘ 1.log |sort -n|uniq -c

(3)统计内存使用

写一个脚本计算一下linux系统所有进程占用内存大小的和。(提示,使用ps或者top命令)

#! /bin/bash
sum=0
for mem in `ps aux |awk ‘{print $6}‘ |grep -v ‘RSS‘ `
do
    sum=$[$sum+$mem]
done
echo "The total memory is $sum""k"

也可以使用awk 一条命令计算:

#ps aux | grep -v ‘RSS TTY‘ |awk ‘{(sum=sum+$6)};END{print sum}‘

(4)设计监控脚本

监控远程的一台机器(假设ip为123.23.11.21)的存活状态,当发现宕机时发一封邮件给你自己。 提示:

  1. 你可以使用ping命令 ping -c10 123.23.11.21
  2. 发邮件脚本可以参考 https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D22Z/mail.py
  3. 脚本可以搞成死循环,每隔30s检测一次
#!/bin/bash
ip=123.23.11.21
[email protected]

while 1
do
        ping -c10 $ip >/dev/null 2>/dev/null
        if [ $? != "0" ]
        then
               python /usr/local/sbin/mail.py $ma "$ip down" "$ip is down,plese check."
               #假设mail.py已经编写并设置好了
        fi
        sleep 30
done

(5) 批量更改文件名

找到/123目录下所有后缀名为.txt的文件

  1. 批量修改.txt为.txt.bak
  2. 把所有.bak文件打包压缩为123.tar.gz
  3. 批量还原文件的名字,即把增加的.bak再删除
#!/bin/bash
##查找txt文件
find /123 -type f -name "*.txt" > /tmp/txt.list
##批量修改文件名
for f in `cat /tmp/txt.list`
do
    mv $f $f.bak
done
##创建一个目录,为了避免目录已经存在,所以要加一个复杂的后缀名
d=`date +%y%m%d%H%M%S`
mkdir /tmp/123_$d
##把.bak文件拷贝到/tmp/123_$d
for f in `cat /tmp/txt.list`
do
    cp $f.bak /tmp/123_$d
done
##打包压缩
cd /tmp/
tar czf 123.tar.gz 123_$d/
##还原
for f in `cat /tmp/txt.list`
do
    mv $f.bak $f
done
时间: 2024-08-04 22:22:59

Shell练习题(1)的相关文章

shell练习题:使用for循环批量修改文件扩展名

shell练习题:使用for循环批量修改文件扩展名 说明:(1)在linux下批量修改文件名,将下图所示命令中的"_linux"去掉. (2)使用for循环脚本. 思路:本题的基本解题思路,先进行单个文件的改名,然后再用循环实现批量改名,这是比较常规的做法,也可以用rename专业改名工具. 方法一: 说明:使用cut.sed工具 脚本如下: #!/bin/bash cd /test for i in `ls|grep .*.jpg` do mv $i `echo $i |cut -d

shell 脚本之 shell 练习题汇总

整理了一些 shell 相关的练习题,记录到这里. 1. 请按照这样的日期格式 xxxx-xx-xx 每日生成一个文件,例如:今天生成的文件为 2013-09-23.log, 并且把磁盘的使用情况写到到这个文件中. 1 #!/bin/bash 2 # Date: 2016-12-22 3 # Author: liwei 4 5 today=$(date +%Y-%m-%d) 6 log_file_name=/var/log/selfdefine/${today}.log 7 /bin/df -l

bash编程:Shell练习题

bash编程:练习题 1. 写一个脚本:如果某路径不存在,则将其创建为目录:否则显示其存在,并显示内容类型 #!/bin/bash # baseurl=/var/tmp/testdir if [ -e $baseurl ]; then echo "file is no exists." else mkdir -p $baseurl file $baseurl fi 2. 写一个脚本,完成如下功能:判断给定的两个数值,孰大孰小:给定数值的方法:脚本参数,命令交互 #!/bin/bash

shell 练习题01:列出使用最多的命令是哪些并且将这些命令输入到chy1.txt中

需求:列出使用最多的命令是哪些并且将这些命令输入到chy1.txt中 思路:我们的命令都是存在了历史文件/root/.bash_history 这个文件里面,这里需要将用到的命令进行排序 [[email protected] shell]# vim history.sh  #!/bin/bash #this is liechu history zuiduodmingling sort /root/.bash_history |uniq -c |sort -nr |head >/tmp/chy1.

Shell练习题(2)

(1)监控80端口写一个脚本,判断本机的80端口是否开启着,如果开启着什么都不做,如果发现端口不存在,那么重启一下httpd服务,并发邮件通知你自己.脚本写好后,可以每一分钟执行一次,也可以写一个死循环的脚本,30s检测一次. #! /bin/bash [email protected] if netstat -lnp |grep ':80' |grep -q 'LISTEN'; then     exit else     /usr/local/apache2/bin/apachectl re

shell 练习题02 一个文件里将内容三行显示为一行

要求: 一个文件里将内容三行显示为一行 思路:是将第二行的内容,第三行的内容依次附加到第一行中,这样三行的内容就能变为一行,如果不够三行自动融为一行,具体如下 [[email protected] shell]# cat /tmp/chy.txt  1 2 3 4 g 6 8 (查看chy.txt的内容) [[email protected] shell]# vim yihang.sh #!/bin/bash #this is san hang bian wei yi hang sed 'N;N

30道shell练习题

1  先测试"/etc/vsftpd"."/etc/hosts"是否为目录,并通过"$?"变量查看返回状态值,据此判断测试结果. [[email protected] ~]#  [ -d /etc/vsftpd ] [[email protected] ~]# echo $? 1 [[email protected] ~]#  [ -d /etc/hosts ] [[email protected] ~]# echo $? 1 2  测试&quo

shell练习题

1.命令test或[可以测试一个条件是否成立,如果测试结果为真,则该命令的返回状态为0:如果测试结果为假,则该命令的返回状态为1.(与C语言的逻辑表示正好相反) 2.  -eq(等于) -ne(不等于) -lt(小于) -le(小于等于) -gt(大于) -ge(大于等于) 它们的操作对象是整数或者取值为整数的变量. 3. -a(逻辑与) -o(逻辑或) !(逻辑或) &&和||用于连接两个命令,而-a.-o仅用于在测试表达式中连接两个测试条件. 4.1~100之间的求和 (1)递归 运行

shell练习题讲解

写一个脚本,计算100以内所有的奇数的和以及所有偶数的和,分别显示出来#! /bin/bashsum1=0for i in `seq 1 2 100`do sum1=$[$sum1+$i]doneecho $sum1 sum2=0for j in `seq 2 2 100`do sum2=$[$sum2+$j]doneecho $sum2 写一个脚本,利用RANDOM生成10个随机数,并且找出最大值和最小值 for i in `seq 1 10`do n[$i]=$RANDOM echo ${n