LinuxSir.cn,穿越时空的Linuxsir!

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

【shell脚本欣赏区】:[展示你的作品的好去处!欢迎投帖]

[复制链接]
发表于 2005-7-16 04:11:35 | 显示全部楼层

百度MP3下载工具

呵呵,其实很简单,就是抓取百度的MP3网页内容再进行过滤处理
  1. #!/bin/bash
  2. ##############################################
  3. #                                                                                                              #
  4. #                    百度MP3歌曲下载工具                                                           #
  5. #     Reort bugs to  Martian < Martian2008@gmail.com >                        #
  6. #                                                                                                              #
  7. ##############################################                                                         

  8. USAGE="`basename $0`:未指定参数
  9. 用法: `basename $0` [选项]\n
  10. 请尝试使用“`basename $0` -h”查看更多的选项。"
  11. USAGE2="Getmp3 <martian2008@gmail.com>百度MP3歌曲下载工具

  12. 用法: `basename $0` [选项]\n
  13. 选项
  14. -a        top100|top500                选择下载mp3的分类       
  15. -b        1-max                        下载开始曲目数(default 1)
  16. -e        1-max                        下载结束曲目数(default max)
  17. -g        number                        下载指定曲目(id编号)
  18. -m                                交互式选择下载镜像点
  19. -o                                覆盖已下载文件
  20. -u                                更新数据库
  21. -U                                更新下载镜像
  22. -l                                打印音乐数据列表
  23. -s        [strings]                查找歌曲
  24. -S        [PATH]                        文件另存为
  25. "
  26. M=0
  27. O=0
  28. B=1
  29. E=0
  30. L=0
  31. G=0
  32. U=0
  33. SEARCH=""
  34. LYNX="/usr/bin/lynx"
  35. WGET="/usr/bin/wget"
  36. GET_NUM=102
  37. NUM=1
  38. SOURCE1="http://list.mp3.baidu.com/list/newhits.html"
  39. SOURCE2="http://list.mp3.baidu.com/topso/mp3topsong.html"
  40. TEMP1="${HOME}/.Getmp3/tmp_mp3_list"
  41. TEMP2="${HOME}/.Getmp3/tmp_mp3_list2"
  42. TEMP3="${HOME}/.Getmp3/tmp_mp3_down"
  43. SAVE1="${HOME}/mp3_new100"
  44. SAVE2="${HOME}/mp3_top500"
  45. export LESSCHARSET=latin1
  46. export LC_ALL=zh_CN.gbk
  47. export LANG=zh_CN.gbk
  48. if [ ! -d "${HOME}/.Getmp3" ];then
  49.         mkdir -p "${HOME}/.Getmp3"
  50. fi

  51. while getopts a:hmuUob:e:lg:s:S:  OPTION;
  52. do
  53.         case "$OPTION" in
  54.                 a) S="$OPTARG" ;;
  55.                 s) SEARCH="$OPTARG" ;;
  56.                 h) echo -e "$USAGE2"
  57.                    exit 0;;
  58.                 m) M=1;;
  59.                      o) O=1;;
  60.                      U) U=1;;
  61.                      l) L=1;;
  62.                 S) if [ -d "$OPTARG" -a -w "$OPTARG" -a -x "$OPTARG" ];then
  63.                                SAVE="$OPTARG"
  64.                    else
  65.                             echo -en "\\033[0;31m"
  66.                          echo -e
  67.                          echo "指定目录:${OPTARG} 权限不正确或者该目录不存在"
  68.                               echo -en "\\033[0;39m"
  69.                          exit 1;
  70.                    fi               
  71.                
  72.                 ;;
  73.                 b)echo "${OPTARG}"|grep -qE '^[0-9]*\.?[0-9]*$' && B="${OPTARG}" || B=1
  74.                 ;;
  75.                 e)echo "${OPTARG}"|grep -qE '^[0-9]*\.?[0-9]*$' && E="${OPTARG}" || E=0
  76.                 ;;
  77.                 g)echo "${OPTARG}"|grep -qE '^[0-9]*\.?[0-9]*$' && G="${OPTARG}" || G=0
  78.                 ;;
  79.                 u) rm -rf  "${HOME}"/.Getmp3/tmp_mp3*
  80.                 echo -en "\\033[0;36m"
  81.                    echo "开始下载数据"
  82.                    while [ ! -f "${TEMP1}_top100" ]
  83.                    do
  84.                            $LYNX -source ${SOURCE1} >"${TEMP1}_top100"
  85.                    done
  86.                   
  87.                    while [ ! -f "${TEMP1}_top500" ]
  88.                    do
  89.                    $LYNX -source ${SOURCE2} >"${TEMP1}_top500"
  90.                       done
  91. cat "${TEMP1}_top500" |grep --after-context=1 "<tr bgcolor="#FFFFFF"><td width="20%"><font color="#3333CC">1." |\
  92. sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr><tr>//g' -e 's/<\/tr><tr bgcolor="#FFFFFF">//g'\
  93.      -e 's/<td width="20%"><font color="#3333CC">[0-9]*\.<\/font><a href="/http:\/\/list.mp3.baidu.com\/topso\//g'\
  94.      -e 's/" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/<td/d'  >"${TEMP2}_top500"
  95.      
  96.         while [ ${GET_NUM} -gt  0 ]
  97.         do
  98.         cat  "${TEMP1}_top100" |grep --after-context=1 "<div align="center"><font color="#3333CC">${NUM}.</font>" | \
  99.         grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
  100.         sed -e 's/<a href="//g' -e  's/" target="_blank">/ /g'  -e 's/<\/a>*/ /g'   >> "${TEMP2}_top100"

  101.         NUM=$((${NUM}+1))
  102.         GET_NUM=$((${GET_NUM}-1))
  103.         done
  104.                    echo 数据更新完毕
  105.                    echo -en "\\033[0;39m"
  106.                    exit 0
  107.                    ;;
  108.                    \?) echo -e "$USAGE"
  109.                      exit 1;;
  110.         esac
  111. done

  112. if [ "$#" -eq 0 ] ;then
  113.         echo -e "${USAGE}"
  114.         exit 1
  115. fi
  116. case "${S}" in
  117.         top100) SOURCE="${SOURCE1}"
  118.                 : ${SAVE:=${SAVE1}}
  119.                 ;;
  120.         top500) SOURCE="${SOURCE2}"
  121.                 : ${SAVE:=${SAVE2}}
  122.                 ;;
  123. esac
  124. if [ -z "$SOURCE"  ] ;then
  125.         echo -e "${USAGE}"
  126.         exit 1
  127. fi
  128. TEMP1=${TEMP1}_${S}
  129. TEMP2=${TEMP2}_${S}
  130. TEMP3=${TEMP3}_${S}

  131. if [ ! -d "${SAVE}" ];then
  132.         echo -en "\\033[0;36m"
  133.         echo "创建目录"
  134.         echo -en "\\033[0;39m"
  135.         mkdir -p ${SAVE}
  136. fi
  137. clear
  138. echo -e
  139. echo -en "\\033[0;36m"
  140. echo "正在下载/分析数据"
  141. echo -en "\\033[0;39m"
  142. #rm -rf ${TEMP1}

  143. while [ ! -f ${TEMP1} ]
  144. do
  145. ${LYNX} -source ${SOURCE} >${TEMP1}
  146. done

  147. #rm -rf ${TEMP2}

  148. if [ "${S}" = "top500" ]; then
  149. while [ ! -f "${TEMP2}" ]
  150. do
  151. cat ${TEMP1} |grep --after-context=1 "<tr bgcolor="#FFFFFF"><td width="20%"><font color="#3333CC">1." |\
  152. sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr><tr>//g' -e 's/<\/tr><tr bgcolor="#FFFFFF">//g'\
  153.      -e 's/<td width="20%"><font color="#3333CC">[0-9]*\.<\/font><a href="/http:\/\/list.mp3.baidu.com\/topso\//g'\
  154.      -e 's/" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/<td/d'  >${TEMP2}
  155. done
  156. elif   [ "${S}" = "top100" ]; then
  157.       while [ ! -f "${TEMP2}" ]
  158.         do
  159.         while [ ${GET_NUM} -gt  0 ]
  160.         do
  161.         cat  ${TEMP1} |grep --after-context=1 "<div align="center"><font color="#3333CC">${NUM}.</font>" | \
  162.         grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
  163.         sed -e 's/<a href="//g' -e  's/" target="_blank">/ /g'  -e 's/<\/a>*/ /g'   >> ${TEMP2}

  164.         NUM=$((${NUM}+1))
  165.         GET_NUM=$((${GET_NUM}-1))
  166.         done
  167.      done
  168. fi
  169. unset NUM
  170. : ${NUM:=${B}}
  171. if [ "${G}"  -gt 0 ];then
  172.         NUM="${G}"
  173.         E="${G}"
  174. fi       
  175. while [ -n "`cat ${TEMP2} |sed  -n "${NUM}p"`" ]
  176. do
  177.         if [ "${E}" -gt 0  -a "${NUM}" -gt "${E}" ] ;then
  178.                 if [ "${L}" -eq 1 -o  -n "${SEARCH}" ];then
  179.                         echo -e "${LIST}" |less  
  180.                 fi       
  181.                 exit 0
  182.         fi
  183.         PRE=`cat ${TEMP2} |sed  -n "${NUM}p"`
  184.         PRE=(`echo $PRE`)
  185.   if [ -n "${PRE[0]}" -a  -n "${PRE[1]}" ];then
  186.                 if [ -n "${PRE[3]}" ] ;then
  187.                         MP3=${PRE[3]}-${PRE[1]}
  188.                 else
  189.                         MP3=${PRE[1]}
  190.                 fi
  191.         MP3=`echo ${MP3} |sed  's/\//_/g'`               
  192.         if [ "${L}" -eq 1 -o  -n "${SEARCH}"  ];then
  193.                 if [ -n "${SEARCH}" ];then
  194.                         SEARCH2=` echo  "${NUM} .${MP3}" |grep "${SEARCH}"`
  195.                         if [ -n "${SEARCH2}" ];then
  196.                                 LIST="${LIST}\n ${SEARCH2}"
  197.                         fi
  198.                         unset SEARCH2
  199.                         NUM=$((${NUM}+1))
  200.                         continue
  201.                 fi
  202.                 LIST="${LIST}\n ${NUM}. ${MP3}"
  203.                 NUM=$((${NUM}+1))
  204.                 continue
  205.         fi
  206.                
  207.         echo -en "\\033[0;36m"
  208.         echo "正在处理数据 ${NUM}. ${MP3}"
  209.         echo -en "\\033[0;39m"
  210.         if [ "${U}" -eq 1 ];then
  211.                 rm -rf  "${TEMP3}_${NUM}"
  212.         fi
  213.         while [ ! -f "${TEMP3}_${NUM}" -o ! -s "${TEMP3}_${NUM}" ]
  214.         do
  215.         ${LYNX} -source "${PRE[0]}" > "${TEMP3}_${NUM}"
  216.         cat "${TEMP3}_${NUM}" |grep --before-context=0  --after-context=1 "<td class=r1>" | \
  217.         sed -e '/<\/script>*/d' -e '/--/d'| \
  218.                sed -e 's/<font[^>][^>].*//g' -e 's/" target=.*//g' -e 's/^.*<a href="//g' >"${TEMP3}_${NUM}"
  219.         done       
  220.        
  221.         NUM2=1
  222.        
  223.         echo -en "\\033[0;34m"
  224.         echo "该文件目前有`cat "${TEMP3}_${NUM}" |wc -l`个下载镜像"
  225.         echo -en "\\033[0;39m"
  226.         #交互式下载
  227.         if [ "${M}" -eq 1 ];then
  228.                 NUM3=1
  229.                 SELECT=""
  230.                 while [ -n "`cat "${TEMP3}_${NUM}" |sed  -n "${NUM3}p"`" ]
  231.                 do
  232.                                 SELECT=${SELECT}"`cat "${TEMP3}_${NUM}" |sed  -n "${NUM3}p"` "
  233.                                 NUM3=$((${NUM3}+1))
  234.                 done
  235.                 echo -en "\\033[0;33m"
  236.                 echo "请选择下载镜像"
  237.                 echo -en "\\033[0;39m"
  238.                 select COMPONENT in $SELECT
  239.                 do
  240.                         if [ -z "${COMPONENT}" ];then
  241.                                echo "该镜像地址不存在"       
  242.                                echo -en "\\033[0;33m"
  243.                                echo "请选择下载镜像 按回车继续"
  244.                                echo -en "\\033[0;39m"
  245.                                continue
  246.                        else
  247.                                  echo -en "\\033[0;36m"
  248.                                  echo "开始从镜像站点${REPLY}下载载歌曲 ${NUM}.  ${MP3}"
  249.                                   echo -en "\\033[0;33m"
  250.                                  echo "文件保存在${SAVE}"
  251.                                  echo -en "\\033[0;39m"
  252.                                
  253.                                 TYPE=`basename ${COMPONENT} |awk -F. '{print $2}'`
  254.                                 if [ "${O}" -eq 1 ];then
  255.                                       rm -rf "${SAVE}/${MP3}.${TYPE}"
  256.                                       fi                                                               
  257.                         fi
  258.                                                                                                
  259.                                 if [ -f "${SAVE}/${MP3}.${TYPE}" ];then
  260.                                         echo -en "\\033[0;31m"
  261.                                         echo "文件已存在,下载中止"
  262.                                         echo -e
  263.                                         echo -en "\\033[0;39m"
  264.                                         unset  TYPE
  265.                                         break
  266.                                 fi
  267.                                 ${WGET} -t 1 -N  -O ${SAVE}/${MP3}.${TYPE} ${COMPONENT}       
  268.                                 ret=$?
  269.                                 if [ $ret -eq 0 ]; then
  270.                                         unset TYPE
  271.                                         break
  272.                                 else
  273.                                         rm -rf ${SAVE}/${MP3}.${TYPE}
  274.                                         echo -en "\\033[0;31m"
  275.                                         echo "下载失败!"
  276.                                         echo -e
  277.                                         echo -en "\\033[0;39m"
  278.                                                echo -en "\\033[0;33m"
  279.                                                echo "请选择下载镜像 按回车继续"
  280.                                                echo -en "\\033[0;39m"
  281.                                         unset TYPE
  282.                                         continue
  283.                                 fi
  284.                        
  285.                 done
  286.         else                      
  287.        
  288.         while [ -n "`cat "${TEMP3}_${NUM}" |sed  -n "${NUM2}p"`" ]
  289.         do
  290.                 URL=`cat "${TEMP3}_${NUM}"|sed  -n "${NUM2}p"`
  291.                 TYPE=`basename ${URL} |awk -F. '{print $2}'`
  292.                 echo -en "\\033[0;36m"
  293.                 echo "开始下载歌曲 ${NUM}.  ${MP3}"       
  294.                 echo -en "\\033[0;33m"
  295.                 echo "文件保存在${SAVE}"
  296.                 echo -en "\\033[0;39m"
  297.                 if [ "${O}" -eq 1 ];then
  298.                         rm -rf "${SAVE}/${MP3}.${TYPE}"
  299.                 fi
  300.                 if [ -f "${SAVE}/${MP3}.${TYPE}" ];then
  301.                         echo -en "\\033[0;31m"
  302.                         echo "文件已存在,下载中止"
  303.                         echo -e
  304.                         echo -en "\\033[0;39m"
  305.                         unset URL TYPE
  306.                         break
  307.                 fi
  308.                 ${WGET} -t 1 -N  -O ${SAVE}/${MP3}.${TYPE} ${URL}       
  309.                 ret=$?
  310.                 if [ $ret -eq 0 ]; then
  311.                         unset URL TYPE
  312.                         break
  313.                 else
  314.                         rm -rf ${SAVE}/${MP3}.${TYPE}
  315.                         echo -en "\\033[0;31m"
  316.                         echo "下载失败!"
  317.                         echo -e
  318.                         echo -en "\\033[0;39m"
  319.                         unset URL TYPE
  320.                 fi
  321.                  NUM2=$((${NUM2}+1))
  322.          done
  323.                   fi
  324.                                
  325.         fi
  326.         NUM=$((${NUM}+1))
  327.         unset PRE MP3
  328. done       
  329. if [ "${L}" -eq 1 -o -n "${SEARCH}" ];then
  330.         echo -e "${LIST}" |less
  331. fi
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-7-16 21:19:27 | 显示全部楼层

