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

简介: 需求实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。需求实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发送消息是否为空。后面可以加上-c选项表示归档,加上-z选项表示同时进行压缩,得到的文件后缀名为.tar.gz。这个可以查看用户在线情况,+号代表的是可以发送信息,mesg是打开的。....

@[toc]
如果想看更详细的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测试

在这里插入图片描述

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

在这里插入图片描述

归档成功

1.3定期归档

使用crontab
crontab中的代码

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

完结!!!

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

目录
相关文章
|
7天前
|
数据可视化 Shell Linux
shell+crontab+gitlab实现ecs服务器文件的web展示
本文通过把ecs服务器上的文件定时上传至gitlab,实现文件的页面可视化和修改历史。技术点:shell、crontab、gitlab。
36 3
|
30天前
|
机器人 关系型数据库 MySQL
shell脚本实现文件自动清理并推送钉钉机器人告警
shell脚本实现文件自动清理并推送钉钉机器人告警
25 0
|
1月前
|
Shell Linux
linux删除常规文件及隐藏文件shell
linux删除常规文件及隐藏文件shell
16 6
|
1月前
|
安全 Linux Shell
【Linux】文件服务OpenSSH(Secure Shell)
【Linux】文件服务OpenSSH(Secure Shell)
20 0
【Linux】文件服务OpenSSH(Secure Shell)
|
1月前
|
Shell Linux C++
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
Linux C/C++ 开发(学习笔记二):Shell脚本编程案例
20 0
|
5天前
|
Java Shell Perl
使用shell脚本给日志文件瘦身
使用shell脚本给日志文件瘦身
|
28天前
|
供应链 Shell Linux
通过extundelete使用shell实现CentOS6 ext4文件系统误删除文件的恢复
通过extundelete使用shell实现CentOS6 ext4文件系统误删除文件的恢复
41 0
|
29天前
|
Shell
删除常规文件及隐藏文件shell脚本
删除常规文件及隐藏文件shell脚本
12 1
|
30天前
|
运维 Linux 网络安全
利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传
利用群晖NAS+shell脚本实现运维命令执行结果文件自动上传
49 0
|
30天前
|
Shell Linux
linux shell脚本实现/etc/passwd文件是否被更改
linux shell脚本实现/etc/passwd文件是否被更改
13 3

相关产品

  • 云迁移中心