Louable initiative. La question relève plutôt du forum « Programmation » à mon avis, elle n’est pas propre à Debian.
La syntaxe du shell est quelque fois contre intuitive. En particulier, si vous voulez tester le code retour d’une commande vous ne pouvez pas écrire directement if commande paramètre, vous êtes obligé de lacer la commande et de traiter le code retour
soit explicitement
grep romain /etc/apsswd
rc=$?
if [ $rc -eq 0 ] # notez la fonction test avec les crochets
then echo oui
else echo non
fi
soit avec un raccourci
grep romain /etc/passwd && echo oui || echo non
Mais ce n’est pas tout. La sortie de la commande va apparaître dans la sortie du script et perturber ladite sortie.
D’autre part, l’utilisateur romain peut avoir un compte sur le système sans avoir une entrée dans le fichier /etc/passwd mais dans un autre mécanisme NSS comme NIS ou LDAP. La commande à utiliser est getent.
Nous arrivons à
res=$(getent passwd romain) && echo oui || echo non
En résumé
Trouver la bonne commande
Se méfier des tests avec crochets (subtilité -z -n … -eq == ) et préférer les opérateurs && et || (pour tester un code retour).
Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة
F. Petitjean
Ingénieur civil du Génie Maritime.
« On ne perd pas son temps en aiguisant ses outils. »
Proverbe français
« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)
Vraisemblablement un caractère invisible en fin de ligne après le /etc/passwd .
Vous ne seriez pas en train d’éditer vos scripts avec un truc configuré pour du DOS par hasard ?
j’edite le fichier avec notepad++ dpuis le sftp , encodage utf-8 , langage shell
apres je ne cherche pas spécialement a trouver un nom dans la liste des passwd, je cherche a utiliser if, pour pouvoir exécuter automatiquement une commande si un fichier spécifique et vide
dash
$ [ -s /tmp/vide ] && echo non vide || echo vide ou pas là
vide ou pas là
$ exit
L’astuce [ -s fichier ] est expliquée dans man test.
Dans votre cas, la syntaxe
[ condition... ] || commande à lancer (fichier vide ou inexistant )
est plus concise et plus adaptée qu’un if.
$ if [ ! -s /tmp/vide ]
> then
> echo lancer commande car vide
> fi
lancer commande car vide
$
ou
$ [ -s /tmp/vide ] || echo lancer commande car vide
lancer commande car vide
$
il n’y a pas photo
Cela veut dire que l’édition est faite sur un poste Windows ? Il semblerait que vous cherchiez les ennuis.
Qu’entendez-vous par depuis le sftp ?
Pourquoi ne pas éditer directement sur la machine d’exécution ? (qui je l’espère est sous Debian)
Il faudrait mettre une option de déverminage, une instruction set -qqchose mais j’ai la flemme de trouver quoi mettre
Pour vérifier les deux premières lignes
head -2 lescript.sh | od -c
parce que la première erreur est bien là !
Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة
F. Petitjean
Ingénieur civil du Génie Maritime.
Linux: the operating system with a CLUE… Command Line User Environment.
– seen in a posting in comp.software.testing
j’utilise depuis le sftp parce que c’est plus simple et plus rapide pour moi, oui la machine est sous debian , j’ai utilisé " [ condition… ] || commande à lancer " du coup pour faire ce que je voulais et ca marche très bien
merci pour votre aide
Notepad++ permet d’écrire ses fichiers en utilisant les fins de ligne « à la Linux », c’est-à-dire LF, plutôt que des fins de lignes « à la Windows » (CRLF). C’est en bas à droite, à côté de la case où on peut choisir l’encodage.