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

Posté par Cédric Hammer (page perso, ) le 12 juin 2007
0
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 !

> Lire le message (4 commentaires, moyenne: 1,8).  

Vous avez demandé le commentaire #840898.

et $? ?

Posté par Val1472 () le 12/06/2007 à 13:55. (lien). É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

[ Répondre ]

  • [^]Re: et $? ?

    Posté par Cédric Hammer (page perso, ) le 12/06/2007 à 14:37. (lien). É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 ! :)

    [ Répondre ]

    [^]Re: et $? ?

    Posté par Obsidian () le 12/06/2007 à 14:44. (lien). Évalué à 2.

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

    [ Répondre ]