我非常接近完成我的任务,但我对其中一个部分有点困惑。
我得到的是:
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文件,然后将该html文件与grep进行排序,sed只取出"http://..."“,然后将该文件放入一个存储在一个名为bcache的目录中。
select语句打印出所有"http://...“,其前面都有数字,最后一个选项是q_to_quit。
当某人输入一个数字时,我想不出如何重复第3行到第7行的过程(这个数字对应于一个url,它需要排序、保存和存储、漂洗和重复)。
发布于 2015-10-08 18:57:50
您的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上发表的评论一样,您不应该使用for。
https://stackoverflow.com/questions/33023659
复制相似问题