最新更新

[PHP]#!/bin/bash
#################################################################
#                                                                #
#                百度MP3歌曲下载工具                                #
#        Reort bugs to  Martian < Martian2008@gmail.com >        #
#                Last Update   2005/07/17                        #
#                                                                #
#################################################################                                                            

USAGE="`basename $0`:未指定参数
用法: `basename $0` [选项]\n
请尝试使用“`basename $0` -h”查看更多的选项。"
USAGE2="
GetMP3 <martian2008@gmail.com>百度MP3歌曲下载工具

用法: `basename $0` [选项]\n
选项
   -a          top100|top500|search                选择下载mp3的分类       
   -b          1-max                                下载开始曲目数(default 1)
   -e          1-max                                下载结束曲目数(default max)
   -g          number                        下载指定曲目(id编号)
   -m                                        交互式选择下载镜像点
   -o                                        覆盖已下载文件
   -u                                        更新 top100/top500 数据
   -U                                        更新下载镜像
   -c                                        清空 search 历史数据
   -l                                        打印音乐数据列表
   -s          [strings]                        查找歌曲
   -S          [PATH]                        自定义文件保存目录
   -p          number                        搜索文件深度 1*30
   -f                                        自定义文件名,只在交互模式下起作用
   -t     type                                指定下载文件类型:mp3 wma swf asf       
"
M=0
O=0
B=1
E=0
L=0
G=0
U=0
F=0
SEARCH=""
WORD=""
TYP=""
LYNX="/usr/bin/lynx"
WGET="/usr/bin/wget"
GET_NUM=102
NUM=1
PAGE=2
SOURCE1="http://list.mp3.baidu.com/list/newhits.html"
SOURCE2="http://list.mp3.baidu.com/topso/mp3topsong.html"
SOURCE3="http://mp3.baidu.com/m?f=ms&rn=&tn=baidump3&ct=134217728&word=WORD&submit=%B0%D9%B6%C8%CB%D1%CB%F7&lm=-1"
TEMP1="${HOME}/.Getmp3/tmp_mp3_list"
TEMP2="${HOME}/.Getmp3/tmp_mp3_list2"
TEMP3="${HOME}/.Getmp3/tmp_mp3_down"
TEMP4="${HOME}/.Getmp3/tmp_mp3_search"
SAVE1="${HOME}/mp3_new100"
SAVE2="${HOME}/mp3_top500"
SAVE3="${HOME}/mp3_search"
export LESSCHARSET=latin1
export LC_ALL=zh_CN.gbk
export LANG=zh_CN.gbk
if [ ! -d "${HOME}/.Getmp3" ];then
        mkdir -p "${HOME}/.Getmp3"
fi

while getopts a:hmuUob:e:lg:s:S:p:ft:c  OPTION;
do
        case "$OPTION" in
                a) S="$OPTARG" ;;
                s) SEARCH="$OPTARG" ;;
                h) echo -e "$USAGE2"
                   exit 0;;
                m) M=1;;
                     o) O=1;;
                     U) U=1;;
                     l) L=1;;
                     t) TYP="`echo $OPTARG|tr [:upper:] [:lower:]`"
                ;;
                     f) F=1;;
                S) if [ -d "$OPTARG" -a -w "$OPTARG" -a -x "$OPTARG" ];then
                               SAVE="$OPTARG"
                   else
                            echo -en "\\033[0;31m"
                         echo -e
                         echo "指定目录{OPTARG} 权限不正确或者该目录不存在"
                              echo -en "\\033[0;39m"
                         exit 1;
                   fi               
               
                ;;
                b)echo "${OPTARG}"|grep -qE '^[0-9]*?[0-9]*$' && B="${OPTARG}" || B=1
                ;;
                e)echo "${OPTARG}"|grep -qE '^[0-9]*?[0-9]*$' && E="${OPTARG}" || E=0
                ;;
                g)echo "${OPTARG}"|grep -qE '^[1-9]*?[0-9]*$' && G="${OPTARG}" || G=0
                ;;
                p)echo "${OPTARG}"|grep -qE '^[0-9]*?[0-9]*$' && PAGE="${OPTARG}" || PAGE=2
                ;;
                c) rm -rf  "${TEMP4}"*
                   echo -en "\\033[0;36m"
                   echo  "Search 数据清除完成"  
                   echo -en "\\033[0;39m"
                   exit 0
                ;;
                u) rm -rf  "${TEMP1}"*
                   rm -rf "${TEMP2}"*
                   rm -rf "${TEMP3}"*
                   echo -en "\\033[0;36m"
                   echo "开始下载数据"
                   while [ ! -f "${TEMP1}_top100" ]
                   do
                           $LYNX -source ${SOURCE1} >"${TEMP1}_top100"
                   done
                  
                   while [ ! -f "${TEMP1}_top500" ]
                   do
                   $LYNX -source ${SOURCE2} >"${TEMP1}_top500"
                      done
cat "${TEMP1}_top500" |grep --after-context=1 "<tr bgcolor=\"#FFFFFF\"><td width=\"20%\"><font color=\"#3333CC\">1." |\
sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr><tr>//g' -e 's/<\/tr><tr bgcolor=\"#FFFFFF\">//g'\
     -e 's/<td width=\"20%\"><font color=\"#3333CC\">[0-9]*\.<\/font><a href=\"/http:\/\/list.mp3.baidu.com\/topso\//g'\
     -e 's/\" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/<td/d'  >"${TEMP2}_top500"
     
        while [ ${GET_NUM} -gt  0 ]
        do
        cat  "${TEMP1}_top100" |grep --after-context=1 "<div align=\"center\"><font color=\"#3333CC\">${NUM}.</font>" | \
        grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
        sed -e 's/<a href="//g' -e  's/" target="_blank">/ /g'  -e 's/<\/a>*/ /g'   >> "${TEMP2}_top100"

        NUM=$((${NUM}+1))
        GET_NUM=$((${GET_NUM}-1))
        done
                   echo 数据更新完毕
                   echo -en "\\033[0;39m"
                   exit 0
                   ;;
                   \?) echo -e "$USAGE"
                     exit 1;;
        esac
done

if [ "$#" -eq 0 ] ;then
        echo -e "${USAGE}"
        exit 1
fi
case "${S}" in
        top100) SOURCE="${SOURCE1}"
                : ${SAVE:=${SAVE1}}
                ;;
        top500) SOURCE="${SOURCE2}"
                : ${SAVE:=${SAVE2}}
                ;;

        search) SOURCE="${SOURCE3}"
                : ${SAVE:=${SAVE3}}
                if [ ! -n "${SEARCH}" ];then
                        echo "-a search 参数必须附带 -s 选项"
                        echo -e
                        exit 1       
                else
                        WORD="`echo "${SEARCH}" | tr -d "\n" | xxd -i | sed -e "s/ 0x/%/g" | tr -d " ,\n"`"
                        B=1
                fi
                ;;
esac
if [ -z "$SOURCE"  ] ;then
        echo -e "${USAGE}"
        exit 1
fi
TEMP1=${TEMP1}_${S}
TEMP2=${TEMP2}_${S}
TEMP3=${TEMP3}_${S}
TEMP4=${TEMP4}_${WORD}
if [ ! -d "${SAVE}" ];then
        echo -en "\\033[0;36m"
        echo "创建目录"
        echo -en "\\033[0;39m"
        mkdir -p ${SAVE}
fi
#clear
echo -e
echo -en "\\033[0;36m"
echo "正在下载/分析数据"
echo -en "\\033[0;39m"
#rm -rf ${TEMP1}
if [ "${S}" != "search" ];then
while [ ! -f ${TEMP1} ]
do
${LYNX} -source ${SOURCE} >${TEMP1}
done
else touch ${TEMP2}
        echo "test" >${TEMP2}
fi
#rm -rf ${TEMP2}

if [ "${S}" = "top500" ]; then
while [ ! -f "${TEMP2}" ]
do
cat ${TEMP1} |grep --after-context=1 "<tr bgcolor=\"#FFFFFF\"><td width=\"20%\"><font color=\"#3333CC\">1." |\
sed -e 's/<\/a>/\n/g' -e 's/<\/td>//g' -e 's/<\/tr><tr>//g' -e 's/<\/tr><tr bgcolor=\"#FFFFFF\">//g'\
     -e 's/<td width=\"20%\"><font color=\"#3333CC\">[0-9]*\.<\/font><a href=\"/http:\/\/list.mp3.baidu.com\/topso\//g'\
     -e 's/\" target=_blank>/ /g' -e  '/^$/d'|sed  -e '/<td/d'  >${TEMP2}
done
elif   [ "${S}" = "top100" ]; then
      while [ ! -f "${TEMP2}" ]
        do
        while [ ${GET_NUM} -gt  0 ]
        do
        cat  ${TEMP1} |grep --after-context=1 "<div align=\"center\"><font color=\"#3333CC\">${NUM}.</font>" | \
        grep --after-context=1 "a href" |sed 's/^$//'| sed  -e 's/<[^>][^>]*>//' -e 's/<\/td>//' -e 's/^ *//'| \
        sed -e 's/<a href="//g' -e  's/" target="_blank">/ /g'  -e 's/<\/a>*/ /g'   >> ${TEMP2}

        NUM=$((${NUM}+1))
        GET_NUM=$((${GET_NUM}-1))
        done
     done
fi
unset NUM
: ${NUM:=${B}}
if [ "${G}"  -gt 0  ] && [  "${S}" != "search" ];then
        NUM="${G}"
        E="${G}"
fi       

