2017-07-24 1 views
1

Wenn ich eine Textdatei inventory.txt dass genannt haben sieht wie folgt aus:Wie kann ich Zeilen aus einer Textdatei als Argument einer Schleife

america 
mexico 
england 

Wenn ich diesen Code ausführen, ist es nur durch läuft einmal für 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 

Wie kann ich dies tue für alle Zeilen in meiner Textdatei?

+0

Ihre äußere Schleife 3 Iterationen durch. Aber die innere Schleife wird nur während der ersten ausgeführt. –

+0

Es scheint wirklich seltsam zu sein, die 'while getops'-Schleife mehr als einmal auszuführen, aber wenn du das wirklich tun willst, kannst du OPTIND = 1 ganz oben in der äußeren Schleife setzen. –

Antwort

1

die Parameter zuerst Parse, dann anschließend die Dateien durchlaufen:

läuft
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 
Verwandte Themen