我需要帮助编写一个bash脚本。我对脚本知识知之甚少,但我愿意学习。
我的文件包含如下所示的行:1204200141345_song.mp3
。这些数字是day=12, month=04, year=2014, hour=13, min=45
我需要一个可以读取文件的脚本,如果一行符合当前日期和时间,它将在正确的时间通过mplayer / mpg123播放mp3。当mp3结束时,它必须继续。文件一直在变化。新线路进入,其他线路被删除。只要打开电脑,脚本就会运行。
我不知道从哪里开始,任何建议都表示赞赏。
答案 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以状态代码退出
上一个命令的存在状态存储在特殊变量$?
中。您可以测试退出状态,例如使用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
现在,您有足够的信息尝试自己编写脚本,如果遇到某些特定错误,请再次询问......;)