免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3570 | 回复: 16
打印 上一主题 下一主题

shell的兼容性问题?贴个脚本请大家一起帮忙改进--shell,wget,mp3,自动播放 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-16 20:11 |只看该作者 |倒序浏览
google_music.rar (1.93 KB, 下载次数: 31) 网上找到的(脚本应用没有问题),但我运行了下发现有问题,改了下未果。特贴上来请大家帮忙一起看看。

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 729040 2009-03-02 22:22 /bin/bash

$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

也改成#!/bin/bash,但是依然不行。

这是个通过google音乐查找歌曲并播放的脚本。



  1. #!/bin/sh
  2. LANG="en.UTF-8"
  3. DOWNLOAD_TMP="/tmp/google_music_download"
  4. MUSIC_DATA="/tmp/google_music_data"
  5. CURRENT_PAGE=1
  6. MAX_PAGE=0
  7. KEYWORDS=""
  8. WGET_AGENT="Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5"
  9. COLOR="/tmp/google_music_color"

  10. echo '40;31' > $COLOR
  11. echo '40;33' >> $COLOR
  12. echo '40;32' >> $COLOR

  13. get_color()
  14. {
  15.     head -1 $COLOR
  16.     sed -i -e '1{h;d};$G' $COLOR
  17. }

  18. search_music()
  19. {
  20.     if [ -f "$MUSIC_DATA$CURRENT_PAGE" ];then
  21.         return "1"
  22.     fi
  23.     echo "loading...."
  24.     keyword=`echo ${KEYWORDS} | uni2ascii -a J -q`
  25.     page=`expr $CURRENT_PAGE - 1`
  26.     page=`expr $page \* 20`
  27.     wget -q  --user-agent="$WGET_AGENT" "http://www.google.cn/music/search?q=${keyword}&cat=song&start=${page}" -O "$DOWNLOAD_TMP$CURRENT_PAGE"
  28.     cat $DOWNLOAD_TMP$CURRENT_PAGE | sed -n -e "/class=\"SongItem/,/<\/tr>/p" | awk 'BEGIN{ORS="";spl="\t"}\
  29. /class=\"Title/{print gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
  30. /class=\"Artist/{getline;print spl gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
  31. /class=\"Album/{print spl gensub(/.*>([^>]*)<\/a>.*/,"\\1",1);}\
  32. /下载\" oncontex/{print spl gensub(/.*open\(\"(.*)\&quot.*/,"\\1",1);print "\n";}' | ascii2uni -a D -q | ascii2uni -a 7 -q | sed -e 's/<\/\?b>//g'  > "$MUSIC_DATA$CURRENT_PAGE"
  33. }

  34. has_next_page()
  35. {
  36.     grep "<td class=\"next\">" $DOWNLOAD_TMP$CURRENT_PAGE
  37. }

  38. rm_data()
  39. {
  40.     rm -f ${DOWNLOAD_TMP}*
  41.     rm -f ${MUSIC_DATA}*
  42. }

  43. end()
  44. {
  45.     rm_data
  46.     rm -f $COLOR
  47. }

  48. show_menu()
  49. {
  50.     echo -e "\033[2J"
  51.    
  52.     cat "$MUSIC_DATA$CURRENT_PAGE" | awk 'BEGIN{ORS="";FS="\t";print "序号\t曲名\t歌手\t专辑\n";}\
  53.     {printf("%d)\t%-30s\t%-20s\t%-20s\n",NR,$1,$2,$3);}' > /tmp/google_music_menu
  54.     echo "$KEYWORDS" | sed -e "s/\+/\n/g" | while read line
  55.     do
  56.         color=`get_color`
  57.         sed -i -e "s/\(${line}\)/\\\\\\\033[${color}m\1\\\\\\\033[0m/g" "/tmp/google_music_menu"
  58.     done
  59.     cat /tmp/google_music_menu | xargs -i echo -e {}
  60.     rm -f /tmp/google_music_menu

  61.     echo ""
  62.     echo "关键词:${KEYWORDS}  当前页:$CURRENT_PAGE"
  63.     echo -n "[num]播放对应序号的曲目 "
  64.     if [ ! "$CURRENT_PAGE" -eq "1" ];then
  65.         echo -n "[p]向上翻页 "
  66.     fi
  67.     if [ -n "`has_next_page`" ];then
  68.         echo -n "[n]向后翻页 "
  69.     fi
  70.     echo -n "[c]更换关键词 "
  71.     echo -n "[r]刷新 "
  72.     echo  "[q]退出 "
  73. }

  74. set_keywords()
  75. {
  76.     KEYWORDS=`echo "$1"|sed -e "s/ /\+/g"`
  77.     rm_data
  78.     refresh_all
  79. }


  80. refresh_all()
  81. {
  82.     search_music
  83.     show_menu
  84. }

  85. next_page()
  86. {
  87.     if [ ! -n "`has_next_page`" ];then
  88.         echo "木有下一页了.."
  89.         return "1"
  90.     fi
  91.     CURRENT_PAGE=`expr ${CURRENT_PAGE} + 1`
  92.     refresh_all
  93. }

  94. pre_page()
  95. {
  96.     if [ "$CURRENT_PAGE" -eq "1" ];then
  97.         echo "木有上一页了.."
  98.         return "1"
  99.     fi
  100.     CURRENT_PAGE=`expr ${CURRENT_PAGE} - 1`
  101.     echo "$CURRENT_PAGE}"
  102.     refresh_all
  103. }

  104. get_download_url()
  105. {
  106.     tmp="/tmp/google_music_get_durl"
  107.     url=`echo $1 | sed -e "s/&/\&/g"`
  108.     wget "http://www.google.cn${url}" --spider -o $tmp  --user-agent="$WGET_AGENT"
  109.     durl=`cat $tmp | grep "Location:" | sed -e "s/.*id=\(.*\) \[following\].*/\1/" -e "s/&/\&/g"`  
  110.     durl="http://www.google.cn/music/top100/musicdownload?id=${durl}"
  111.     wget -q "$durl" -O $tmp --user-agent="$WGET_AGENT"
  112.     durl=`cat $tmp | grep "/music/top100/url" | sed -e "s/.*href=\"\([^\"]*\)\".*/\1/" -e "s/&/\&/g"`
  113.     durl="http://www.google.cn${durl}"
  114.     wget  "$durl" --spider -o $tmp --user-agent="$WGET_AGENT"
  115.     durl=`cat $tmp | grep "Location:" | tail -1 | sed -e "s/.*Location: \(.*\) \[following\].*/\1/"`
  116.     rm -f $tmp
  117.     echo $durl
  118. }

  119. play()
  120. {
  121.     line=$1
  122.     url=`cat "$MUSIC_DATA$CURRENT_PAGE" | awk "BEGIN{ORS=\"\";FS=\"\\t\"}{if(FNR==${line}){print \\\$4}}"`
  123.     url=`get_download_url $url`
  124.     if [ -n "`which rhythmbox`" ];then
  125.         rhythmbox-client --play-uri=$url
  126.         rhythmbox-client --play --enqueue "$url"
  127.     else
  128.         echo "下载地址:"
  129.         echo "$url"
  130.     fi
  131. }

  132. main_loop()
  133. {
  134.     while [ "s"="s" ];do
  135.         read -p "cmd:" ac
  136.         if [ ! -n "`echo \"$ac\" | sed -e \"s/[0-9]//g\"`" ];then
  137.             play "$ac"
  138.         else
  139.             case "$ac" in
  140.                 "n")
  141.                 next_page
  142.                 ;;
  143.                 "p")
  144.                 pre_page
  145.                 ;;
  146.                 "r")
  147.                 refresh_all
  148.                 ;;
  149.                 "c")
  150.                 read -p "keywords(eg:周杰伦+夜曲):" key
  151.                 if [ -n "$key" ];then
  152.                     set_keywords "$key"
  153.                 fi
  154.                 ;;
  155.                 "q")
  156.                 end
  157.                 exit
  158.             esac
  159.         fi
  160.     done
  161. }

  162. if [ ! -n "`which ascii2uni`" ];then
  163.     echo "必须安装uni2ascii软件包:sudo apt-get install uni2ascii"
  164.     exit
  165. fi

  166. if [ ! -n "$1" ];then
  167.     exit
  168. fi

  169. set_keywords "$1"
  170. main_loop

