LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: kiron

搜索一首歌并调用XMMS播放的脚本,有兴趣的兄弟来一起完善它

[复制链接]
发表于 2003-9-30 18:37:38 | 显示全部楼层
要是你想创建一个新的目录为了放新下载的音乐,那脚本还能找到吗?

惭愧~~~~脚本看不懂,给你提个建议。
 楼主| 发表于 2003-9-30 19:00:22 | 显示全部楼层
最初由 devel 发表
要是你想创建一个新的目录为了放新下载的音乐,那脚本还能找到吗?

惭愧~~~~脚本看不懂,给你提个建议。


太可惜,不能找到了,如果你加搜索路径的话就还可以找到,不加就不行了,
sorry!!!不记得给脚本加注释了,原稿不可编辑了,在下面补上

  1. #!/bin/bash
  2. #this scricpt for find a song from a directory and play it in xmms.
  3. #fm
  4. SONG="$1.mp3"          #一共是给出两个参数给脚本,第一个参数为歌名,加
  5.                         #上.mp3,所以只支持mp3格式的歌曲。这样就有了
  6.                          #歌曲的全名,赋给变量SONG
  7. MDIR=$2                #第二个参数是搜索路径,赋给变量MDIR
  8. SONGPA=`find $MDIR -name $SONG`   #调用find命令在$MDIR搜索名为$SONG
  9.                                      #的歌,并把找到的路径给变量              
  10.                                      #SONGPA,若是找不到,在RH下不会
  11.                                       #给出信息,SONGPA变量为空
  12. if [ "$SONGPA" = "" ]   #这里本来用$?来判定find命令是否有找到歌曲的,
  13.                        #但是测试了几次发现find命令的返回值都是0,没法判
  14.                        #定,只好用变量SONGPA来判定。SONGPA为空,表示
  15.                         #没有找到歌曲,执行下一行的then语句
  16. then echo "Sorry,there is not $SONG in $MDIR!!!!"
  17. else echo "Xmms is playing $SONG..."   #若是找到路径,则SONGPA有值,就调
  18.                                     #用XMMS播放,并给出播放信息。
  19.      xmms -p $SONGPA
  20. fi
复制代码
发表于 2003-9-30 20:17:09 | 显示全部楼层
谢谢!!!

我用的是mplayer ,我就是不懂在命令后面 跟个参数。我一般是先运行命令,在输入目标的。
你能教教我要怎么做吗?


我的RedHat 8.0出毛病了。
[root@localhost scr]# cat mp
#!/bin/bash
mount /mnt/d 2>/dev/null
a=`pwd
cd /mnt/d/media/good/
while true
do
echo "input music name:  (exit if you enter q )"
read $name
if [$name = "q"];then echo "Good bye ! dear";exit 0;fi
mplayer $name
echo "music already played complete !"
fi

[root@localhost scr]# mp
/root/bin/mp: line 3: unexpected EOF while looking for matching ``'
/root/bin/mp: line 14: syntax error: unexpected end of file
[root@localhost scr]# ls /root/bin
ls  mp  tcpdump  up
[root@localhost scr]# ./mp
./mp: line 3: unexpected EOF while looking for matching ``'
./mp: line 14: syntax error: unexpected end of file
[root@localhost scr]# file mp
mp: Bourne-Again shell script text executable
[root@localhost scr]# echo $0
bash
[root@localhost scr]# exit
exit
[root@localhost ~]# bash
bash: alia: command not found
[root@localhost root]#
发表于 2003-9-30 20:28:41 | 显示全部楼层
最初由 devel 发表

...
我的RedHat 8.0出毛病了。
[root@localhost scr]# cat mp
#!/bin/bash
mount /mnt/d 2>/dev/null
a=`pwd         
...
[root@localhost root]#

