J'ai un script bash avec les éléments suivants:
#!/bin/bash -e
egrep "^username" /etc/passwd >/dev/null
if[ $? -eq 0 ]
then
echo "doesn't exist"
fi
Ce script ne fonctionnera pas sans le -e. Que fait le -e
script? Aussi, que fait le $?
dans ce contexte?
-e
dans la page de manuel (je veux vraiment voir une réponse pour répondre à cela).$?
contient le dernier code de sortie (celui duegrep
processus généré ci-dessus).-e
est documenté sousset
.if egrep -q "^username" /etc/passwd ; then echo "doesn't exist" ; fi
if
et[
. Ce script ne fonctionne pas avec-e
, parce que sigrep
ne trouve rien alors sous-e
le script mettra fin là. Sans-e
, vous avez le message en arrière: un statut ($?
) de 0 signifie que grep a trouvé l'utilisateur. Notez que cela devrait être `grep '^ username:', au fait (et s'il y a un autre utilisateur avec un nom plus long?).#/bin/bash -e
le même effet qu'à la#/bin/bash
ligne # 1 etset -e
à la ligne # 2?Réponses:
Erreur de sortie. Plus de drapeaux
S'il y a une erreur, elle s'arrêtera immédiatement.
Le $? est l'état de sortie de la commande passée. Sous Linux, un état de sortie de 0 signifie que la commande a réussi. Tout autre statut signifierait qu'une erreur s'est produite.
egrep "^ username" / etc / passwd> / dev / null Recherchez le nom d'utilisateur sous le fichier / etc / passwd. S'il le trouve, l'état de sortie $? sera égal à 0. S'il ne le trouve pas, le statut de sortie sera autre chose (pas 0), par conséquent vous "écho n'existe pas".
la source
if egrep "^username" /etc/passwd >/dev/null
.set
nécessaire cependant? : - /-e
est donné à bash comme argument de ligne de commande. Toutes les options répertoriées sousset
sont également acceptées par bash dans sa ligne de commande - notez la première phrase de la section Options de la page de manuel.Tous les commutateurs de ligne de commande bash sont documentés dans
man bash
.la source
set
nécessaire cependant? : - /Votre script est incorrect, car
état de sortie 0 - signifie - tout est OK, dans le cas de grep signifie "OK, a trouvé la chaîne". état de sortie! = 0 signifie que quelque chose ne va pas, dans le cas de grep 1 signifie "non trouvé", 2 signifie "ne peut pas ouvrir l'entrée" ...
la source