2010-09-15 13 views
1

Je suis nouveau dans unix. Je dois écrire un script shell qui lit un fichier ligne par ligne et le stocke dans une variable séparée. mon fichier texte contient plusieurs chemins source et un chemin de destination. quelque chose comme ceci ::comment lire le fichier ligne par ligne dans un script shell et stocker chaque ligne dans une variable

source_path=abc/xyz 
source_path=pqr/abc 
desination_path=abcd/mlk 

nombre de chemin source peut varier. Je n'ai pas beaucoup d'expérience pratique sous Unix. Quelqu'un peut-il m'aider à atteindre celui-ci. Ce sera très utile.

Merci à l'avance

+0

Vous vous voulez stocker tous soure_paths dans une variable disent séparés par deux points? – codaddict

+0

non non, je veux stocker chaque chemin dans une variable distincte – MAS1

Répondre

4
sourcePaths=($(grep source_path myfile |cut -d= -f2)) 
destPath=`grep destination_path myfile |cut -d= -f2` 

$sourcePaths est un tableau de source_path s. Vous n'avez pas besoin de stocker chaque source_path dans une variable distincte.

Vous pouvez faire une boucle sur la matrice et faire ce que vous voulez avec source_path. Par exemple:

for i in "${sourcePaths[@]}" 
do 
    echo $i 
done 
1

Un peu hacky mais cela devrait fonctionner:

old_IFS="$IFS" 
IFS="=" 

while read left right ; do 
    echo "Left side: $left" 
    echo "Right side: $right" 
done < $input_file 

IFS="$old_IFS" 

Si vous voulez vous débarrasser de la " dans $right, vous pourriez faire quelque chose comme right_content=$(sed 's|"\(.*\)"|\1|' <<<$right). Le <<<$right est presque comme faire echo $right, et la commande sed supprimera " (si aucun guillemet n'est présent, la chaîne sera simplement transmise telle quelle).

+0

: merci, mais pensez-vous que cela fonctionnera vraiment pour plusieurs chemin source et le stocker dans une variable différente – MAS1

+0

: il n'est pas nécessaire que source_path contiendra "". – MAS1

0
#!/bin/sh 
#path to config file 
CONFIG_FILE=/tmp/conf.log 
#check if file exist 
if [[ -f $CONFIG_FILE ]]; then 
#use source filename or .file name 
    . $CONFIG_FILE 
#test variable 
echo "source is $source" 
echo "dest is $dest" 
fi 
Questions connexes