首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用select语句在bash脚本中重复处理

使用select语句在bash脚本中重复处理
EN

Stack Overflow用户
提问于 2015-10-08 18:48:07
回答 1查看 111关注 0票数 1

我非常接近完成我的任务,但我对其中一个部分有点困惑。

我得到的是:

代码语言:javascript
运行
复制
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,它需要排序、保存和存储、漂洗和重复)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 18:57:50

您的for循环只循环一次(理想情况下),因为$1只应该是一个单词(并且应该引用"$1",以确保正确地使用给定的值)。

所以你可能不需要它。

如果您试图将支持多个参数传递给脚本,那么您需要for file in "$@" (或者仅仅是for file,这是一回事),但是这并不能很好地适用于脚本操作的其余部分,在我看来是这样的。

鉴于以上所述,为了获得实际效果,您需要将循环体放在一个while truewhile :循环中,并在这些顶层行中使用$LINK而不是$1

代码语言:javascript
运行
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33023659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档