2017-06-07 5 views
0

I 4 Listen von Variablen wie diese haben:Prozess mehrere Variablen in bash Schleife

YEAR1="2008 2008 2009" 
YEAR2="2008 2009 2009" 
MONTH1="11 12 01" 
MONTH2="12 01 02" 

Ich möchte sie Rohr zu einem Python-Skript in einer Weise durch, dass die ersten Elemente aus allen 4 Listen eingegeben zuerst, dann die zweiten Artikel aus jeder Liste und so weiter. Ich glaube, ich brauche dafür eine WHILE-Schleife, aber meine funktioniert nicht. Ich bekomme auch keine Fehlermeldung.

while read $YEAR1 $YEAR2 $MONTH1 $MONTH2;do 
    python python-code.py "$YEAR1" "$MONTH1" "$YEAR2" "$MONTH2" 
done 

Mein Python-Skript wird getestet und funktioniert, ich bin einfach nicht mein Kopf immer um Bash Scripting.

Antwort

3

Verwenden Arrays statt:

#! /bin/bash 
YEAR1=(2008 2008 2009) 
YEAR2=(2008 2009 2009) 
MONTH1=(11 12 01) 
MONTH2=(12 01 02) 

for ((i=0 ; i < ${#YEAR1[@]} ; ++i)) ; do 
    python python-code.py ${YEAR1[i]} ${YEAR2[i]} ${MONTH1[i]} ${MONTH2[i]} 
done 
0

Hier ist eine andere Lösung ist, die mit einer beliebigen Anzahl von Spalten/Felder funktioniert ...

# Any number of values works 
YEAR1="2008 2008 2009 2010 2011" 
YEAR2="2008 2009 2009 2011 20012" 
MONTH1="11 12 01 09 03" 
MONTH2="12 01 02 06 07" 


NUM_COLS=5 

for i in $(seq 1 $NUM_COLS) # iterate each column/field 
do 
    # Dynamically set field specifiers y1, y2, m1, m2 
    y1=$i y2=$((i+NUM_COLS)) m1=$((i+NUM_COLS*2)) m2=$((i+NUM_COLS*3)) 

    # Select the 4 fields, passing in concatenated data on one line 
    cut -d ' ' -f $y1,$y2,$m1,$m2 <<< "${YEAR1} ${YEAR2} ${MONTH1} ${MONTH2}" 
done 
Verwandte Themen