while [ -n "`cat ${TEMP2} |sed  -n "${NUM}p"`" ]  
do
        if [ "${E}" -gt 0  -a "${NUM}" -gt "${E}" ] ;then
                if [ "${L}" -eq 1 -o  -n "${SEARCH}"  ]  && [ "${S}" !="search" ] ;then
                        echo -e "${LIST}" |less  
                fi       
                exit 0
        fi
        PRE=`cat ${TEMP2} |sed  -n "${NUM}p"`
        PRE=(`echo $PRE`)
        if [ "${S}" = "search" ];then
                SOURCE="`echo ${SOURCE}|sed -e "s/WORD/${WORD}/g"`"
                PRE=(`echo "${SOURCE}" "${SEARCH}"`)
                TEMP3="${TEMP4}"
        fi
  if [ -n "${PRE[0]}" -a  -n "${PRE[1]}" ];then
                if [ -n "${PRE[3]}" ] ;then
                        MP3=${PRE[3]}-${PRE[1]}
                else
                        MP3=${PRE[1]}
                fi
        MP3=`echo ${MP3} |sed  's/\//_/g'`               
        if [ "${L}" -eq 1 -o  -n "${SEARCH}"  ] && [ "${S}" != "search" ];then
                if [ -n "${SEARCH}" ];then
                        SEARCH2=` echo  "${NUM}.        ${MP3}" |grep "${SEARCH}"`
                        if [ -n "${SEARCH2}" ];then
                                LIST="${LIST}\n ${SEARCH2}"
                        fi
                        unset SEARCH2
                        NUM=$((${NUM}+1))
                        continue
                fi
                LIST="${LIST}\n ${NUM}. ${MP3}"
                NUM=$((${NUM}+1))
                continue
        fi
        if [  "${S}" = "search" ];then
        echo -en "\\033[0;36m"
        echo "正在搜索数据: ${SEARCH}"
        else       
        echo -en "\\033[0;36m"
        echo "正在处理数据 ${NUM}. ${MP3}"
        fi
       
        if [ "${U}" -eq 1 ];then
                rm -rf  "${TEMP3}_${NUM}"
        fi
        while [ ! -f "${TEMP3}_${NUM}" -o ! -s "${TEMP3}_${NUM}" ]
        do
        ${LYNX} -source "${PRE[0]}" > "${TEMP3}_${NUM}"
        PAGE_NUM=`cat ${TEMP3}_${NUM} | grep --after-context=1 "<ol><font class=p1>" | sed -e '/<br><br><font class=f9>/d' -e 's/<ol><font class=p1>//g' -e 's/<\/a>/\n/g' -e 's/<\/font>//g'|sed -e '/\[下一页\]/d'|wc -l`
        : ${PAGE_NUM:=1}
        NEXTURL=`cat  ${TEMP3}_${NUM} |grep --after-context=1 "<ol><font class=p1>" | sed -e '/<br><br><font class=f9>/d' -e 's/<ol><font class=p1>//g' -e 's/<\/a>/\n/g' -e 's/<\/font>//g' |grep "[下一页]" |sed -e 's/&nbsp\;<a href=//g' -e 's/>\[下一页\]//'`
        echo -en "\\033[0;34m"
        if [ "${PAGE_NUM}" -eq 0 ];then
                echo "没有找到数据"
                rm -rf "${TEMP3}_${NUM}"
                exit 0
        fi
        echo "正在处理第1页数据,统计大约有${PAGE_NUM}页,本次最大处理数${PAGE}页"
        cat "${TEMP3}_${NUM}" |grep --before-context=0  --after-context=1 "<td class=r1>" | \
        sed -e '/<\/script>*/d' -e '/--/d'|sed -e 's/\" target=_blank><font style=color:#e10900>/ /g' -e 's/<\/font><\/td>//g' -e 's/<\/a><br><font color=\"#999999\" class=f10>//g' -e 's/<font style=color:#e10900>[^>][^>]*<[^<]*//g' -e 's/<a href=\"//g' -e 's/ - / /g' -e 's/" target=_blank>/ /g' -e 's/<\/font>//g' > "${TEMP3}_${NUM}"
       
        #sed -e '/<\/script>*/d' -e '/--/d'| \
               #sed -e 's/<font[^>][^>].*//g' -e 's/" target=.*//g' -e 's/^.*<a href="//g' >"${TEMP3}_${NUM}"
        NUM4=2
       
        while [ "${PAGE}" -ge "${NUM4}"  -a  "${PAGE_NUM}" -gt 1 -a -n "${NEXTURL}" ]
        do
                ${LYNX} -source "${NEXTURL}" >"${TEMP3}_${NUM}_c"
                ret=$?
                if [ $ret -ne 0 ]; then
                        echo -en "\\033[0;31m"
                        echo "无法获取数据,搜索中止!"
                        echo -en "\\033[0;31m"
                        break
                fi       
               PAGE_NUM=`cat "${TEMP3}_${NUM}_c" | grep --after-context=1 "<ol><font class=p1>" | sed -e '/<br><br><font class=f9>/d' -e 's/<ol><font class=p1>//g' -e 's/<\/a>/\n/g' -e 's/<\/font>//g'|sed -e '/\[上一页\]/d'|sed -e '/\[下一页\]/d'|wc -l`
               : ${PAGE_NUM:=1}
               NEXTURL=`cat  "${TEMP3}_${NUM}_c" |grep --after-context=1 "<ol><font class=p1>" | sed -e '/<br><br><font class=f9>/d' -e 's/<ol><font class=p1>//g' -e 's/<\/a>/\n/g' -e 's/<\/font>//g'|sed -e '/\[上一页\]/d' |grep "[下一页]" |sed -e 's/&nbsp\;<a href=//g' -e 's/>\[下一页\]//'`
        echo "正在处理第${NUM4}页数据,统计大约有${PAGE_NUM}页,本次最大处理数${PAGE}页"
        cat "${TEMP3}_${NUM}_c" |grep --before-context=0  --after-context=1 "<td class=r1>" | \
        sed -e '/<\/script>*/d' -e '/--/d'|sed -e 's/\" target=_blank><font style=color:#e10900>/ /g' -e 's/<\/font><\/td>//g' -e 's/<\/a><br><font color=\"#999999\" class=f10>//g' -e 's/<font style=color:#e10900>[^>][^>]*<[^<]*//g' -e 's/<a href=\"//g' -e 's/ - / /g' -e 's/" target=_blank>/ /g' -e 's/<\/font>//g' >> "${TEMP3}_${NUM}"       
        #sed -e '/<\/script>*/d' -e '/--/d'| \
               #sed -e 's/<font[^>][^>].*//g' -e 's/" target=.*//g' -e 's/^.*<a href="//g' >>"${TEMP3}_${NUM}"
        rm -rf "${TEMP3}_${NUM}_c"
        NUM4=$((${NUM4}+1))
        done       
       
        echo -en "\\033[0;39m"
       
        echo -en "\\033[0;34m"
        echo "总共搜索到`cat "${TEMP3}"_"${NUM}" |wc -l` 个下载文件"
        done

        if [ -n "${TYP}" ]; then
        echo "正在搜索指定类型数据"
        echo -en "\\033[0;39m"
        while [ ! -f "${TEMP3}_${NUM}_${TYP}_${NUM}" -o ! -s "${TEMP3}_${NUM}_${TYP}_${NUM}" ]
        do
                NUM7=1
                while [ -n "`cat "${TEMP3}_${NUM}" | sed -n "${NUM7}p"`" ]
                do   
                  TYP2="`cat "${TEMP3}_${NUM}" | sed -n "${NUM7}p" | cut -d\  -f 1`"
                  TYP2="`basename "${TYP2}" |awk -F. '{print $2}'| tr [:upper:] [:lower:]`"
                  if [ "${TYP}" = "${TYP2}" ];then
                    cat "${TEMP3}_${NUM}" | sed -n "${NUM7}p" >> "${TEMP3}_${NUM}_${TYP}_${NUM}"
                      fi
                  unset TYP2
                NUM7=$((${NUM7}+1))       
                done                       
                break
        done
                if [ ! -f "${TEMP3}_${NUM}_${TYP}_${NUM}" -o ! -s "${TEMP3}_${NUM}_${TYP}_${NUM}" ];then
                        echo "在指定类型中没有找到任何数据,使用全部已知类型."
                else  
                        echo "在指定类型中总共搜索到`cat "${TEMP3}_${NUM}_${TYP}_${NUM}" |wc -l`个下载文件"
                        TEMP3="${TEMP3}_${NUM}_${TYP}"
                fi
        fi
       
        #交互式下载
        if [ "${M}" -eq 1 ];then
                NUM3=1
                SELECT=""
                NUM5=1
                while [ -n "`cat "${TEMP3}_${NUM}" |sed  -n "${NUM3}p"`" -a "${NUM5}" -le 20 ]
                do
                        unset P2
                                P=(`cat "${TEMP3}_${NUM}" |sed  -n "${NUM3}p"`)
                                NUM6=1
                                while [ -n "${P[$NUM6]}" ]
                                do
                                        P2="${P2}|${P[$NUM6]}"
                                        NUM6=$((${NUM6}+1))
                                done
                                SELECT="${SELECT} ${P[0]}|${P2}"
                                NUM3=$((${NUM3}+1))
                                NUM5=$((${NUM5}+1))
                if [ "${NUM5}" -le 20 -a  -n "`cat "${TEMP3}_${NUM}" |sed  -n "${NUM3}p"`" ];then
                        continue
                fi
                if [  "${NUM3}" -gt 21 ];then
                        if [ "${NUM3}" -lt 30 ];then
                                T_NUM3=1
                        else
                                T_NUM3=$((${NUM3}-20-${NUM5}+1))
                        fi
                        SELECT="${SELECT} 上一页|${T_NUM3}"
                fi
                       
                if [ "`cat "${TEMP3}_${NUM}" |wc -l`" -gt "${NUM3}" ];then
                        SELECT="${SELECT} 下一页|${NUM3}"
                fi
                clear
                echo -en "\\033[0;34m"
                echo "总共搜索到`cat "${TEMP3}"_"${NUM}" |wc -l` 个下载文件"
                echo -en "\\033[0;33m"
                echo "歌曲: ${MP3}"
                echo "请选择下载镜像"
                echo -en "\\033[0;39m"
                select COMPONENT in $SELECT
                do
                        if [ -z "${COMPONENT}" ];then
                               echo "该镜像地址不存在"       
                               echo -en "\\033[0;33m"
                               echo "请选择下载镜像 按回车继续"
                               echo -en "\\033[0;39m"
                               continue
                       else
                                DOWN=`echo "${COMPONENT}" | cut -d\| -f 1 `
                                TYPE=`basename "${DOWN}" |awk -F. '{print $2}'`
                                if [ -n "`echo "${COMPONENT}" | cut -d\| -f 4 |sed -e 's/\r//g' `" ];then
                                ATTR="(`echo "${COMPONENT}" | cut -d\| -f 4 |sed -e 's/\r//g' `)"
                                else
                                ATTR=""
                                fi
                               
                                if [ "${DOWN}" = "下一页" -o "${DOWN}" = "上一页" ];then
                                        NUM3=`echo "${COMPONENT}" | cut -d\| -f 2 `
                                        NUM5=1
                                        unset SELECT
                                               echo -en "\\033[0;33m"
                                               echo "正在跳转到${DOWN}"
                                               echo -en "\\033[0;39m"
                                        break
                                fi       
             if [ "${F}" -eq 1 ];then
                echo -en "\\033[0;33m"
                while :
                do
                 echo "请输入保存的文件名,不需要加扩展名"
                 read CMD
                  if [ -n "${CMD}" ];then
                    echo ${CMD} |grep -qE '^[^\/\~\^\&\*\@\#\$\%\|\!\?\`\.]*$' &&  break ||echo 文件名错误 && continue  
                  fi       
                done               
                echo -en "\\033[0;33m"
              fi
                                echo -en "\\033[0;36m"
                                echo "开始从镜像站点${REPLY}下载载歌曲 ${NUM}.  ${MP3}"
                                echo -en "\\033[0;33m"
                                MP3=${CMD:=${MP3}}
                                echo "文件保存在${SAVE}"
                                echo -en "\\033[0;39m"
                                if [ "${O}" -eq 1 ];then
                                      rm -rf "${SAVE}/${MP3}${ATTR}.${TYPE}"
                                      fi                                                               
                        fi
                                                                                               
                                if [ -f "${SAVE}/${MP3}${ATTR}.${TYPE}" ];then
                                        echo -en "\\033[0;31m"
                                        echo "文件: ${SAVE}/${MP3}${ATTR}.${TYPE} 已存在,下载中止"
                                        echo -e
                                        echo -en "\\033[0;39m"
                                        unset  TYPE DOWN
                                        break
                                fi

                                echo $ATTR
                                ${WGET} -t 1 -N  -O "${SAVE}/${MP3}${ATTR}.${TYPE}"  ${DOWN}       
                                ret=$?
                                if [ $ret -eq 0 ]; then
                                        if [ "`file -b "$SAVE/${MP3}${ATTR}.${TYPE}"`" = "empty" ] || \
                                           [  "`file -b "$SAVE/${MP3}${ATTR}.${TYPE}"`" = "HTML document text" ];then
                                        rm -rf ${SAVE}/${MP3}${ATTR}.${TYPE}
                                        echo -en "\\033[0;31m"
                                        echo "下载失败!"
                                        echo -e
                                        echo -en "\\033[0;39m"
                                               echo -en "\\033[0;33m"
                                               echo "请选择下载镜像 按回车继续"
                                               echo -en "\\033[0;39m"
                                        unset TYPE DOWN
                                        continue
                                        fi
                                        break
                                else
                                        rm -rf ${SAVE}/${MP3}${ATTR}.${TYPE}
                                        echo -en "\\033[0;31m"
                                        echo "下载失败!"
                                        echo -e
                                        echo -en "\\033[0;39m"
                                               echo -en "\\033[0;33m"
                                               echo "请选择下载镜像 按回车继续"
                                               echo -en "\\033[0;39m"
                                        unset TYPE DOWN
                                        continue
                                fi
                       
                done
        done
        else                      
        NUM2=1       
        while [ -n "`cat "${TEMP3}_${NUM}" |sed  -n "${NUM2}p"`" ]
        do                       
                URL=`cat "${TEMP3}_${NUM}"|sed  -n "${NUM2}p"| cut -d\  -f 1`
                TYPE=`basename "${URL}" |awk -F. '{print $2}'`
                echo -en "\\033[0;34m"
                echo "总共搜索到`cat "${TEMP3}"_"${NUM}" |wc -l` 个下载文件"
                echo -en "\\033[0;36m"
                echo "开始下载歌曲 ${NUM}.  ${MP3}"       
                echo -en "\\033[0;33m"
                echo "文件保存在: ${SAVE}"
                echo -en "\\033[0;39m"
                if [ "${O}" -eq 1 ];then
                        rm -rf "${SAVE}/${MP3}.${TYPE}"
                fi
                if [ -f "${SAVE}/${MP3}.${TYPE}" ];then
                        echo -en "\\033[0;31m"
                        echo "文件: ${SAVE}/${MP3}.${TYPE} 已存在,下载中止"
                        echo -e
                        echo -en "\\033[0;39m"
                        unset URL TYPE
                        break
                fi
                ${WGET} -t 1 -N  -O ${SAVE}/${MP3}.${TYPE} ${URL}       
                ret=$?
                if [ $ret -eq 0 ]; then
                        unset URL TYPE
                        break
                else
                        rm -rf ${SAVE}/${MP3}.${TYPE}
                        echo -en "\\033[0;31m"
                        echo "下载失败!"
                        echo -e
                        echo -en "\\033[0;39m"
                        unset URL TYPE
                fi
                 NUM2=$((${NUM2}+1))
         done
                  fi
                               
        fi
        NUM=$((${NUM}+1))
        unset PRE MP3
