我非常擅长bash脚本编程(我在python中编程)但有时我需要在我的ubuntu上运行一些简单的脚本(在工作中)所以我开始学习bash脚本。
无论如何,我想创建一个脚本,该脚本需要2个参数(开始和结束时间),并且会给出在那段时间之间登录的用户的结果。它还会说明他们登录了多少次以及他们登录的总时间。
示例:
$./run 25/4 20/5 <br />
joe 4x 3 days and 11:45 <br />
bob 2x 0 days and 2:17 <br />
smith 17x 21 days and 23:17 <br />
所以第一列说明了用户是什么,第二列说他登录系统的次数,第3列显示他记录的总时间。数据限制在从25/4到20/5(参数)的时间
我有一些线索,但他们都是&#34;丑陋&#34;。再一次,我是一个python程序员,所以我以前常常有#34;漂亮&#34;解决方案。
我正在考虑使用last
然后解析文本...
任何代码提示都会有所帮助
最好的k。
答案 0 :(得分:1)
下面的bash脚本将完成你想要的大部分内容,我认为它有足够的内容对你有所帮助。但是,我真的不认为这种事情应该在bash中完成。就个人而言,我更喜欢last
的原生输出到你描述的输出。
下面脚本的一个主要问题是它不是很便携。它适用于我的Ubuntu 11.04工作站,但不适用于我的RHEL 4工作站(较旧的awk版本与我指定分隔符的方式不兼容)。
#!/bin/bash
for user in $(last | head -n-2 | cut -d' ' -f1 | sort | uniq); do
echo -n $user $(last | head -n-2 | cut -d' ' -f1 | grep "^$user$" | wc -l)x
hours=$(last | head -n-2 | grep "^$user\b" | awk '{ print $NF }' | grep -v '^in$' | awk -F'[\(\):]' '{ print $2 }' | paste -sd+ | bc)
minutes=$(last | head -n-2 | grep "^$user\b" | awk '{ print $NF }' | grep -v '^in$' | awk -F'[\(\):]' '{ print $3 }' | paste -sd+ | bc)
days=$(( ($hours + $minutes / 60) / 24 ))
hours=$(( ($hours + $minutes / 60) % 24 ))
minutes=$(( $minutes % 60 ))
echo -n " $days days and $hours:$minutes"
if last | head -n-2 | grep "^$user\b" | grep -qs "still logged in"; then
echo -n ', still logged in'
fi
echo
done