日期检查脚本

时间:2014-02-23 12:45:59

标签: bash

我需要帮助编写一个bash脚本。我对脚本知识知之甚少,但我愿意学习。

我的文件包含如下所示的行:1204200141345_song.mp3。这些数字是day=12, month=04, year=2014, hour=13, min=45

之类的日期和时间

我需要一个可以读取文件的脚本,如果一行符合当前日期和时间,它将在正确的时间通过mplayer / mpg123播放mp3。当mp3结束时,它必须继续。文件一直在变化。新线路进入,其他线路被删除。只要打开电脑,脚本就会运行。

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

1 个答案:

答案 0 :(得分:2)

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

  

只要电脑开启,脚本就会运行。

好的,这可以通过一个永远运行的循环来实现,就像下一个循环一样:

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"

将以所需格式打印当前日期/时间

可以使用

将命令的结果分配给bash中的某个变量
variable=$(command argumens)

所以,

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

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

  

...通读文件,如果一行符合当前日期和时间......

可以使用Read-thru and match命令(man grep)完成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

现在,您有足够的信息尝试自己编写脚本,如果遇到某些特定错误,请再次询问......;)