shell案例综合运用--2

4 篇文章 0 订阅

发送消息

利用Linux自带的mesg和write工具来实现

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

  • 自己创建一个新的用户,配合实现
//创建一个用户陪你的root用户一起玩耍
[root@VM-16-14-centos scripts]# useradd ceshi1
//我们可以切换到home目录查看到这个用户
[root@VM-16-14-centos scripts]# ll /home/
total 28
drwx------ 3 ceshi1     ceshi1     4096 May 30 15:15 ceshi1
drwx------ 5 lighthouse lighthouse 4096 Nov 19  2021 lighthouse
drwx------ 2 redis      redis      4096 Nov 19  2021 redis
-rw-r--r-- 1 root       root          1 May 24 00:08 runoob.txt
drwxr-xr-- 2 root       root       4096 May 23 18:53 test
drwxr-xr-x 2 root       root       4096 May 23 17:42 test1
drwx------ 2 www        www        4096 Nov 19  2021 www
//修改密码  自己改吧 就不演示了 还等着未来女朋友接管我银行卡密码呢
[root@VM-16-14-centos scripts]# passwd ceshi1
  • 我们再来看一下有没有开启消息发送功能,y代表开启
[ceshi1@VM-16-14-centos scripts]$ mesg
is y
//那如果你不想跟别人一起摸鱼的话,励志当卷王的话也可以把它关掉,用下面命令
[ceshi1@VM-16-14-centos scripts]$ mesg n
//再次查看一下 果然关掉了 你就卷吧哈
[ceshi1@VM-16-14-centos scripts]$ mesg
is n
  • 现在我们就可以沟通了,使用write工具
//看看可以找谁聊一哈哈
[ceshi1@VM-16-14-centos scripts]$ who -T
root     + pts/0        2022-05-30 15:10 (127.0.0.1)
ceshi1   + pts/1        2022-05-30 15:16 (101.43.54.211)
ceshi1   - pts/2        2022-05-30 15:16 (101.43.54.211)
//跟root用户say 你好
[ceshi1@VM-16-14-centos scripts]$ write root pts/0
nihao

//另一边的root收到了消息
Message from ceshi1@VM-16-14-centos on pts/2 at 15:40 ...
nihao

//把ceshi1用户沟通的那一方关掉 root收到了关掉的信息
[root@VM-16-14-centos scripts]# EOF
  • 写一个脚本来实现一下
#!/bin/bash

# 查看用户是否登录
login_user=$(who | grep -i -m 1 $1 | awk '{print $1}')

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

# 查看用户是否开启消息发送功能
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

if [ $? != 0 ]
then 
    echo "发送失败"
else
    echo "发送成功"
fi
exit
  • 测试一下 效果如下
//root方
[root@VM-16-14-centos scripts]# bash send_msg.sh ceshi1 boss is coming,gogogo
发送成功

//接受方
[ceshi1@VM-16-14-centos ~]$ 
Message from root@VM-16-14-centos on pts/0 at 16:14 ...
boss is coming,gogogo
EOF

好了,完成了,撒花撒花
上面代码不是我写的
又菜又狗–小菜狗

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值