我非常接近完成我的任务,但我有点难过一部分。
这是我得到的:
for file in $1
do
wget "$1" -O "output-$1.html" -q
cat output-$1.html | grep -o '<a .*href=.*>' |
sed -e 's/<a /\n<a /g' |
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d' |
grep 'http' > ~/bcache/$1.bcache
select LINK in `cat ~/bcache/$1.bcache` "q_to_quit"
do
if [ $LINK = "q_to_quit" ]
then
exit 1
else
repeat lines 3-7
fi
done
第3-7行获取一个url并输出到一个html文件,然后使用grep和sed对该html文件进行排序,只取出“http:// ...”,然后将其放入文件中它存储在一个名为bcache的目录中。
select语句打印出所有带有前面数字的“http:// ...”,最后一个选项是q_to_quit。
一旦有人输入一个数字(相当于一个需要分类,保存,存储,冲洗和重复的网址),我无法弄清楚如何重复第3到第7行的过程。
答案 0 :(得分:2)
您的for
循环只会循环一次(理想情况下),因为$1
应该只是一个单词(并且应该引用"$1"
),以确保无论您给出的是什么值使用正确)。
所以你可能不需要它。
如果您尝试将支持多个参数传递给脚本,那么您需要for file in "$@"
(或只是for file
这是相同的事情)但这并不是很有效其余的脚本操作在我看来。
鉴于上述要获得效果,您实际上希望将循环体放在while true
或while :
循环中,并在这些顶行而不是$LINK
中使用$1
LINK=$1
while :; do
wget "$LINK" -O "output-$LINK.html" -q
cat "output-$LINK.html" | grep -o '<a .*href=.*>' |
sed -e 's/<a /\n<a /g' |
sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d' |
grep 'http' > ~/bcache/"$LINK.bcache"
select LINK in `cat ~/bcache/"$LINK.bcache"` "q_to_quit"
do
if [ $LINK = "q_to_quit" ]
then
exit 1
else
break
fi
done
done
另外,由于我刚刚对OP发表评论,你不应该Read Lines With for
。