Si l'instruction pour s'assurer que la chaîne n'existe pas dans plusieurs fichiers

-1

J'ai eu une brutalité absolue de faire quelque chose qui devrait être assez simple.

J'ai essayé tout ce que je pouvais penser au cours des dernières heures, mais je n'arrive pas à le faire fonctionner. La tentative la plus récente est ici

Est-ce que quelqu'un a des suggestions?

if [[ $(grep -q 10.212.5.5 /etc/dhcp/dhcpd.conf) == 0 ]] && [[ $(grep -q 10.212.5.15} /etc/dhcp/dhcpd.conf) == 0  ]] && [[ $(grep -q 10.212.5.5 file1) == 0 ]] && [[ $(grep -q 10.212.5.5 file2) == 0 ]] ; then echo "notfound" ; fi
Brando__
la source
Devrait-il être la même chaîne à chaque fois?
Choroba
2
$()renvoie le contenu de la commande - pas le code de sortie du fichier grepque vous espériez. Je voudrais transformer cela en une forboucle pour éviter autant de dactylographie répétée.
poussins

Réponses:

0

Les commandes (par exemple grep) renvoient généralement deux types de résultats différents: la sortie (ce qu’elles impriment en cours d’exploitation) et un état de sortie (mieux considéré comme un succès ou un échec). Comme le signalait les poussins, la $(somecommand)construction du shell capture le résultat de la commande, pas son statut de sortie; mais grepl' -qoption l'empêche de produire une sortie, $( )finit donc par ne rien capturer .

Je vois deux façons simples de résoudre ce problème (à condition que je comprenne ce que vous essayez de faire). La première consiste à utiliser à la grep -cplace de -q, afin d'indiquer le nombre de correspondances trouvées. Vous pouvez capturer ce résultat avec $( )et le comparer à 0, exactement comme vous le faites (bien que j'ai enveloppé les lignes pour des raisons de lisibilité):

if [[ $(grep -c 10.212.5.5 /etc/dhcp/dhcpd.conf) == 0 ]] &&
   [[ $(grep -c 10.212.5.15 /etc/dhcp/dhcpd.conf) == 0  ]] &&
   [[ $(grep -c 10.212.5.5 file1) == 0 ]] &&
   [[ $(grep -c 10.212.5.5 file2) == 0 ]] ; then
       echo "notfound"
fi

L'autre option est d'utiliser grep -q, mais regardez son statut de sortie. Vérifier l'état de sortie d'une commande ifest trivial - utilisez simplement la commande elle-même comme condition de test. Mais dans ce cas, c’est un retour en arrière, puisque greprenvoie succès si le motif est trouvé et échec s’il ne l’est pas; vous voulez que le test réussisse s'il n'a pas été trouvé, utilisez donc !pour inverser le statut:

if ! grep -q 10.212.5.5 /etc/dhcp/dhcpd.conf &&
   ! grep -q 10.212.5.15 /etc/dhcp/dhcpd.conf &&
   ! grep -q 10.212.5.5 file1 &&
   ! grep -q 10.212.5.5 file2 ; then
       echo "notfound"
fi
Gordon Davisson
la source