复制代码


[ 本帖最后由 alenbull 于 2009-9-16 21:20 编辑 ]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
2 [报告]
发表于 2009-09-16 20:35 |只看该作者
你说的问题是什么?我这里可以运行啊

论坛徽章:
0
3 [报告]
发表于 2009-09-16 20:38 |只看该作者
shell兼容性问题?
ls -l /bin/sh

论坛徽章:
0
4 [报告]
发表于 2009-09-16 20:40 |只看该作者
难道真是我shell的问题?

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2009-02-09 23:39 /bin/sh -> dash

论坛徽章:
0
5 [报告]
发表于 2009-09-16 20:43 |只看该作者
看看你的系统有无bash
改成#!/bin/bash试试

论坛徽章:
0
6 [报告]
发表于 2009-09-16 20:46 |只看该作者
我改成了bash

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 729040 2009-03-02 22:22 /bin/bash

$ whereis bash
bash: /bin/bash /etc/bash.bashrc /usr/share/man/man1/bash.1.gz

也改成#!/bin/bash,但是依然不行。

序号        曲名        歌手        专辑

关键词:夜曲  当前页:1
[num]播放对应序号的曲目 [n]向后翻页 [c]更换关键词 [r]刷新 [q]退出
cmd:

[ 本帖最后由 alenbull 于 2009-9-16 20:49 编辑 ]

论坛徽章:
0
7 [报告]
发表于 2009-09-16 21:02 |只看该作者
原帖由 MYSQLER 于 2009-9-16 20:35 发表
你说的问题是什么?我这里可以运行啊

这位朋友是什么环境呀?

论坛徽章:
0
8 [报告]
发表于 2009-09-16 21:25 |只看该作者
序号    曲名    歌手    专辑

关键词:夜曲  当前页:4
[num]播放对应序号的曲目 [p]向上翻页 [n]向后翻页 [c]更换关键词 [r]刷新 [q]退出
cmd:

应该是搜索到结果 了,都翻到第4页了。但是没有显示结果

论坛徽章:
0
9 [报告]
发表于 2009-09-16 21:27 |只看该作者
我是ubuntu.
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 9.04
Release:        9.04
Codename:       jaunty

$ whereis uni2ascii
uni2ascii: /usr/bin/uni2ascii /usr/share/man/man1/uni2ascii.1.gz

$ whereis rhythmbox
rhythmbox: /usr/bin/rhythmbox /usr/lib/rhythmbox /usr/share/rhythmbox /usr/share/man/man1/rhythmbox.1.gz

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
10 [报告]
发表于 2009-09-16 21:48 |只看该作者
我也用ubuntu试的,可以搜索到

[ 本帖最后由 MYSQLER 于 2009-9-16 21:50 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP