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 $uidMon 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
50001La ligne en question vaut normalement:
# grep 50001 /etc/passwd
SKTW8471:x:50001:50001:test comment:/common/OS:/bin/bashje 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 $? ?
#!/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 $? ?
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 $? ?
Pas besoin. Il suffit qu'il vire ses crochets et ses quotes pour que tout rentre dans l'ordre, à première vue.
[ Répondre ]