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

目录
相关文章
|
6月前
|
Shell Android开发
Android系统 adb shell push/pull 禁止特定文件
Android系统 adb shell push/pull 禁止特定文件
557 1
|
6月前
|
人工智能 机器人 Shell
【shell】文件读写及read用法
【shell】文件读写及read用法
|
6月前
|
缓存 Shell Linux
【Shell 命令集合 链接器(linker)工具】Linux ld命令 将目标文件与库链接为可执行文件或库文件
【Shell 命令集合 链接器(linker)工具】Linux ld命令 将目标文件与库链接为可执行文件或库文件
213 0
|
1月前
|
Shell
Shell 文件包含
10月更文挑战第5天
33 4
|
6月前
|
Java 关系型数据库 MySQL
Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
【4月更文挑战第12天】Elasticsearch【问题记录 01】启动服务&停止服务的2类方法【及 java.nio.file.AccessDeniedException: xx/pid 问题解决】(含shell脚本文件)
673 3
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
2月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
555 2
|
2月前
|
网络协议 关系型数据库 MySQL
Shell 脚本案例
Shell 脚本案例
45 8
|
3月前
|
Shell Linux 网络安全
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
在Linux中,如何利用Shell把10台主机的当前时间写到一个文件里边?
|
4月前
|
Shell 测试技术 Linux
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
Shell 脚本循环遍历日志文件中的值进行求和并计算平均值,最大值和最小值
61 3