Shell 监测文件夹下文件是否修改,若修改则执行新文件
多任务模式
#!/bin/bash
music_dir=/home #目录下面只有一首音乐
startTime=$(date +%s) #程序的开始时间
echo $startTime
tmp=1
music_play_time=600 #单位s
music_type=1
music_file="test.mp3"
#播放语音
function play_music()
{
#获取文件的创建时间
music_file_create_time=$(date +%s -r $music_dir/$music_file)
echo "$music_file create time is $music_file_create_time"
if [ $music_type -eq "2" ]
then
mplayer $music_dir/$music_file < /dev/null > /dev/null 2>&1 & #音乐只播放一次
elif [ $music_type -eq "1" ]
then
mplayer -loop 0 $music_dir/$music_file< /dev/null > /dev/null 2>&1 & #音乐循环播放,若想播放三次则将0改成3 &表示多任务
local mplayer_fork=$(ps -A | grep mplayer | awk '{print $1}') #获取播放器的进程号
echo $mplayer_fork
while true
do
endTime=$(date +%s)
local stopTime=$((endTime - startTime)) #播放的时间差
if [ $stopTime -eq $music_play_time ]
then
echo "this is time out"
echo $stopTime
kill $mplayer_fork
break
fi
done
fi
}
if [ ! -f md5.music ];then #判断是否有md5文件, 用md5文件监测文件夹下的文件是否更改,若更改则播放新音乐,
find $music_dir/ -type f -exec md5sum {} \; > md5.music
echo "create $music_dir/md5.music"
fi
while true
do
md5sum -c md5.music --status #查看md5的状态
for newFile in $(find $music_dir/ -type f) #监测石油文件发生更改
do
grep $newFile md5.music > /dev/null 2>&1
if [ $? -gt 0 ];then #若发生更改,则找出之前的播放器进程号,kill掉, 将新文件名写入md5中
mp_fork=$(ps -A | grep mplayer | awk '{print $1}')
echo $mp_fork
kill $mp_fork
echo "$mp_fork is kill"
md5sum $newFile > md5.music
tmp=1
echo $newFile
fi
done
if [ $tmp -eq "1" ]
then
play_music & #播放音乐进程
tmp=0
fi
sleep 6 #间隔6s监测文件是否变化
done
注:运行文件用sh会报错,若报错则用bash运行脚本文件,错误消失,具体原因百度一下