我想以随机间隔打开和关闭一些网页一小时.
到目前为止,我已经写了内脏
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
Run Code Online (Sandbox Code Playgroud)
所以我错过了这个条件.
我想要的东西:
TIMER = 0h 0m 0s
while( TIMER < 1 h)
....
done
Run Code Online (Sandbox Code Playgroud)
这可能吗?
PS.什么是随机数的命令?
thi*_*ton 15
一定.尝试:
#!/bin/bash
START=`date +%s`
while [ $(( $(date +%s) - 3600 )) -lt $START ]; do
....
done
Run Code Online (Sandbox Code Playgroud)
date +%s 显示自1970年以来的当前时间(秒).循环计算一小时前的当前日期并检查它是否超过开始时间.
一种方法是使用信号和陷阱.这是一个简单的例子:
#!/bin/bash
me=$$
# Start a background process to signal us when the time has passed
(
sleep 10
kill -USR1 $me
) &
# When we recieve SIGUSR1, commit suicide
trap "kill $me" SIGUSR1
# Do stuff until we commit suicide
while [ 1 -eq 1 ]
do
echo 'Hello!'
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
评论是自我解释(我希望).第一部分启动一个只睡眠一段时间的后台进程(在本例中为10秒),然后当它唤醒时将SIGUSR1发送到原始进程.
shellscript捕获了这个(with trap)并且只发出一个kill自己的PID,停止进程.
其余部分只是一个无限循环 - 它trap会杀死脚本并终止循环.
从技术上讲,你不需要上面例子中的陷阱:后台进程可以kill $me直接发布,但我已经将它包含在内以便完整,因为你可以将它用作钩子来做其他事情(例如,如果你不想要死,但设置一个标志,让循环自然终止,或者你有一些清理要做终止之前).
| 归档时间: |
|
| 查看次数: |
15670 次 |
| 最近记录: |