sh/bash/dash/ksh/zsh等Shell脚本
-
yonsan
- 帖子: 887
- 注册时间: 2005-07-01 18:56
- 来自: 广州市
#31
帖子
由 yonsan » 2005-08-30 16:05

汗 !发现一个bug, 歌名中有空格出现删除不了,将歌名中的所有空格都用下划线代替解决了.
代码: 全选
#******************************************************************************
# FIXME: 在脚本中用rm不能删除文件名中带空格的文件。
# TODO : 在以下语句中添加 sed 's/ /_/g' 可以解决。
#将文件名中的空格换成_(即Baby ,Baby tell me-王心凌改为Baby_,Baby_tell_me-王心凌)
#******************************************************************************
name=$(echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' | sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | [color=red]sed 's/ /_/g'[/color] | cat);
-
oneleaf
- 论坛管理员
- 帖子: 10455
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
#32
帖子
由 oneleaf » 2005-08-30 16:55
文件名加上 "" 就可以了。
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
-
Jeff W
- 帖子: 18
- 注册时间: 2005-04-22 23:27
#33
帖子
由 Jeff W » 2005-08-31 21:09
/tmp里面的临时文件有必要加上用户名吧。不然不同用户的就搞混了
-
firehare
- 帖子: 2625
- 注册时间: 2005-04-10 16:54
- 来自: 温州大学
-
联系:
#34
帖子
由 firehare » 2005-09-13 13:43
一叶兄,在运行脚本时,如果所有MP3都已经被下载时,会有以下提示出现:
rm: 无法删除‘/tmp/down.html’: 没有那个文件或目录
rm: 无法删除‘/tmp/down.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_size_sort.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/temp.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_mp3.txt’: 没有那个文件或目录
rm: 无法删除‘/tmp/down_wma.txt’: 没有那个文件或目录
是否应加上相应的判断语句?
我心无畏,源自于我心无知。

-
oneleaf
- 论坛管理员
- 帖子: 10455
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
#35
帖子
由 oneleaf » 2005-09-13 13:47
呵呵,早就修改了,你重新试试脚本。
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
-
firehare
- 帖子: 2625
- 注册时间: 2005-04-10 16:54
- 来自: 温州大学
-
联系:
#36
帖子
由 firehare » 2005-09-13 23:12
O!
呵呵!OK!
我心无畏,源自于我心无知。

-
firehare
- 帖子: 2625
- 注册时间: 2005-04-10 16:54
- 来自: 温州大学
-
联系:
#37
帖子
由 firehare » 2005-09-13 23:29
代码: 全选
./dlmp3: command substitution: line 77: unexpected EOF while looking for matching `''
./dlmp3: command substitution: line 78: syntax error: unexpected end of file
发现 下载过,忽略,继续下一首。
不知是否正常?
我心无畏,源自于我心无知。

-
oneleaf
- 论坛管理员
- 帖子: 10455
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
#38
帖子
由 oneleaf » 2005-09-13 23:56
能不能贴出你的77和78行看看?
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
-
yonsan
- 帖子: 887
- 注册时间: 2005-07-01 18:56
- 来自: 广州市
#39
帖子
由 yonsan » 2005-09-14 1:05
oneleaf 写了:
代码: 全选
name=`echo $mpline | sed -e 's/.*_blank">//g' | sed -e 's/.*_blank>//g' |\
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | [color=red]sed -e 's/"/\'/g'[/color] | cat`
#检查是否已经下载过这首歌,如果下载过,放弃
以上的第76 77 78行! 请看加了红色的部分
-
oneleaf
- 论坛管理员
- 帖子: 10455
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
#40
帖子
由 oneleaf » 2005-09-14 8:33
我这个语法是将 " 替换为 ‘ 也应该没有多大问题啊
当净其意如虚空,远离妄想及诸取,令心所向皆无碍
-
yonsan
- 帖子: 887
- 注册时间: 2005-07-01 18:56
- 来自: 广州市
#41
帖子
由 yonsan » 2005-09-14 9:17
上次由
yonsan 在 2005-09-14 16:28,总共编辑 1 次。
-
firehare
- 帖子: 2625
- 注册时间: 2005-04-10 16:54
- 来自: 温州大学
-
联系:
#42
帖子
由 firehare » 2005-09-14 16:20
oneleaf 写了:能不能贴出你的77和78行看看?
代码: 全选
sed -e 's/<\/a>//g' | sed -e 's/\//-/g' | sed -e 's/:/-/g' | sed -e 's/"/\'/g' | cat`
's/"/\' ??
我心无畏,源自于我心无知。

-
yonsan
- 帖子: 887
- 注册时间: 2005-07-01 18:56
- 来自: 广州市
#43
帖子
由 yonsan » 2005-09-16 8:38
oneleaf 写了:
代码: 全选
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
[color=red] else
rm "${TMP}/${name}.mp3";
((j++))
fi
else
((j++))[/color]
fi
done
一叶, 将以上这一部分修改成以下形式,如何?
代码: 全选
# 优先下载mp3格式的歌曲
while((j<=downline_mp3)); do
mp3=`awk 'NR=='"$j"'' ${TMP}/down_mp3.txt`
echo -e "\e[1;6m\e[1;31m正在下载${name}.mp3\e[1;6m\e[00m"
wget -c --tries=$TRYCOUNT $mp3 -O "${TMP}/${name}.mp3"
if [ "$?" = 0 ]; then
if [ `file -ib "${TMP}/${name}.mp3" | sed -e 's/\/.*//g'` = "audio" ]; then
mv "${TMP}/${name}.mp3" "${SAVE}/${name}.mp3"
downed=1;
break;
[color=red] fi
else
echo -e "\e[1;6m\e[1;31m下载 ${name}.mp3 文件无效,正在删除重新下载\e[1;6m\e[00m"
rm "${TMP}/${name}.mp3";
((j++))[/color]
fi
done
上次由
yonsan 在 2005-09-16 9:22,总共编辑 1 次。
-
oneleaf
- 论坛管理员
- 帖子: 10455
- 注册时间: 2005-03-27 0:06
- 系统: Ubuntu 12.04
#44
帖子
由 oneleaf » 2005-09-16 8:50
这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。
-
yonsan
- 帖子: 887
- 注册时间: 2005-07-01 18:56
- 来自: 广州市
#45
帖子
由 yonsan » 2005-09-16 10:48
oneleaf 写了:这样修改有个逻辑问题。如果下载成功但检查出来不是mp3的文件,会陷入死循环。不过已经按照你的思路修改完毕。

测试发现确实如你所说, 我的文件修改成以下形式了! 一叶,帮忙看看还可能出现其它问题没? 测试过程还算通过,但最怕就是逻辑错误!
代码: 全选
#优先下载mp3格式的歌曲
while((j<=downline_mp3));
do
mp3=$(awk 'NR=='"$j"'' ${SAVE}/down_mp3.txt);
echo -e "\e[1;6m\e[1;34m正在下载${name}.mp3 ... \e[1;6m\e[00m";
#如果文件已经存在则略过,不会覆盖已经存在的文件
wget --no-clobber --no-directories --timeout=${TIMEOUT} --tries=${TRYCOUNT} $mp3 -O "${SAVE}/${name}.mp3";
#若$?不等于0,则下载失败.
if [ "$?" -ne 0 ];
then
echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
rm -Rfv "${SAVE}/${name}.mp3";
fi
#歌曲下载完毕标记
downed=1;
#如果下载文件是有效的mp3则转向下载其它歌
if [ $(file -ib "${SAVE}/${name}.mp3" | sed -e 's/\/.*//g') = "audio" ];
then
echo -e "\e[1;6m\e[1;31m检测 ${name}.mp3 文件有效,转向下载其它歌曲...\e[1;6m\e[00m";
break;
else
echo -e "\e[1;6m\e[1;31m发现 ${name}.mp3 文件无效,正在删除重新下载...\e[1;6m\e[00m";
rm -Rfv "${SAVE}/${name}.mp3";
#使用同一首歌的下一个有效地址重新下载
((j++));
downed=0
fi
done