我们可以利用Linux 自带的mesg 和write 工具,向其它用户发送消息。
需求:实现一个向某个用户快速发送消息的脚本,输入用户名作为第一个参数,后面直
接跟要发送的消息。脚本需要检测用户是否登录在系统中、是否打开消息功能,以及当前发
送消息是否为空。
用其他用户yhx登录
who am i
root pts/0 2025-02-27 08:57 (192.168.10.1)
# 查看是否打开了消息
mesg
is y
# 查看当前登录用户
who
root pts/0 2025-02-27 08:57 (192.168.10.1)
yhx pts/1 2025-02-27 16:17 (192.168.10.1)
yhx pts/2 2025-02-27 16:20 (192.168.10.1)
who -T
# +表示打开了mesg
root + pts/0 2025-02-27 08:57 (192.168.10.1)
yhx + pts/1 2025-02-27 16:17 (192.168.10.1)
yhx + pts/2 2025-02-27 16:20 (192.168.10.1)
# 向write yhx pts/1用户发送消息
write yhx pts/1


脚本实现
- 查看用户是否登录
- 是否开启消息功能
- 确认是否有消息发送
- 从参数中获取要发送的消息
- 获取用户登录的终端
- 写入要发送的消息
vim messege.sh
#/bin/bash
#判断用户是否登录
# grep -i :忽略大小写, -m 1 最大值是1 ,只能获取第一个用户
login_user=$(who|grep -i -m 1 $1 |awk '{print $1}')
if [ -z $login_user ]
#-z:判断是否为空
then
echo "$1 不在线"
echo "脚本退出"
exit
fi
#判断是否开启了消息功能
isallowed=$(who -T |grep -i -m 1 $1 |awk '{print $2}')
#第二个参数为+,则开启了消息
if [ $isallowed != "+" ]
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
chmod u+x messege.sh
./messege.sh yhx "hhhhhhhhhhhhhhhhh"
发送成功


1036

被折叠的 条评论
为什么被折叠?



