2014-02-23 57 views
0

我需要编写bash脚本的帮助。我对脚本知识甚少,但愿意学习。日期检查器脚本

我有一个看起来像这样的行的文件:1204200141345_song.mp3。这些数字是日期和时间像day=12, month=04, year=2014, hour=13, min=45

我需要一个脚本,将通过该文件通读,如果一行匹配的当前日期和时间,它会通过mplayer/mpg123在正确的时间播放MP3。当mp3结束时,它必须继续。文件始终在变化。新行进入,其他行被删除。只要电脑开着,脚本就会运行。

我不知道从哪里开始,任何建议表示赞赏。

+0

也许当你显示至少很少的努力来解决这个问题 - 你可以得到更多的答案......欢迎来到SO - 并阅读顶部的帮助...像︰_Questions要求代码必须展示一个最小了解正在解决的问题。包括尝试解决方案,为什么他们不工作,以及预期的结果... _ – jm666

+0

您的文件名是从年份20014 –

回答

2

所以,你愿意学习 - 一些出发点...

该脚本将只要是PC上运行。

好吧,这可以用一个循环什么将永远运行,像下一个来实现:

while : 
do 
    some_commands 
done 

当MP3结束它必须继续。

正如上面 - 如果some_commands包含的命令来播放文件 - 该脚本会等待命令完成,并开始了 - 又一次,又一次,又一次...永远...

文件一直在变化。新行进入,其他行删除 。

不需要在意,直到它是一个文件...

...如果某行匹配 当前日期和时间将在 起到通过的mplayer/mpg123的MP3的正确的时间。

因此,首先您需要获取所需格式的日期。这可以通过date命令来实现。 (man date)

所需要的格式是%d%m%Y%H%M,所以

date +"%d%m%Y%H%M" 

将打印当前的日期/时间以期望格式

assing命令的结果,一些变量bash是可以做到的在

variable=$(command argumens) 

所以,

datestr=(date +"%d%m%Y%H%M") 
echo $datestr 

会将当前日期/时间分配给变量datestr

...通过文件读取,如果一条线的当前日期和时间......

Read-thru and match可以用grep命令(man grep)来完成,因此,你需要使用

grep "what_want_to_match" filename_where_want_to_match.txt 

grep的匹配用的状态代码

  • 0退出 - 发现匹配
  • 1 - 匹配找不到
  • 2 - 文件不存在

上一个命令的存在状态存储在特殊变量$?中。您可以测试退出状态,例如与bash的case建设,如:

some_command 
case $? in 
    2) echo "The some_command exited with status 2" ; exit 2 ;; 
    1) echo "with status 1" ; do_something_else ;; 
    0) echo "normal exit" ;; 
esac 

现在,你有足够的信息来尝试自己编写剧本,如果你满足一些特定的错误 - 再问... ;)