2012-10-05 4 views
1

Je suis nouveau à la programmation Shell Script. J'essaye de faire un programme que les sorties ne rend que les arguments bizarres. Par exemple, "Je suis un robot" ne devrait donner que "je". Je pensais que je pourrais utiliser la commande shift pour traverser les arguments avec while et if, mais je ne sais pas comment transmettre une division par 2 avec un reste de 1 entre crochets dans l'instruction if ([ ])Sortie Shell Script impair

#!/bin/sh 
X=$1 
shift 
while [ $# -gt 0 ]; do 
    if [ "HELP HERE" ]; then 
    X=$1 
    echo $X 
    fi 
    shift 
done 
echo $X 

Répondre

3

Pourquoi ne pas changer deux fois?

while [ $# -gt 0 ]; do 
    X=$1 
    echo $X 
    shift 
    shift 
done 
+0

Merci beaucoup, qui est une bien meilleure idée –

+0

Ce serait mieux écrit que 'changement 2'. –

+0

@CharlesDuffy: Ça ne marche * pas *. 'shift 2' ne changera rien si' $ # <2', et donc si un nombre impair d'arguments est fourni, il sera * loop forever *. – nneonneo

0

idée de nneonneo doit être mieux que ce qui suit, mais je vais présenter d'une manière qui vérifie si l'argument est étrange au cas où.

#!/bin/sh 
cnt=1 
while [ $# -gt 0 ]; do 
    X=$1 

    # output the current argument when the counter is odd. 
    if [ $(($cnt%2)) -eq 1 ]; then 
    echo $X 
    fi 

    cnt=$(($cnt+1)) 
    shift 
done 
0
#!/bin/bash 

declare -a ODD 
declare -a EVEN 
ODDIX=0 
EVENIX=0 

while [ $# -ne 0 ]; do 
    if (($#%2 == 1));then 
     ODD[$ODDIX]=$1 
     ODDIX=$((ODDIX+1)) 
    else   
     EVEN[$EVENIX]=$1 
     EVENIX=$((EVENIX+1)) 
    fi 
    shift 
done 

echo ODD: ${ODD[@]} 
echo EVEN: ${EVEN[@]}*