• Shell综合应用案例,归档文件、发送消息



    如果想看更详细的Shell总结请到我之前写的博客http://t.csdn.cn/cQArA

    1.归档文件

    实际生产应用中,往往需要对重要数据进行归档备份。
    需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。
    这里用到了归档命令: tar
    后面可以加上-c选项表示归档,加上-z选项表示同时进行压缩,得到的文件后缀名为.tar.gz

    1.1脚本实现

    在这里插入图片描述

    #!/bin/bash
    
    #首先判断输入参数个数是否为1
    if [ $# -ne 1 ]
    then
            echo "参数个数错误!应该输入一个参数,作为归档目录名"
            exit
    fi
    
    # 从参数中获取目录名称
    if [ -d $1 ]
    then
            echo
    else
            echo
            echo "目录不存在!"
            echo
            exit
    fi
    
    DIR_NAME=$(basename $1)
    DIR_PATH=$(cd $(dirname $1); pwd)
    
    # 获取当前日期
    FILE=archive_${DIR_NAME}_$DATE.tar.gz
    DEST=/root/archive/$FILE
    
    # 开始归档目录文件
    
    echo "开始归档..."
    echo
    
    tar -czf $DEST $DIR_PATH/$DIR_NAME
    
    if [ $? -eq 0 ]
    then
            echo
            echo "归档成功!"
            echo "归档文件为:$DEST"
            echo
    else
            echo "归档出现问题!"
            echo
    fi
    
    exit
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47

    1.2测试

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    则创建一个文件
    在这里插入图片描述

    在这里插入图片描述

    归档成功

    1.3定期归档

    使用crontab
    crontab中的代码

    0 2 * * * /root/scripts/daily_archive.sh /root/scripts
    
    
    • 1
    • 2

    在这里插入图片描述

    2.发送消息

    在这里插入图片描述

    这个可以查看用户在线情况, +号代表的是可以发送信息,mesg是打开的
    在这里插入图片描述
    mesg n可以将mesg关闭
    mesg y可以将mesg打开

    2.1write发送信息

    • write 用户名 控制台
      [root@hadoop100 scripts]# write cat pts/1

    在这里插入图片描述

    在这里插入图片描述

    我们可以利用 Linux 自带的 mesg 和 write 工具,向其它用户发送消息。
    需求:实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发送消息是否为空。
    脚本实现如下:

    #!/bin/bash
    
    # 查看用户是否登录
    login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')
    
    if [ -z $login_user ]
    then
            echo "$1 不在线!"
            echo "脚本退出..."
            exit
    fi
    
    # 查看用户是否开启消息功能
    is_allwoed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
    
    
    if [ "$is_allowed"x != "+"x ]
    then
            echo "$1 没有开启消息功能"
            echo "脚本退出..."
            exit
    fi
    
    # 确认是否有消息发送
    if [ -z $2 ]
    then
            echo "$1 没有消息发送"
            echo "脚本退出..."
            exit
    fi
    
    # 从参数中获取要发送的消息
    whole_msg=$(echo $* | cut -d " " -f 2-)
    
    # 获取用户登录的终端
    user_terminal=$(who | grep -i -m 1 $1 | awk '{print $2}')
    
    # 写入要发送的消息
    echo $whole_msg | write $login_user $user_terminal
    
    if [ $? != 0 ]
    then
            echo "发送失败!"
    else
            echo "发送成功!"
    fi
    exit
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    在这里插入图片描述

    在这里插入图片描述

    完结!!!

    如果想看更详细的Shell总结请到我之前写的博客http://t.csdn.cn/cQArA

  • 相关阅读:
    视野修炼-技术周刊第54期
    openmp 超越通用核心
    Ensp用windows回环口连接cloud配置
    【Kotlin】private、 protected、 internal 和 public指定修饰符的区别
    【算法|虚拟头节点|链表】移除链表元素
    使用iptables实现 ip & 端口转发
    基于Vue+ElementUI+MySQL+Express的学生管理系统(3)
    2022操作系统实验李丁丁
    Viola-Jones检测器(VJ)---学习笔记
    行所当行@背包扔过墙
  • 原文地址:https://blog.csdn.net/Redamancy06/article/details/125998823