我想在一个小时内随机打开和关闭一些网页。
到目前为止,我已经写出了内部的内容。
FILE=webpages
TIMES=0
while test $TIMES -lt 10
do
#Picks random line(Website) from FILE
TEMPWEB=`shuf -n 1 $FILE`
echo "Opening" $TEMPWEB
#Opens TEMPWEB
xdg-open $TEMPWEB
sleep 10
#Kills firefox
ps -e | grep firefox | sed 's/\(.[0-9]*\).*/\1/' | xargs kill
TIMES=$(($TIMES+1))
done
所以我错过了while条件。
我想要这样的东西:
TIMER = 0h 0m 0s
while( TIMER < 1 h)
....
done
这可能吗?
PS.有什么命令要乱数?
4条答案
按热度按时间afdcj2ne1#
当然。试试看:
date +%s
显示自1970年以来的当前时间(以秒为单位)。循环计算一小时前的当前日期,并检查它是否超过开始时间。ig9co6j12#
其中一种方法是使用信号和陷阱。下面是一个简单的例子:
第一部分启动一个后台进程,该进程只休眠一段时间(本例中为10秒),然后当它醒来时向发起进程发送SIGUSR 1。
shellscript捕获此错误(使用
trap
),并向其自己的PID发出kill
,从而停止进程。其余部分只是一个无限循环--是
trap
杀死脚本并终止循环。从技术上讲,您不需要上例中的陷阱:后台进程可以直接发出
kill $me
,但为了完整起见,我将其包括在内,因为您可以将其用作一个钩子来执行其他操作(例如,如果您不想终止,但设置了一个标志并让循环自然终止,或者在终止之前需要进行一些清理)。js4nwp543#
这就是我的解决方案:
slmsl1lt4#
我的解决方案基于the one from thiton:
内联也能正常工作: