2017-07-24 2 views
1

Si j'ai un fichier texte appelé inventory.txt qui ressemble à ceci:Comment puis-je prendre des lignes à partir d'un fichier texte comme un argument en utilisant une boucle

america 
mexico 
england 

Si je lance ce code, il ne fonctionne que par une fois pour 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 

Comment puis-je faire pour toutes les lignes dans mon fichier texte?

+0

Votre boucle externe passe par 3 itérations. Mais la boucle interne n'est exécutée que pendant la première. –

+0

Il semble vraiment étrange d'exécuter la boucle 'while while 'plus d'une fois, mais si vous voulez vraiment faire cela, vous pouvez simplement définir OPTIND = 1 en haut de la boucle externe. –

Répondre

1

Parse les paramètres d'abord, puis passez ensuite par votre fichier:

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