Forum Programmation.shell une erreur sur while [ `grep $uid /etc/passwd` ]

Posté par  .
Étiquettes : aucune
0
12
juin
2007
Hello tout le monde,

Je fais un script shell dont voici un bout qui vaut valeur de test, car ma boucle plante :

#!/bin/sh

uid=50001

while [ `grep $uid /etc/passwd` ]
do
uid=`expr $uid + 1`
done

echo $uid


Mon but est donc simplement de déterminer si l'uid 50001 existe dans le /etc/passwd, et d'incrémenter cette valeur si la réponse est oui.

le seul problème c'est que ça plante si l'enregistrement qui contient cette valeur a un champ commentaire avec des espaces.

Exemple de l'erreur:

./test.sh: line 5: [: SKTW8471:x:50001:50001:test: unary operator expected
50001


La ligne en question vaut normalement:
# grep 50001 /etc/passwd
SKTW8471:x:50001:50001:test comment:/common/OS:/bin/bash


je n'arrive pas trop à voir comment régler le problème alors si quelqu'un avait une idée ... merci !
  • # et $? ?

    Posté par  . Évalué à 1.

    #!/bin/sh

    uid=500

    grep $uid /etc/passwd > /dev/null
    while [ $? -eq 0 ]
    do
    uid=`expr $uid + 1`
    grep $uid /etc/passwd > /dev/null
    done

    echo $uid
    • [^] # Re: et $? ?

      Posté par  . Évalué à 1.

      Super ! Merci !
      je ne suis pas encore très bon en script shell ... je n'ai donc pas encore bon nombre de réflexes qu'il faudrait que j'ai ... mais ça viendra ! :)
    • [^] # Re: et $? ?

      Posté par  . Évalué à 2.

      Pas besoin. Il suffit qu'il vire ses crochets et ses quotes pour que tout rentre dans l'ordre, à première vue.
  • # Manque les "

    Posté par  (site web personnel) . Évalué à 3.

    Rajoute des " autour de ton grep et ça devrait être ok !

    while [ "`grep $uid /etc/passwd`" ]

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.