
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
grep
kann 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 sudoers
auszuführen :grep
cat
if sudo grep -xqFe "$USER ALL=(ALL) NOPASSWD:ALL" /etc/sudoers
then
echo found
else
echo not found
fi
-q
weist 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"
.