一:归档文件

1.1 功能描述

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

1.2 相关技术

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

1.3 脚本实现

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
49
50
51
52
#!/bin/bash


# 判断输入参数个数是否为1
if [ $# -ne 1 ]
then
echo "参数个数错误!请输入一个参数,作为归档的目录名称"
exit
fi

# 判断目录是否存在
if [ -d $1 ]
then
echo
else
echo "目录不存在"
exit
fi

DIR_NAME=$(basename $1)
DIR_PATH=$(cd $(dirname $1); pwd)

echo DIR_NAME:$DIR_NAME
echo DIR_PATH:$DIR_PATH

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

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

echo $FILE
echo $DEST


# 开始归档目录文件
echo "开始归档..."
tar -czf $DEST $DIR_PATH/$DIR_NAME

# 校验归档结果
if [ $? -eq 0 ]
then
echo "归档成功!"
echo "归档文件为:$DEST"
else
echo "归档失败!"
fi

exit

二:发送消息

2.1 功能描述

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

2.2 相关技术

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

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
[root@hadoop100 shell]# who am i
root pts/0 2022-12-12 01:14 (172.16.80.1)
[root@hadoop100 shell]# who
root pts/0 2022-12-12 01:14 (172.16.80.1)
ghost :0 2022-12-12 01:37 (:0)
ghost pts/1 2022-12-12 01:38 (:0)
[root@hadoop100 shell]# who -T
root + pts/0 2022-12-12 01:14 (172.16.80.1)
ghost ? :0 2022-12-12 01:37 (:0)
ghost + pts/1 2022-12-12 01:38 (:0)


[root@hadoop100 shell]# mesg n
[root@hadoop100 shell]# who -T
root - pts/0 2022-12-12 01:14 (172.16.80.1)
ghost ? :0 2022-12-12 01:37 (:0)
ghost + pts/1 2022-12-12 01:38 (:0)
[root@hadoop100 shell]# mesg y
[root@hadoop100 shell]# who -T
root + pts/0 2022-12-12 01:14 (172.16.80.1)
ghost ? :0 2022-12-12 01:37 (:0)
ghost + pts/1 2022-12-12 01:38 (:0)


[root@hadoop100 shell]# write ghost pts/1
hello
welcome

2.3 脚本实现

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
49
50
51
#!/bin/bash

login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')

if [ -z $login_user ]
then
echo "$1 不在线"
echo "脚本退出..."
exit
else
echo $login_user
fi


is_allowed=$(who -T | grep -i -m 2 $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


if [ $? != 0 ]
then
echo "发送失败!"
else
echo "发送成功!"
fi

exit


[root@hadoop100 shell]# ./send_msg.sh ghost hello
ghost
发送成功!