2009-11-28 6 views
0

Quelle serait la meilleure approche pour traiter un appel comme celui-ci dans mon script shell?Comment traiter quelque chose comme ça dans un shell Unix?

./cars Mazda Toyota 2010 Honda BMW VW 2009 

Alors qu'il imprime sur:

Mazda 2010

Toyota 2010

Honda 2009

BMW 2009

VW 2009

Je ne peux pas utiliser de tableaux car c'est la version la plus simple du shell, donc elle ne les supporte pas. Des idées?

+0

qui est le plus rapide pour écrire un script Python pour cela? – jldupont

+0

J'essaie d'écrire ceci dans un shell Unix pas Python – goe

Répondre

2
#!/bin/sh 

CARS= 

while [ $# -gt 0 ]; do 
    # Cheesy way to test if $1 is a year. 
    if [ "$1" -gt 0 ] 2> /dev/null; then 
     YEAR=$1 

     for CAR in $CARS; do 
      echo $CAR $YEAR 
     done 

     CARS= 
    else 
     # Add car to list 
     CARS="$CARS $1" 
    fi 

    # Process the next command-line argument. 
    shift 
done 
+0

Bonne réponse. Clair et facile à lire. – hlovdal

0
#!/bin/sh 
for i in "[email protected]"; do 
    case x"$i" in x[0-9]*) 
     for j in $justCars; do 
      echo $j $i 
     done 
     justCars= 
     continue 
     ;; 
    esac 
    justCars="$justCars $i" 
done 
0

vous pouvez utiliser gawk pour les tableaux

args="[email protected]" 
echo $args | tr " " "\n" | awk 'BEGIN{d=1} 
/^[0-9]+/{ 
    for(i=1;i<=e;i++){ print a[i],$0 } 
    delete a 
    e=0 
} 
!/^[0-9]+/{ a[++e]=$0}' 

sortie

# ./shell.sh Mazda Toyota 2010 Honda BMW VW 2009 
Mazda 2010 
Toyota 2010 
Honda 2009 
BMW 2009 
VW 2009 
Questions connexes