if [ -d $1 ] && [ $#2 -gt 0 ]; then
find $1 ps aux | awk '{ print $1 }' | sed '1 d' | sort | uniq | while read line true; do #do forever
who $line | sort $2 #show loggerd-in users, sorted alphabetically
sleep 10 #wait 10 seconds
done #carry on
else
echo "The parameter is invalid"
exit 1
fi
问题 - 编写一个shell脚本,该脚本每10秒为一个已排序的列表(在文件中)提供主动登录的用户,并提供他们拥有的进程数。每分钟,相同的脚本将按字母顺序在屏幕上打印前10个用户及其组的列表,a)在过去20秒内拥有最多进程,b)从脚本开始就拥有最活跃的进程。应在命令行中提供秒数(见10)和用户数量(见20)作为参数
这就是我现在所拥有的,我不知道一切是否会奏效,但我正在努力让一切都与循环一起工作。
答案 0 :(得分:3)
您可以通过研究who
,sleep
,while
和sort
开始。然后,一旦你尝试了某些东西,,你可能会回来问题,但它可能是错误的。这并不意味着批评,只是帮助将来发布更多可接受的问题。
对于它的价值,你的代码可能会对此有所改变:
#!/usr/bin/env bash
while true ; do # do forever
who | sort # show logged-in users, sorted
sleep 10 # wait a bit
done # carry on
你显然需要根据更具体的要求调整它,但是,因为你只是要求开始,就是这样。
您的一些更复杂的要求可能需要who
以外的工具,并且可能还需要awk
进行文本处理。你必须研究这一点,因为它毕竟是你的任务。