essayer
if ! grep -q sysa /etc/passwd ; then
grep
renvoie true
s'il trouve la cible de recherche et false
s'il ne le fait pas.
Donc PAS false
== true
.
if
Les évaluations dans les shells sont conçues pour être très flexibles, et souvent ne nécessitent pas de chaînes de commandes (comme vous l'avez écrit).
De plus, en regardant votre code tel $( ... )
quel , votre utilisation de la forme de substitution cmd est à recommander, mais pensez à ce qui sort du processus. Essayez echo $(cat /etc/passwd | grep "sysa")
de voir ce que je veux dire. Vous pouvez aller plus loin en utilisant l' -c
option (count) pour grep et ensuite faire if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then
ce qui fonctionne mais est plutôt old school.
MAIS, vous pouvez utiliser les dernières fonctionnalités du shell (évaluation arithmétique) comme
if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`
ce qui vous donne également l'avantage d'utiliser les opérateurs de comparaison basés sur c-lang, ==,<,>,>=,<=,%
et peut-être quelques autres.
Dans ce cas, selon un commentaire d'Orwellophile, l'évaluation arithmétique peut être encore plus détaillée, comme
if ! (( $(grep -c "sysa" /etc/passwd) )) ; then ....
OU
if (( ! $(grep -c "sysa" /etc/passwd) )) ; then ....
Enfin, il existe un prix appelé Useless Use of Cat (UUOC)
. :-) Certaines personnes vont sauter de haut en bas et pleurer gothca! Je dirai simplement que grep
peut prendre un nom de fichier sur sa ligne de commande, alors pourquoi invoquer des processus et des constructions de tuyaux supplémentaires lorsque vous n'êtes pas obligé? ;-)
J'espère que ça aide.
!
pas être à l'intérieur des supports? ie[ ! EXPR ]