【问题标题】:How can I take lines from a text file as an argument using a loop如何使用循环将文本文件中的行作为参数
【发布时间】:2017-12-30 13:43:54
【问题描述】:

如果我有一个名为 inventory.txt 的文本文件,如下所示:

america 
mexico 
england

如果我运行这段代码,它只会运行一次 america

 while read line;
    do 
        while getopts "U:D:" opt;
        do
            case $opt in
                U)
                    SOURCE=$OPTARG
                    echo "SOURCE : $SOURCE"     
                    SITEID=$line
                    echo "SITE : $SITEID " >&2
                    ;;

                D)
                    DEST=$OPTARG
                    echo "DESTINATION : $DEST" >&2  
                    ;; 
            esac

        done

done < inventory.txt

如何对文本文件中的所有行执行此操作?

【问题讨论】:

  • 您的外循环运行了 3 次迭代。但是内部循环只在第一个循环中执行。
  • 多次运行while getops 循环似乎很奇怪,但如果你真的想这样做,你可以在外循环的顶部设置 OPTIND=1。

标签: bash shell loops sh getopts


【解决方案1】:

先解析参数,然后再浏览你的文件:

while getopts "U:D:" opt;
do
    case $opt in
        U)
            SOURCE=$OPTARG
            ;;

        D)
            DEST=$OPTARG
            ;; 
    esac
done


while read line;
do 
    echo "SOURCE : $SOURCE"     
    SITEID=$line
    echo "SITE : $SITEID " >&2
    echo "DESTINATION : $DEST" >&2  
done < inventory.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    相关资源
    最近更新 更多