亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: shell的兼容性問題?貼個腳本請大家一起幫忙改進--shell,wget,mp3,自動播放 [打印本頁]

作者: alenbull    時間: 2009-09-16 20:11
標題: shell的兼容性問題?貼個腳本請大家一起幫忙改進--shell,wget,mp3,自動播放
google_music.rar (1.93 KB, 下載次數(shù): 31) 網(wǎng)上找到的(腳本應用沒有問題),但我運行了下發(fā)現(xiàn)有問題,改了下未果。特貼上來請大家?guī)兔σ黄鹂纯础?br />
$ 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 編輯 ]
作者: MYSQLER    時間: 2009-09-16 20:35
你說的問題是什么?我這里可以運行啊
作者: ywlscpl    時間: 2009-09-16 20:38
shell兼容性問題?
ls -l /bin/sh
作者: alenbull    時間: 2009-09-16 20:40
難道真是我shell的問題?

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2009-02-09 23:39 /bin/sh -> dash
作者: ywlscpl    時間: 2009-09-16 20:43
看看你的系統(tǒng)有無bash
改成#!/bin/bash試試
作者: alenbull    時間: 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 編輯 ]
作者: alenbull    時間: 2009-09-16 21:02
原帖由 MYSQLER 于 2009-9-16 20:35 發(fā)表
你說的問題是什么?我這里可以運行啊

這位朋友是什么環(huán)境呀?
作者: alenbull    時間: 2009-09-16 21:25
序號    曲名    歌手    專輯

關鍵詞:夜曲  當前頁:4
[num]播放對應序號的曲目 [p]向上翻頁 [n]向后翻頁 [c]更換關鍵詞 [r]刷新 [q]退出
cmd:

應該是搜索到結(jié)果 了,都翻到第4頁了。但是沒有顯示結(jié)果
作者: alenbull    時間: 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
作者: MYSQLER    時間: 2009-09-16 21:48
我也用ubuntu試的,可以搜索到

[ 本帖最后由 MYSQLER 于 2009-9-16 21:50 編輯 ]
作者: MYSQLER    時間: 2009-09-16 21:51
你是直接用文件傳上去的?如果是dos2unix,可能是文件格式問題
作者: alenbull    時間: 2009-09-16 23:02
原帖由 MYSQLER 于 2009-9-16 21:51 發(fā)表
你是直接用文件傳上去的?如果是dos2unix,可能是文件格式問題


你是說用復制粘貼么?
作者: ywlscpl    時間: 2009-09-16 23:13
標題: 回復 #12 alenbull 的帖子
cat -A 腳本
看看腳本每行最后是否是^M$
作者: ywlscpl    時間: 2009-09-16 23:15
不過想想如果是dos格式的問題,腳本運行不可能不報錯
作者: alenbull    時間: 2009-09-16 23:17
原帖由 ywlscpl 于 2009-9-16 23:13 發(fā)表
cat -A 腳本
看看腳本每行最后是否是^M$


沒有^M$

if [ ! -n "`which ascii2uni`" ];then$
    echo "M-eM-?M-^EM-iM-!M-;M-eM-.M-^IM-hM-#M-^Euni2asciiM-hM-=M-/M-dM-;M-6M-eM-^LM-^E:sudo apt-get install uni2ascii"$
    exit$
fi$
$
if [ ! -n "$1" ];then$
    exit$
fi$
$
set_keywords "$1"$
main_loop$
作者: alenbull    時間: 2009-09-16 23:40
MS找著原因了
sudo apt-get install gawk

[ 本帖最后由 alenbull 于 2009-9-16 23:44 編輯 ]
作者: MYSQLER    時間: 2009-09-17 09:28
原帖由 alenbull 于 2009-9-16 23:40 發(fā)表
MS找著原因了
sudo apt-get install gawk



我用的也是ubuntu,這個腳本里面寫得也是awk




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2