11、综合应用案例


尚硅谷2022版Linux扩展篇Shell教程-讲师:武晟然

壁立千仞 无欲则刚

11、综合应用案例

11.1 归档文件

实际生产应用中,往往需要对重要数据进行归档备份。

需求:实现一个每天对指定目录归档备份的脚本,输入一个目录名称(末尾不带/),将目录下所有文件按天归档保存,并将归档日期附加在归档文件名上,放在/root/archive 下。

这里用到了归档命令:tar

后面可以加上-c 选项表示归档,加上-z 选项表示同时进行压缩,得到的文件后缀名为.tar.gz。

脚本实现如下:

[root@centos7-101 scripts]# touch daily_archive.sh
[root@centos7-101 scripts]# vim daily_archive.sh 
#!/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)

# 获取当前日期
DATE=$(date +%y%m%d)

# 定义生成的归档文件名称
FILE=archive_${DIR_NAME}_${DATE}.tar.gz
DEST=/root/archive/$FILE

# 开始归档文件目录

echo "开始归档文件目录..."

# 没有文件夹就创建文件夹
if [ ! -d /root/archive  ]
then
	mkdir /root/archive
fi

tar -czf $DEST $DIR_PATH/$DIR_NAME

if [ $? -eq 0 ]
then 
	echo
	echo "归档成功"
	echo "归档文件为:$DEST"
else
	echo "归档出现问题"
fi
exit


[root@centos7-101 scripts]# chmod u+x daily_archive.sh 
[root@centos7-101 scripts]# ./daily_archive.sh /root/scripts

开始归档文件目录...
tar: 从成员名中删除开头的“/”

归档成功
归档文件为:/root/archive/archive_scripts_221201.tar.gz

注意:

使用tar命令打包时,如果打包目标是绝对路径会出现警告tar: 从成员名中删除开头的“/”

根本原因是tar打包时会把目录结构打进去,解包时也会把对应的目录结构解出来

11.2 发送消息

我们可以利用 Linux 自带的 mesg 和 write 工具,向其它用户发送消息。

# mesg:确认用户有没有打开发送消息功能 n关闭 y开启
[root@centos7-101 ~]# mesg 
is y
# who:查看当前登录的所有用户 -T:查看当前所有登录用户是否打开消息功能
[root@centos7-101 ~]# who -T
qiqi     + pts/0        2022-12-02 22:07 (192.168.0.110)
root     + pts/1        2022-12-02 09:59 (192.168.0.110)
# write 接受用户 接受用户的控制台:向其他用户发送消息
[root@centos7-101 ~]# write qiqi pts/0
hello

需求:实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发送消息是否为空。

脚本实现如下:

[root@centos7-101 scripts]# touch send_msg.sh
[root@centos7-101 scripts]# vim send_msg.sh 
#!/bin/bash

# 查看用户是否登录
# grep -i:忽略大小写 -m 数字:只要第一行数据

# 拿出用户的名字
login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')
# 判断用户名字是否为空 -z:值是否为空
if [ -z $login_user ]
then
	echo "$1 不在线"
	echo "退出脚本"
	exit
fi	

# 截取who中+或-
is_allowed=$(who -T | grep -i -m 1 $1 | awk '{print $2}')
# 查看用户是否开启消息功能
if [ $is_allowed != "+" ]
then
	echo "$1 没有开启消息功能"
	echo "退出脚本"
	exit
fi	


# 发送消息不为空
if [  -z $2 ]
then
	echo "发送消息为空"
	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

# 退出
exit

[root@centos7-101 scripts]# chmod u+x send_msg.sh 
[root@centos7-101 scripts]# ./send_msg.sh qiqi hello
发送成功
[root@centos7-101 scripts]# ./send_msg.sh qiqi say
发送成功

qiqi端

Message from root@centos7-101 on pts/1 at 22:58 ...
hello
EOF

Message from root@centos7-101 on pts/1 at 22:59 ...
say
EOF
[qiqi@centos7-101 ~]$
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值