实验5:用户登录动态监测--程序运行时首先列出当前系统中的已登录用户的名单,再检查指定用户是否已登录。如果已登录,则显示相应信息;如果未登录,则等待该用户登录,直到指定用户登录进--操作系统原理和实践

实验目的

使学生熟悉一种简单的指定用户的监测方法,熟悉UNIX的基本SHELL程序设计方法和使用技巧,包括:

命令行参数检测

用户变量

while循环控制

暂停进程(sleep)

实验内容

编写一个用户监测程序usr_monitor, 其运行格式为:

usr_monitor  username

其中username是用户指定的任意一个用户名。程序运行时首先列出当前系统中的已登录用户的名单,再检查指定用户是否已登录。如果已登录,则显示相应信息;如果未登录,则等待该用户登录,直到指定用户登录进入系统为止。

实验内容:shell程序设计思路

(1)根据变量$#的值检查命令行上是否有一个用户名,如果有则继续运行;如果没有或多于一个用户名则输出提示信息:Usage: usr_monitor  username

(2)运行who命令,并将运行结果中的用户名字段截取下来,保存到一个用户变量中。

(3)echo命令显示该变量的值,即当前系统中的用户名单。

(4)判断用户名单中是否包含命令行上指定的用户,如果有则输出提示信息:user [username] is logon,并退出程序。

(5)如果用户名单中没有包含命令行上指定的用户,则输出提示信息:waiting user [username] …,光标停留在省略号后面。

(6)使用while循环,用sleep命令每隔5秒钟检查指定用户是否已登录系统。检测方法与步骤2相同。

(7)如果指定用户未登录,则一直等待下去;如果指定用户已登录,则在省略号后面接着输出提示信息:       [username] is log on,退出循环,并结束程序。

实验内容:shell程序编写要求

上述命令仅作参考,可以自行确定需要采用的命令,只要程序能达到“实验要求”中指定的功能即可

需要调整程序格式,在程序头加上若干行程序功能注释,在程序的重要功能语句处加上简单注释。

参考代码:user_monitor.sh

if [ $# -ne 1 ] # 利用$#判断命令行有几个参数
then
        echo "Usage: usr_monitor username" # 参数不对就报错
        exit
fi
user_input=$1 # 将第一个参数赋给user_input
echo -e "You will monitor [$user_input]\n"
user=$(who)
username=`who |awk '{print $1}'` # 只截取登陆了的用户名
echo -e "Current user list is:\n$username\n"

compare=$(echo $username | grep "${user_input}") #获取username中与user_input相同的部分

while [ "$compare" == "" ]
do
        echo "waiting user [$user_input] ..."
        sleep 5
        username=`who |awk '{print $1}'`
        result=$(echo $username | grep "${user_input}")
done
echo "[$user_input] is log on"

程序要求达到的运行效果

1、命令行上未指定用户名时,程序给出错误提示,并退出

2、usr_monitor程序运行时,指定ubuntu用户名,程序显示当前已登录系统的用名单,等待指定的ubuntu用户的登录,当ubuntu登录系统时,程序给出提示信息,并退出。

 

 

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值