done       
if [ "${L}" -eq 1 -o -n "${SEARCH}" ] && [ "${S}" != "search" ];then
        echo -e "${LIST}" |less
fi[/PHP]
回复 支持 反对

使用道具 举报

发表于 2005-7-23 10:47:34 | 显示全部楼层
好东东啊, 可惜没有时间学习了。
回复 支持 反对

使用道具 举报

发表于 2005-7-23 13:36:56 | 显示全部楼层
Post by fanxianbing
请解释一下 ${1##*.} 和  ${TEMP##*.}  :help


字符匹配
#:从左边开始取最小匹配并删除
##:从左边开始取最大匹配并删除
例:
i=/home/abc/def
则:
${i#/}后i的值为:/abc/def
${i##/}后i的值为:def

%和%%同上,只不过是从右边开始匹配
回复 支持 反对

使用道具 举报

发表于 2005-8-4 10:32:11 | 显示全部楼层

一个关于安全的简单脚本。检查非root,但UID和GID为0的用户。


  1. #!/bin/bash
  2. #
  3. ####################################################
  4. # Purpose: check ! root
  5. # Author: Kook.liu , E-Mail ( qsblj AT yahoo DOT com)
  6. # Date: 2005/08/04
  7. ####################################################
  8. #
  9. ####################################################
  10. for id in $(awk -F: '{ if($3 == 0 && $1 != "root") print $1 }' /etc/passwd)
  11. do
  12.         mail -s "Root Access Alert" [email]root@minix.com[/email] << EOF
  13. *********************************************
  14. *ALERT! Longin ID $(echo ${id}) has uid 0
  15. *$(date "+Dectected on Date:%Y%m%d Time:%r")
  16. *********************************************
  17. EOF
  18. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-8-15 11:26:47 | 显示全部楼层

本人写的一个可以从文件中读取特定行的一个脚本,欢迎指教

#!/bin/sh
#set -x
if [ "$#" -lt 1 ];then
        echo "Usage $0 [file] "
        exit 1
fi
echo  "Enter the line you want to choose from:"
read FromLine
echo  "Enter the line you want to choose to:"
read ToLine

rm -rf temp.txt
Line=`echo "$ToLine-$FromLine" | bc`

x=0
exec < $i        # opens the file you want choose the line from
while read line  # read from the file
do
if [ $x -lt $Line ];then
        printf "%s\n" "$line" >>temp.txt
        x=`expr $x + 1`
else
        echo "DONE"
        exit 1
fi
done

#set +x
回复 支持 反对

使用道具 举报

发表于 2005-8-17 15:05:33 | 显示全部楼层
..头看晕  扔筛子来决定看第几页第几个吧~~~!
回复 支持 反对

使用道具 举报

发表于 2005-8-17 17:08:46 | 显示全部楼层

大家来丢硬币阿!!我写的一个丢硬币的脚本

#!/bin/bash


MAXTHROWS=$1
HEADS=0
TAILS=0
throw=0

print_result(){
echo  the HEADS = $HEADS
echo  the TAILS = $TAILS
echo
}

update_count(){
case $1 in
        0)let " HEADS += 1";;
        1)let " TAILS += 1" ;;
esac
}

echo

while [ "$throw" -lt "$MAXTHROWS" ]
do
  let "coin = $RANDOM % 2 "
  update_count $coin
  let "throw += 1"
done

print_result
回复 支持 反对

使用道具 举报

发表于 2005-8-31 09:25:17 | 显示全部楼层
将一个大文件分割成N个小文件
命令格式:
./split filename N dest_path

  1. #!/bin/sh

  2. #
  3. # home_king@163.com
  4. #

  5. do_help()
  6. {
  7.     echo "syntax:"
  8.     echo "split <orig_file> <split_num> <dest_path>"
  9. }

  10. orig_file=$1
  11. split_num=${2:-2}
  12. dest_path=${3:-.}

  13. if ! ( [ -f "$orig_file" ] &&
  14. [ -r "$orig_file" ] && [ -s "$orig_file" ] ); then
  15.     echo "file $orig_file is invalid."
  16.     do_help
  17.     exit 1
  18. fi

  19. if ! [ $split_num -gt 1 ]; then
  20.     echo "split_num is invalid."
  21.     do_help
  22.     exit 1
  23. fi

  24. if ! ( [ -d $dest_path ] && [ -x $dest_path ] );then
  25.     echo "dest_path is invalid."
  26.     do_help
  27.     exit 1
  28. fi

  29. size=$(ls -l $orig_file | awk '{print $5}')
  30. split_size_avr=$(($size/$split_num))
  31. bs=1

  32. if [ $size -gt $((1024*1024)) ]; then
  33.     bs=1024
  34.     split_size_avr=$(($split_size_avr/1024))
  35. fi

  36. for i in $(seq $split_num);do
  37.     if [ $i -eq 1 ]; then
  38.         dd if=$orig_file \
  39. of=$dest_path/${orig_file}.$i bs=$bs count=$split_size_avr
  40.     elif [ $i -eq  $split_num ];then
  41.         dd if=$orig_file \
  42. of=$dest_path/${orig_file}.$i bs=$bs \
  43. skip=$(($split_size_avr*$(($i-1)))) \
  44. count=$(( $size - $(($split_size_avr*$(($i-1)))) ))
  45.     else
  46.         dd if=$orig_file \
  47. of=$dest_path/${orig_file}.$i bs=$bs \
  48. skip=$(($split_size_avr*$(($i-1)))) \
  49. count=$split_size_avr

  50.     fi
  51. done
复制代码


合并N个小文件为一个大文件:

  1. cat $(ls |grep -E 'filename\.') > filename
复制代码
回复 支持 反对

使用道具 举报

发表于 2005-10-8 22:22:48 | 显示全部楼层
哈哈,我相信我有一天也能掌握的.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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