【Linux】脚本综合案例:备份脚本、发送消息脚本(if、date、tar、who、grep、awk、cut、write)

一、备份脚本

1.1 题目要求

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

1.2 脚本内容

#!/bin/bash
echo "=================================题目要求=================================="
echo "实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。"
echo "归档命令:tar。后面加上-c选项表示归档,加上-z选项表示同时进行压缩,得到文件后缀名为.tar.gz"
echo "==========================================================================="
#判断参数个数是否为1
if [ $# -ne 1 ]
then
    echo "参数输入错误,个数不为1!"
    exit
fi
#判断输入参数是否存在
if [ -e $1 ]
then
    #判断输入参数是否是目录
    if [ -d $1 ]
    then
	echo
    else
	echo "请输入目录!"
	exit
    fi
else
    echo "输入目录不存在!"
    exit
fi
#判断目标文件夹是否存在
if [ -e "/root/archive" ]
then
    echo
else
    mkdir /root/archive
fi
#获得目录名
SOURCE=$1
cd $SOURCE
#生成归档地址:包括目标目录及文件名
TARGET_DIR=/root/archive/
TARGET_FILE=$(date "+%Y年%m月%d日%H:%M:%S").tar.gz
TARGET=$TARGET_DIR$TARGET_FILE
tar -zcvf $TARGET ./
echo "归档成功!"

1.3 脚本使用

[root@demo01 ~]# sh /root/桌面/demo6 /root/桌面
=================================题目要求==================================
实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive下。
归档命令:tar。后面加上-c选项表示归档,加上-z选项表示同时进行压缩,得到文件后缀名为.tar.gz
===========================================================================


./
./demo1
./demo5
./1.txt.tar.gz
./1.txt
./demo6
./demo7
./demo2
./demo3
./demo4
./cut.txt
./passwd
归档成功!
[root@demo01 ~]# 

二、发送消息脚本

2.1 题目要求

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

2.2 脚本内容

  • 消息内容不支持中文
#!/bin/bash
echo "================================题目要求==================================="
echo "实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登陆在系统中,是否打开消息功能(who)。以及当前发送消息是否为空。"
echo "利用Linux自带的mesg和write工具"
echo "==========================================================================="
#第一个参数:用户名
#第二个参数:消息
#判断参数个数是否小于2
if [ $# -lt 2 ]
then
    echo "脚本错误:参数个数小于2!"
    exit
fi
#判断户名是否存在
USER=$(who | grep -i -m 1 $1 | awk '{print $1}')
if [ -z $USER ]
then
    echo "用户不在线!"
    exit
fi
#判断该用户是否接受消息
ALLOWTTY=$(who -T | grep -i $1 | awk '{if($2=="+"){print $3}}')
if [ -z "$ALLOWTTY" ]
then
    echo "用户不正忙,不接受消息"
    exit
fi
#目标TTY
TTY=$(echo $ALLOWTTY | cut -d " " -f 1)
#消息:第二个参数开始的内容
MESSAGE=$(echo $* | cut -d " " -f 2-)
#开始发送消息
echo $MESSAGE | write $USER $TTY
if [ $? -ne 0 ]
then
    echo "发送失败!"
    exit
else
    echo "发送成功!"
fi

2.3 脚本使用

发送方

[root@demo01 ~]# who
root     :0           2022-08-13 15:02 (:0)
root     pts/0        2022-08-13 20:47 (:0)
root     pts/1        2022-08-13 21:07 (:0)
lzw      pts/2        2022-08-13 21:10 (192.168.100.1)
[root@demo01 ~]# sh /root/桌面/demo7 LZW hello lzw!
================================题目要求===================================
实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登陆在系统中,是否打开消息功能(who)。以及当前发送消息是否为空。
利用Linux自带的mesg和write工具
===========================================================================
发送成功!
[root@demo01 ~]# 

接收方

[lzw@demo01 ~]$ 
Message from root@demo01 on pts/1 at 21:11 ...
hello lzw!
EOF
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

愿你满腹经纶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值