LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1900|回复: 6

发布一个我做的bash定时器

[复制链接]
发表于 2008-3-3 01:04:16 | 显示全部楼层 |阅读模式
用法:
./beep #连续响三下
./beep -l 4 #重复4次连响三下,4次之间有停顿
./beep -s 30 #30秒后连响三下
./beep -% 2/3 #计算出一分钟按三分之二是多少秒,等待该时段后连响三下
./beep -m 2:31 #2分31秒后连响三下
./beep -h 5:3:24 #5小时3分24秒后连响三下
五个参数可以重复使用,也可以联合使用,时间累加,但-l参数以最后一次为准

源码:等同于附件!!!
#!/bin/bash
function alarm(){
sleep 0.7
printf "\7"
sleep 0.3
printf "\7"
sleep 0.3
printf "\7";
}

n_time=0
for((j=1;j<=$#;j+=2))
do
eval k=\$$j
if [ $k == "-s" ];then
eval k=\$$[j+1]
n_time=$[n_time+k]
elif [ $k == "-%" ];then
eval k=\$$[j+1]
n_time=$[n_time + ${k%/*} * 60 / ${k#*/}]
elif [ $k == "-m" ];then
eval k=\$$[j+1]
n_time=$[n_time + ${k#*:} + 60 * ${k%:*}]
elif [ $k == "-h" ];then
eval k=\$$[j+1]
eval m=${k#*:}
n_time=$[n_time + ${m#*:} +  60 * ${m%:*} + 3600 * ${k%m}]
elif [ $k == "-l" ];then
eval n_loop=\$$[j+1]
fi
done
if [ $n_time -ne 0 ];then
echo sleep ${n_time}s
sleep $n_time
fi
if [[ -n $n_loop ]];then
for((i=0;i<$n_loop;i++))
do
alarm
done
else
alarm
fi

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2008-3-3 01:05:15 | 显示全部楼层
代码虽然简单,但感觉很实用,哈哈
回复 支持 反对

使用道具 举报

发表于 2008-3-6 13:28:34 | 显示全部楼层
shell中的定时器只有sleep这类么?
能否有办法实现限制程序运行时限(超过该时限则无条件退出)的定时器?
谢谢指点!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-4-6 22:57:20 | 显示全部楼层
这个应该可以:

sleep 时间 ; kill -9 `ps -C 进程名 -o pid=`

1.sleep定时
2.ps -C 进程名 -o pid=
取得超时进程ID
3.kill -9 进程ID
用kill退出超时进程
回复 支持 反对

使用道具 举报

发表于 2008-4-8 20:17:05 | 显示全部楼层
楼主,不是我要存心批评你了哦。代码贴给大伙看的两个基本前提:一要有风格,起码正确缩进,二要有注释。
我是存着看一下源码风格是不是和你张贴的一样(我认为只是因为懒得放在[code]框内所以导致排版全无的),结果很没让我失望地失望了... -_-

另外,分析选项用getopt比较好吧?
回复 支持 反对

使用道具 举报

发表于 2008-4-11 19:50:16 | 显示全部楼层
好东西,谢谢分享。
回复 支持 反对

使用道具 举报

发表于 2008-4-11 23:50:13 | 显示全部楼层
感谢楼主的奉献,但是同意5楼的观点。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表