shell习题-15

题目要求
写个shell,看看你的Linux系统中是否有自定义用户(普通用户),若是有,一共有几个?

核心要点
centos6 uid>=500
eentos7 uid>=1000

awk -F ‘:‘ ‘$3>=500‘ /etc/passwd|wc -l centos 5 6
awk -F ‘:‘ ‘$3>=1000‘ /etc/passwd|wc -l centos 7
awk -F ‘release‘ ‘{print $2}‘ /etc/redhat-release|cut -d ‘.‘ -f1

参考答案

#!/bin/bash
v=`awk -F ‘release ‘ ‘{print $2}‘ /etc/redhat-release |cut -d ‘.‘ -f1`
user()
{
      if [ $1 -eq 0 ]
      then
          echo "系统没有自定义的用户"
      else
          echo "系统存在自定义用户,有$1个"
      fi
}
case $v in
  5|6)
      n=`awk -F ‘:‘ ‘$3>=500‘ /etc/passwd|wc -l`
      user $n
  ;;
  7)
      n=`awk -F ‘:‘ ‘$3>=1000‘ /etc/passwd|wc -l`
      user $n
  ;;
  *)
     echo "脚本出错."
  ;;
esac

题目要求

写一个shell脚本,检测所有磁盘分区使用率和inode使用率并记录到以当天日期为命名的日志文件里,当发现某个分区容量或者inode使用量大于85%时,发邮件通知你自己。

参考答案

#!/bin/bash
dir=/tmp/disk
d=`date +%F`
[email protected]

[ -d $dir ] || mkdir $dir

df >> $dir/$d.log
df -i >> $dir/$d.log

df|sed ‘1d‘ |awk -F ‘ +|%‘ ‘$5>=85 {print $7}‘ > $dir/df.tmp
df -i|sed ‘1d‘ |awk -F ‘ +|%‘ ‘$5>=85 {print $7}‘ > $dir/df_i.tmp

n1=`wc -l $dir/df.tmp|awk ‘{print $1}‘`
n2=`wc -l $dir/df_i.tmp|awk ‘{print $1}‘`

tag=0
if [ $n1 -gt 0 ]
then
    if [ $n2 -gt 0 ]
    then
    tag=11
    else
    tag=10
    fi
else
    if [ $n2 -gt 0 ]
    then
    tag=01
    else
    tag=00
    fi
fi

case $tag in
    11)
    python mail.py $mail "磁盘空间和inode使用率高于85%" "`cat $dir/df.tmp $dir/df_i.tmp|xargs`"
        ;;
    10)
    python mail.py $mail "磁盘空间使用率高于85%" "`cat $dir/df.tmp|xargs`"
    ;;
    01)
    python mail.py $mail "磁盘inode使用率高于85%" "`cat $dir/df_i.tmp|xargs`"
    ;;
    *)
    ;;
esac

题目要求

有一台服务器作为web应用,有一个目录(/data/web/attachment)不定时地会被用户上传新的文件,但是不知道什么时候会上传。所以,需要我们每5分钟做一次检测是否有新文件生成。

请写一个shell脚本去完成检测。检测完成后若是有新文件,还需要将新文件的列表输出到一个按年、月、日、时、分为名字的日志里。

要点
find -mmin -5
date +%Y%m%d%H%M

#!/bin/bash
basedir=/data/web/attachment
t=date +%Y%m%d%H%M

find $basedir/ -type f -mmin -5 > /tmp/file.list
n=wc -l /tmp/file.list|awk ‘{print $1}‘
if [ $n -lt 0 ]
then
mv /tmp/file.list /tmp/$t.list
fi

题目要求

写一个shell脚本来看看你使用最多的命令是哪些,列出你最常用的命令top10。

参考答案

cat ~/.bash_history |sort |uniq -c |sort -nr |head -n 10 

题目要求

假如需要每小时都去执行一个脚本。在脚本中实现这样的功能,当时间是0点和12点时,需要将目录/data/log/下的文件全部清空,

注意只能清空文件内容而不能删除文件。而其他时间只需要统计一下每个文件的大小,一个文件一行,输出到一个按日期和时间为名字的日志里。

需要考虑/data/log/目录下的二级、三级、…??等子目录里面的文件。

要点
find列出所有文件
date +%H

file清空文件

参考答案

#!/bin/bash
dir=/tmp/log_stat
t=`date +%d%H`
t1=`date +%H`
logdir=/data/log

[ -d $dir ] || mkdir $dir
[ -f $dir/$t.log ] && rm -f $dir/$t.log

if [ $t == "00" -o $t == "12" ]
then
    for f in `find $logdir/ -type f`
    do
    > $f
    done
else
    for f in `find $logdir/ -type f`
    do
    du -sh $f >> $dir/$t.log
    done
fi

