1、获取当前时间戳
从1970-01-01 00:00:00 UTC到现在的秒数:
echo `date '+%s'`
2、运行了n个小时后的时间戳
这里的n可能为小数,因此涉及shell的小数相乘处理:
`awk -v x=3600 -v y="$n" 'BEGIN{printf "%.0f\n",x*y}'`
3、完整代码
剩下的一个循环即可解决:
n=$1 #作为运行参数传入
currentTimeStamp=`date '+%s'` #开始时间戳
tmp=`awk -v x=3600 -v y="$n" 'BEGIN{printf "%.0f\n",x*y}'` #.0f表示计算结果保存0位小数
endTimeStamp=$(($tmp+currentTimeStamp)) #结束时间戳
while [ $currentTimeStamp -lt $endTimeStamp ] #这里循环一定要注意空格
do
echo "---------------------" #执行代码
currentTimeStamp=`date '+%s'` #更新当前时间戳
done
此处以小时为单位,只有当执行代码运行完之后才会进行时间判断,如果需要到达设定时间立刻终端执行程序的话,还需要涉及多线程。