Überprüfen, ob eine Zeichenfolge in der Datei vorhanden ist, mit cat | grep

Überprüfen, ob eine Zeichenfolge in der Datei vorhanden ist, mit cat | grep

Guten Tag allerseits

Zweck: Überprüfen, ob eine Zeichenfolge in einer Datei vorhanden ist, und entsprechende Aktionen ausführen

if [ -z 'sudo cat /etc/sudoers | grep "$USER ALL=(ALL) NOPASSWD:ALL"' ]; echo "no output, cont." || echo "line exists, skipping"

Die Ausgabe zeigt immer „Zeile existiert, wird übersprungen“ an, sowohl in Fällen, in denen die Zeile existiert als auch nicht.

Das Hinzufügen der Ausgabe zu einer Variablen, z. B. x, und das Ersetzen der Zeile in der if-Anweisung durch die Variable erzeugt die richtige Ausgabe.

Wie kann ich die Variablenroute „überspringen“ und den Befehl direkt ausführen?

Antwort1

grepkann als Bedingungsbefehl verwendet werden. Er gibt true zurück, wenn das Muster übereinstimmt. Hier möchten Sie eine Suche mit fester Zeichenfolge ( -F) und wahrscheinlich eine Übereinstimmung mit der gesamten Zeile ( -x):

if sudo cat /etc/sudoers |
  grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL"
then
  echo found
else
  echo not found
fi

Oder wenn die Konfiguration es Ihnen erlaubt, den Befehl zusätzlich zu dem folgenden sudoersauszuführen :grepcat

if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
  echo found
else
  echo not found
fi

-qweist an grep, ruhig zu sein und nur den True/False-Status über den Exit-Status zurückzugeben, aber nichts über die Standardausgabe auszugeben.

Beachten Sie, dass die Sudoers-Konfiguration andere Konfigurationsdateien enthalten kann, die bei diesem Ansatz nicht berücksichtigt werden. Dasselbe gilt für Berechtigungen, die Gruppen erteilt werden, deren Mitglied der Benutzer ist.

Möglicherweise möchten Sie stattdessen verwenden sudo -lU "$USER".

verwandte Informationen