原文地址:https://blog.51cto.com/865516915/2433138

时间: 2024-11-10 05:25:54

shell习题-15的相关文章

linux shell习题训练

shell习题训练 求2个数之和 计算1-100的和 将一目录下所有的文件的扩展名改为bak 编译当前目录下的所有.c文件: 打印root可以使用可执行文件数,处理结果: root's bins: 2306 打印当前sshd的端口和进程id,处理结果: sshd Port&&pid: 22 5412 输出本机创建20000个目录所用的时间,处理结果: real 0m3.367s user 0m0.066s sys 0m1.925s 打印本机的交换分区大小,处理结果: Swap:1024M

C/C++算法竞赛入门经典Page16 习题1-5 打折

题目:一件衣服 95元,若消费满300元,可打八五折.输入购买衣服件数,输出需要支付的金额(单位元),保留两位小数. 通过分支结构可以判断是否要打八五折. (1)声明衣服件数a,需要支付的金额b: int a;//a为衣服件数 double b;//b为支付金额 (2)输入a: scanf("%d",&a); (3)通过if...else...或者...?...:...判断总金额是否大等于300,如果大等与300则打八五折: if(a*95>=300) b=(double

shell习题-清理日志

要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件.在堡垒机批量发布,也要批量发布到crontab里面. A类机器日志存放路径很统一,B类机器日志存放路径需要用*匹配(因为这个目录里除了日志外,还有其他文件,不能删除.匹配的时候可用*.log) A类:/opt/cloud/log/   删除7天前的B类: /opt/cloud/instances/  删除15天前的 要求写在一个脚本里面.不用考虑堡垒机上的操作,只需要写出shell脚本. #!/bin/bash dir1=/

shell习题-22

题目要求 写一个shell脚本,通过curl -I 返回的状态码来判定所访问的网站是否正常.比如,当状态码为200时,才算正常. 参考答案 #!/bin/bash #这个脚本用来判断一个网址是否正常 #作者:猿课-阿铭 www.apelearn.com #日期:2018-11-01 url="http://www.apelearn.com/index.php" [email protected] code=`curl -I $url 2>/tmp/curl.err|head -1

shell习题-27

题目要求 要求:两类机器一共300多台,写个脚本自动清理这两类机器里面的日志文件.在堡垒机批量发布,也要批量发布到crontab里面. A类机器日志存放路径很统一,B类机器日志存放路径需要用匹配(因为这个目录里除了日志外,还有其他文件,不能删除.匹配的时候可用.log) A类:/opt/cloud/log/ 删除7天前的B类: /opt/cloud/instances/ 删除15天前的 要求写在一个脚本里面.不用考虑堡垒机上的操作,只需要写出shell脚本. 参考答案 #!/bin/bash #

shell学习:几道常见shell习题

1. 编写shell脚本,计算1-100的和: 2. 编写shell脚本,要求输入一个数字,然后计算出从1到输入数字的和,要求,如果输入的数字小于1,则重新输入,直到输入正确的数字为止: 3. 编写shell脚本,把/root/目录下的所有目录(只需要一级)拷贝到/tmp/目录下: 4. 编写shell脚本,批量建立用户user_00, user_01, … ,user_100并且所有用户同属于users组: 5. 编写shell脚本,截取文件test.log中包含关键词’abc’的行中的第一列

shell习题-批量同步代码

需求背景是: 一个业务,有3台服务器(A,B,C)做负载均衡,由于规模太小目前并未使用专业的自动化运维工具.有新的需求时,开发同事改完代码会把变更上传到其中一台服务器A上.但是其他2台服务器也需要做相同变更. 写一个shell脚本,把A服务器上的变更代码同步到B和C上. 其中,你需要考虑到不需要同步的目录(假如有tmp.upload.logs.caches) #!/bin/bash echo "该脚本将会把A机器上的/data/wwwroot/www.aaa.com目录同步到B,C机器上&quo

shell习题-判断函数

请使用条件函数if撰写一个shell函数 函数名为 f_judge,实现以下功能 1)当/home/log 目录存在时 将/home目录下所有tmp开头的文件或目录移/home/log 目录. 2)当/home/log目录不存在时,创建该目录,然后退出. #!/bin/bash f_judge (){     if [ -d /home/log ]     then          mv /home/tmp* /home/log/     else         mkdir -p /home

C#大学课程(第五版)课后习题15.11MDI 画图程序

/*15.11(MDI 画图程序)创建一个MDI 程序,它的每个子窗口都有一个用于画图的面板.在这个MDI程序中添加菜单,使用户能够改变画刷的大小和颜色.当运行程序时,应确保当一个窗口遮盖了另一个时,应清除面板的内容.*/using System.Drawing;using System.Windows.Forms;namespace UsingMDI{ public partial class DrawingForm : Form { bool shouldPaint = false; int