实践小点子:
1. 做一个shell 内嵌指令例如:ls,cd,pwd这样
    就实现查看上线多久;
 
解决办法有两种:
1) 利用脚本,如新指令为look;利用别名的方法,将look.sh脚本用别名look;而脚本look.sh中则是调用系统uptime , history 等命令 再加上一些数据处理得到 想要显示的结果;当然也要将脚本放入path当中去                   
 
仅限今天登陆时间开始计算,也就是说昨天一直登陆的不算噢      
方法一:利用脚本,别名的方式
1)编写脚本mysh.sh
 
     zhenxiang@ubuntu:~$ vim mysh.sh
#!/bin/bash
echo "this is mysh"
 
2) 在.bashrc中设置别名
 
 zhenxiang@ubuntu:~$ vim  .bashrc
alias my='sh ~/mysh.sh '
 
3)重新加载.bashrc配置文件
   zhenxiang@ubuntu:~$ source .bashrc
 
4)执行脚本
   zhenxiang@ubuntu:~$ my
this is mysh
 
扩展:
   如果要让所有用户都能使用那么配置 /etc/bash.bashrc(ubuntu下)
   root@ubuntu:~# vim /etc/bash.bashrc
alias my='sh /home/zhenxiang/mysh.sh'

重新加载配置文件,执行脚本

   root@ubuntu:~# source /etc/bash.bashrc
root@ubuntu:~# my
this is mysh
如题现在要写一个统计上线时间脚本:
w命令
显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最 近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远 程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。 
实例:
zhenxiang@ubuntu:~$ w
:: up :, users, load average: 0.60, 0.18, 0.10
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
zhenxian tty7 : :04m .31s .43s gnome-
zhenxian pts/ :0.0 : .00s .34s .01s w
#注意到了吗命令w 首列仅显示8个字符;zhenxiang 只能显示到zhenxian;
有了登陆时间,有了当前时间,那么登陆总时间可以算出来了,就用awk,sed来处理w数据;
当前时间确定:

w | awk 'NR==1 {print $1}'
自己身份确定:  
当然用到 whoami 这个命令了
zhenxiang@ubuntu:~$ whoami
zhenxiang
 
确定终端登陆时间:
 重点注意:shell变量与awk变量之间的转换;
 方法一:

 #!/bin/bash
who=$(whoami)
w | awk -v w="$who" '$1==w {print $1 "\t " $2}'

方法二:

mytest=mmmmm
awk 'BEGIN{print"'$mytest'"}'
因为print除了打印本身数据之外其余均要加双引号,所以在双引号当中加单引号再取变量值就可以得到了;
 
分离登陆时间并换成分钟数做加减法:
 
脚本总结:
1.shell脚本中变量赋值没有等号两边没有空格,不然会报错噢;
2.在脚本中可以使用shell 命令行的任何命令,因为shell 命令行本身就是一个脚本;
3. 命令行所得结果要赋值给变量,需要以下形式:变量=$(命令行操作)如: nowtime=$(w | awk 'NR==1 {print $1}')
4.echo 使用使用双引号将忽视特殊字符,是使用单引号则有特殊字符功能
5.awk设置间隔符是动作,所以在{FS=":"},而此时间隔符一般从第二个开始起效因此,一般要搭配 条件BEGIN来使用如:
   awk ‘BEGIN {FS=":"} {print $1}’  
6.脚本中进行数字加加减减 a=$(($va1-$var2))
 
2) 自己编写C语言程序,用gcc编译成,可以执行文件,再把可执行文件放入path
   linux内置命令如ls cd 是如何加载到linux内核到当中的,自己编写的test.c 用gcc编译过后
   只能用./test 或者用别名;ls 这些内置命令 也是用的 别名吗?
   感兴趣的朋友自己试试看,直接用C语言编写代码,来实现上述功能;在此我仅抛砖引玉!
 
必须贴出源码,欢迎交流!!!
   echo "this is mysh"
#w | awk 'NR==1 {print $1}'
##############################
#确定nowtime
#############################
nowtime=$(w | awk 'NR==1 {print $1}')
echo 'nowtime:\t'$nowtime ##############################
#确定使用者
#############################
who=$(whoami)
echo 'l am : \t'$who #############################
#确定所有终端登录时间
############################
#将shell变量传给awk,变成awk的变量
#w | awk -v w="$(whoami)" 'w==$1 {print $1 "\t" $2 "\t" $3 "\t" $4}'
#AllLoginTime=$(w | awk -v w=$who 'w==$1 {print $2 "-"$3 }')
AllLoginTime=$(w | awk -v w=$who 'w==$1 {print $3 }')
echo 'AllLoginTime:\t'$AllLoginTime ############################
#处理字符串变成分钟数做加减
############################
nowtime_h=$(echo $nowtime | awk 'BEGIN {FS=":"} {print $1}')
nowtime_m=$(echo $nowtime | awk 'BEGIN{FS=":"}{ print $2}')
nowtime_hMintes=$((nowtime_h*))
NowM=$(($nowtime_hMintes+$nowtime_m))
#echo 'nowtime mintues:\t' $NowM
#echo 'nowtime_h:\t' $nowtime_h
#echo 'nowtime_m:\t' $nowtime_m
#echo 'nowtime_m-:\t' $nowtime_m
AllLoginTime_h=$(echo $AllLoginTime | awk 'BEGIN {FS=":"}{print $1}')
AllLoginTime_m=$(echo $AllLoginTime | awk 'BEGIN {FS=":"}{print $2}')
loginTime_hMintes=$(($AllLoginTime_h*))
#echo $loginTime_hMintes
LogM=$(($loginTime_hMintes+$AllLoginTime_m))
#echo 'login time mintues:\t'$LogM
#echo 'AllLoginTime_h:\t' $AllLoginTime_h
#echo 'AllLoginTime_m:\t' $AllLoginTime_m
echo ''now you have logined $(($NowM-$LogM)) mintues''