a=`pwd     
你的第三行,看看少了什么!
发表于 2003-9-30 20:49:21 | 显示全部楼层
还有一处出了错呢~~正考虑打个洞钻进去。
唉~~怎么近来来是出错:confused:

那我运行bash怎么显示有错,错在哪里?
发表于 2003-9-30 20:51:58 | 显示全部楼层
从一个目录找 mp3 没啥意思,应该是先整体搜索一次,然后把不同目录的歌曲做成一个清单,再在清单里查询歌曲,这样速度应该更快。
每当下载了新的 mp3, 就允许更新程序更新清单。
发表于 2003-9-30 21:16:56 | 显示全部楼层
[root@localhost scr]# cat mp
#!/bin/bash
mount /mnt/d 2>/dev/null
#touch /mnt/d/media/test0 2>/dev/null # 2 是代表标准错误输出文件,>/dev/null是dump 不要的就丢到那儿就行了。
#mv -rf `find / -name *.mp3` /mnt/d/media/test0
a=`pwd`
cd /mnt/d/media/good/
while true
do
echo "input music name: "
read name
if [ -e $name ];then
#echo "please choose mplayer type:  * OR num(count) OR loop  ! "
#read type
#if [ $type="*" || $type="
mplayer $name
echo "music already played complete !"
else echo "Good bye !  Dear ! This music is not exist! You can play next time !"
fi
done
cd $a

[root@localhost scr]#

我的水平就到这了。,不懂得怎么用mplayer自带的参数。
 楼主| 发表于 2003-9-30 22:12:19 | 显示全部楼层
最初由 devel 发表
[root@localhost scr]# cat mp
#!/bin/bash
mount /mnt/d 2>/dev/null
#touch /mnt/d/media/test0 2>/dev/null
#mv -rf `find / -name *.mp3` /mnt/d/media/test0
a=`pwd`
cd /mnt/d/media/good/
while true
do
echo "input music name: "
read name
if [ -e $name ];then
#echo "please choose mplayer type:  * OR num(count) OR loop  ! "
#read type
#if [ $type="*" || $type="
mplayer $name
echo "music already played complete !"
else echo "Good bye !  Dear ! This music is not exist! You can play next time !"
fi
done
cd $a

[root@localhost scr]#

我的水平就到这了。,不懂得怎么用mplayer自带的参数。


我帮你加了几句,改动了一些语句,也不知道做的对不对,请指教(我在我的机上简单测试是成功的)

  1. #!/bin/bash
  2. mount /mnt/d 2>/dev/null    #不知这句是什么意思?请兄弟指点一下
  3. #touch /mnt/d/media/test0 2>/dev/null
  4. #mv -rf `find / -name *.mp3` /mnt/d/media/test0
  5. a=`pwd`
  6. cd /mnt/d/media/good/
  7. while true
  8. do
  9. echo -n "input music name: "
  10. read name
  11. if [ -e $name ];then     #这里我认为用-r选项好点,
  12.                        #存在但不可读的话一样不能播放
  13. #echo "please choose mplayer type:  * OR num(count) OR loop  ! "
  14. #read type
  15. #if [ $type="*" || $type="
  16. mplayer $name
  17. echo "music already played complete !"
  18. exit 0
  19. cd $a
  20. else echo "Good bye !  Dear ! This music is not exist! You can play next time !"
  21. exit 1
  22. cd $a
  23. fi
  24. done
复制代码


另外,这个脚本不能判断是不是mplay的支持格式,不支持的格式它也会打印music already played complete !,是个小bug,看看是否可以继续改进,比如说利用mplay的返回值判断??
发表于 2003-10-1 02:47:13 | 显示全部楼层
#!/usr/local/bin/bash
#date:2003/10/1
mount /mnt/d 2>/dev/null #suppress error message
#touch /mnt/d/media/test0 2>/dev/null 。
#mv -rf `find / -name *.mp3` /mnt/d/media/test0
a=`pwd`
cd /mnt/d/media/good/
while true
do
echo "input music name: (will exit if you enter e ! )"
read name
if [ $name = "e" ] ; then echo "The process will exit !";cd $a;exit 0;fi
r=`echo $name|rev|cut -c1-2|rev`
m=`echo $name|rev|cut -c1-3|rev`
if [[ $r = "rm" || $m = "mp3" ]];then
if [ -r $name ];then
mplayer $name
echo "music already played complete !";sleep 3
else echo "Good bye ! Dear This music can not read ! You can play next time !"
fi
else echo "Can not support this type !";fi
done
#祝大家国庆节快乐!!

要是还支持什么格式的文件可以自已添加,
关于2>/dev/null的解释在上一贴简单解释了。请看上一贴。
rev 的作用是把输出的顺序反过来,
看简单的例子:
# echo hello|rev|cut -c1-3
oll
# echo hello|cut -c1-3
hel
# echo hello|rev|cut -c1-3|rev
llo
#
发表于 2003-10-2 23:48:57 | 显示全部楼层
鉴于kiron兄和devel兄对shell一丝不苟的精神和认真负责的态度!值得加精!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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