423 votes

Comment faire « si pas de véritable condition » ?

Je voudrais avoir la commandeexécutéequand n’est pas vrai.

Ce que je fais mal ?

593voto

shellter Points 15304

essayez

  if ! grep -q sysa /etc/passwd ; then

grep retours true si elle trouve la cible de recherche, et false si elle ne le fait pas.

Afin de ne PAS false == true.

if évaluation dans les coquilles sont conçus pour être très flexible, et à plusieurs reprises ne nécessitent pas de chaînes de commandes (comme vous l'avez écrit).

Aussi, en regardant ton code en l'état, votre utilisation de l' $( ... ) formulaire de commande de substitution est d'être félicité, mais pensez à ce qui est en train de sortir du processus. Essayez echo $(cat /etc/passwd | grep "sysa") pour voir ce que je veux dire. Vous pouvez prendre cela en utilisant l' -c (count) option de grep et puis n' if ! [ $(grep -c "sysa" /etc/passwd) -eq 0 ] ; then qui travail mais plutôt old school.

MAIS, vous pourriez utiliser les nouvelles fonctionnalités d'environnement (arthimentic expansion) comme

`if ! (( $(grep -c "sysa" /etc/passwd) == 0 )) ; then ...`

qui vous donne également l'avantage d'utiliser le c-lang en fonction des opérateurs de comparaison, ==,<,>,>=,<=,% et peut-être quelques autres.

Enfin, il y a un prix appelé l' Useless Use of Cat (UUOC). :-) Certaines personnes vont sauter de haut en bas et de pleurer gothca! Je vais juste dire qu' grep pouvez prendre un nom de fichier sur elle cmd-ligne, alors pourquoi invoquer processus supplémentaire et le tuyau de constructions lorsque vous n'avez pas à? ;-)

J'espère que cette aide.

39voto

Rony Points 666

Je pense qu’il peut être simplifié en :

ou en une seule ligne de commande

``

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X