shell实践--shell内嵌指令实现查看上线时间的更多相关文章

  1. 转: angularjs 指令中动态编译的方法(适用于有异步请求的情况) 内嵌指令无效

    angular的坑很多 例子: 在directive的link中有一个$http请求,当请求完成后根据返回的值动态做element.append('......');这个操作, 能显示没问题,可问题是 ...

  2. [Unity3D]Unity3D游戏开发Android内嵌视图Unity查看

    ---------------------------------------------------------------------------------------------------- ...

  3. 【转】shell中的内建命令, 函数和外部命令

    原文:http://www.cnblogs.com/xkfz007/archive/2011/10/13/2209571.html linux命令有内部命令和外部命令之分.内部命令实际上是shell程 ...

  4. LinuxShell——内嵌命令

    LinuxShell——内嵌命令 摘要:本文主要学习了Shell的常用内嵌命令. alias命令 alias命令可以为指定命令定义一个别名. 基本语法 查看所有别名: alias 设置别名: alia ...

  5. pdf中内嵌字体问题

    在提交论文pdf到IEEE时总要检查字体是否为内嵌的,查看pdf中所有字体及是否内嵌可查看:http://sinme.blog.sohu.com/120043575.html. 具体做法是: 在pdf ...

  6. [Shell] Backtick vs $() 两种方式内嵌值

    使用反撇号(重音符)`command` 和 $(command) 都表示内嵌shell命令. for file in $(ls); do echo $file done for file in `ls ...

  7. shell实践

    shell实践 父子shell 父shell:我们在登录某个虚拟机控制器终端的时候(连接某一个linux虚拟机)时,默认启动的交互式shell,然后等待命令输入. ps命令参数,是否有横杠的参数作用是 ...

  8. shell中的内建命令, 函数和外部命令

    转自shell中的内建命令, 函数和外部命令 Shell识别三种基本命令:内建命令.Shell函数以及外部命令: (1)内建命令就是由Shell本身所执行的命令.    有些命令是由于其必要性才内建的 ...

  9. Shell脚本之四 内建命令

    所谓 Shell 内建命令,就是由 Bash 自身提供的命令,而不是文件系统中的某个可执行文件. 可以使用 type 来确定一个命令是否是内建命令: [root@localhost ~]# type ...

随机推荐

  1. 启动子Activity

    启动普通子Activity: 一个activity启动另一个activity最简单的方式是使用 startActivity(Intent) 方法: public void startActivity( ...

  2. Oracle 学习笔记(Windows 环境下安装 + PL/SQL)

    Oracle 安装.PL/SQL 配置使用  前言:因更换机械硬盘为 SSD 固态硬盘装了新 Windows 7 系统,需要重新搭建开发环境,把 Oracle 安装过程和 PL/SQL 配置使用做下笔 ...

  3. 使用 SpiritManager 类管理在 XNA 游戏中的精灵(十四)

    平方已经开发了一些 Windows Phone 上的一些游戏,算不上什么技术大牛.在这里分享一下经验,仅为了和各位朋友交流经验.平方会逐步将自己编写的类上传到托管项目中,没有什么好名字,就叫 WPXN ...

  4. Linux中date命令的各种实用方法

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://521cto.blog.51cto.com/950229/935642 在linu ...

  5. Unity 碰撞检测

    武器与怪物的碰撞 目前来说有三种思路,其实前两种算变种了: 1.动画关键帧回调 + 范围检测.http://blog.csdn.net/u013700908/article/details/52888 ...

  6. 201621123034 《Java程序设计》第1周学习总结

    1. 本周学习总结 知道了java的用途有安卓手机应用,企业服务器后端,java web.学到了新概念:类.HelloWorld.java 中 HelloWorld 是主文件名,区分 .java和 . ...

  7. 整合SpringMVC与Mybatis

    第一步.导包 第二步.配置springmvc springmvc.xml <?xml version="1.0" encoding="UTF-8"?> ...

  8. HDU6438 Buy and Resell 解题报告(一个有趣的贪心问题的严格证明)

    写在前面 此题是一个很容易想到的贪心题目,但是正确性的证明是非常复杂的.然而,目前网上所有题解并未给出本题贪心算法的任何正确性证明,全部仅停留在描述出一个贪心算法.本着对算法与计算机科学的热爱(逃), ...

  9. 微信小程序统一服务消息下发接口 公众号和小程序消息都可以在一个接口推送了

    昨天晚上,2018年9月11日,微信官方又更新了一大波的小程序功能.重点我们来谈谈这个功能,微信叫做统一服务消息下发接口. 这个是官方的文档  统一服务消息 · 小程序https://develope ...

  10. py2exe error: [Errno 2] No such file or directory: 'MSVCP90.dll'

    使用 python setup.py py2exe 打包时出现 py2exe error: [Errno 2] No such file or directory: 'MSVCP90.dll' 解决方 ...