免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2757 | 回复: 11
打印 上一主题 下一主题

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-12 18:07 |只看该作者 |倒序浏览
题目要求:
     用date和who命令编写一个名为conntime的程序,显示一个用户已经登陆到系统的小时数和分钟数(假定不超过24小时).
    (由于这道题目所在及以前章节都未涉及到awk的知识,所以最好不要使用awk.)
   
    下面的是我写的,有没有更简便的方法?   
  1. #!/bin/bash

  2. if [ -z "$(who | sed -n "/^$1 /p")" ]
  3. then
  4.    echo the name not found
  5.    exit 1
  6. fi

  7. D=$(date | cut -c10-11)
  8. M=$(date | cut -c13-14)
  9. W=$(who | sed -n "/$1/p" | cut -c30-31)
  10. w=$(who | sed -n "/$1/p" | cut -c33-34)

  11. if [ "$D" -eq "$W" -a "$M" -eq "$w" ]
  12. then
  13.    echo 24:00
  14. elif [ "$D" -eq "$W" -a "$M" -gt "$w" ]
  15. then
  16.    echo 'invalid time'
  17. elif [ "$D" -eq "$W" -a "$M" -lt "$w" ]
  18. then
  19.    ( expr $D + 24 - $W - 1  && expr $M + 60 - $w  ) | paste -s -d:
  20. elif [ "$D" -lt "$W" -a "$M" -eq "$w" ]
  21. then
  22.    ( expr $D + 24 - $W  && echo 00 ) | paste -s -d:
  23. elif [ "$D" -lt "$W" -a "$M" -gt "$w" ]
  24. then
  25.    ( expr $D + 24 - $W  && expr $M - $w  ) | paste -s -d:
  26. elif [ "$D" -lt "$W" -a  "$M" -lt "$w" ]
  27. then
  28.    ( expr $D + 24 - $W - 1  && expr $M + 60 - $w  ) | paste -s -d:
  29. elif [ "$D" -gt "$W" -a "$M" -eq "$w" ]
  30. then
  31.    ( expr $D - $W  && echo 00 ) | paste -s -d:
  32. elif [ "$D" -gt "$W" -a "$M" -gt "$w" ]
  33. then
  34.    ( expr $D - $W  && expr $M - $w  ) | paste -s -d:
  35. elif [ "$D" -gt "$W" -a  "$M" -lt "$w" ]
  36. then
  37.    ( expr $D - $W - 1  && expr  $M + 60 - $w  ) | paste -s -d:
  38. fi

复制代码

论坛徽章:
0
2 [报告]
发表于 2004-07-12 18:12 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

登陆的时候把时间记录到一个文件里,然后和当前比较如何??
时间的保存格式都用那个绝对秒值from。。。多少年来着?? ,2者相减然后进行个数学运算如何?

论坛徽章:
0
3 [报告]
发表于 2004-07-12 18:15 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

查看用户登录的时间直接用w命令不就可以嘛

论坛徽章:
0
4 [报告]
发表于 2004-07-12 18:23 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

[quote]原帖由 "bjgirl"]查看用户登录的时间直接用w命令不就可以嘛 [/quote 发表:


不是说了,必须使用date和who吗,这个是练习题,结果不是目的..

(p.s. w命令怎么用啊 )

论坛徽章:
0
5 [报告]
发表于 2004-07-12 18:27 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

[quote]原帖由 "bjgirl"]查看用户登录的时间直接用w命令不就可以嘛 [/quote 发表:


不知道那个login时间在跨天的时候会怎么显示呢。。。例如我晚上11点50分登陆,等0点10分去看的时候是怎么显示  今天晚上我自己试一下。。。

论坛徽章:
0
6 [报告]
发表于 2004-07-12 18:28 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

last

论坛徽章:
0
7 [报告]
发表于 2004-07-12 18:29 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

原帖由 "skylove" 发表:
登陆的时候把时间记录到一个文件里,然后和当前比较如何??
时间的保存格式都用那个绝对秒值from。。。多少年来着?? ,2者相减然后进行个数学运算如何?

能不能写出来看看..

论坛徽章:
0
8 [报告]
发表于 2004-07-12 18:45 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

date +%s 就是返回1970.1.1到现在的秒数

至于你在登陆时候记录时间,可以在bash和csh的登陆文件里动个小手脚就行了,在用户的home下生成一个.login_time这样的一个文件

然后就是2个值相减,分别用天的秒数除它,然后取模和余;余用3600去除得到n小时,剩下的余用60去除得到分钟和秒

论坛徽章:
0
9 [报告]
发表于 2004-07-13 01:06 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

先在登陆的shell里做手脚,得到登陆的时间,存放到用户目录下的.login_time文件里;
我是用的bash,所以就是修改.bash_profile 添加上
  1. date +%s > ~/.login_time
复制代码


这行就行了,接着就是写shell,conntime.sh


  1. #!/bin/sh
  2. now_time=`date +%s` #取当前时间
  3. login_time=`cat ~/.login_time` #在登陆shell中做手脚后得到的文件
  4. #echo $now_time  #测试用的
  5. #echo $login_time #同上
  6. delay_time=$(($now_time-$login_time)) #停留的时间,得出的值为秒
  7. #echo $delay_time #测试
  8. delay_day=$(($delay_time/86400))  #停留的天数
  9. delay_hour=$((($delay_time%86400)/3600)) #停留的小时数
  10. delay_min=$((($delay_time%3600)/60)) #停留的分钟
  11. delay_sec=$(($delay_time%60)) #停留的秒
  12. my_user=`who | cut -f 1 -d \ ` #这里有个空格的 #取得用户名字
  13. echo "Dear $my_user , you have delayed $delay_day day $delay_hour hours $delay_min m $delay_sec s" #显示出来
复制代码


以上代码在freebsd下调试通过
这样大概就满足你要求了?? 对了,楼主你是不是在写教程??如果可以的话,在最后附一个cu shell版面的logo和url如何??~~~

论坛徽章:
0
10 [报告]
发表于 2004-07-13 01:59 |只看该作者

编写一个显示指定用户已经登陆到系统的小时数及分钟数的脚本.

原帖由 "skylove" 发表:

对了,楼主你是不是在写教程??如果可以的话,在最后附一个cu shell版面的logo和url如何??~~~

言重了,我正在别人写的教程的指导下学习shell呢..
谢谢你的代码````
好好学习,天天向上````
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP