Hilfe zum Verständnis des Bash-Codes?

Hilfe zum Verständnis des Bash-Codes?

Was macht dieser Code?

export user=$(who am i | sed -e 's/ .*//')
echo $user
egrep -i "^www-data" /etc/group >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
    group='www-data'
else
    group='apache'
fi

Antwort1

Es gibt dort zwei Teile, die ersten beiden Zeilen und den Rest:

export user=$(who am i | sed -e 's/ .*//')
echo $user

druckt den Namen des angemeldeten Benutzers. Die $(...)Konstruktion weist userdie Ausgabe des Befehls zwischen diesen Token zu. whoWenn es mit zwei Argumenten aufgerufen wird, werden die Anmeldeinformationen des aktuell angemeldeten Benutzers zurückgegeben (Sie können z. B. syntaktisch korrekte who am Ioder etwas völlig anderes wie verwenden who loves popcorn). Die Ausgabe besteht aus mehreren durch Leerzeichen getrennten Teilen, und der sedBefehl, in den es weitergeleitet wird, schneidet alles nach dem ersten Leerzeichen ab.

egrep -i "^www-data" /etc/group >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
    group='www-data'
else
    group='apache'
fi

groupwird auf gesetzt www-data, wenn ein Gruppenname mit www-data beginnt (ohne Berücksichtigung der Groß-/Kleinschreibung, d. h. WWW-data, www-data-hallo) /etc/group, andernfalls groupwird auf die Zeichenfolge gesetzt apache. Dies geschieht, indem der Befehl egrep(veraltet, sollte verwenden ) verwendet wird, um ohne Berücksichtigung der Groß-/Kleinschreibung ( ) am Anfang einer Zeile ( ) in zu suchen . Wenn eine Übereinstimmung gefunden wird, ist (was den Exit-Wert des vorherigen Befehls enthält) 0 und der Zweig aus der Anweisung wird genommen, andernfalls wird der Zweig genommen.grep -E-iwww-data^/etc/group$?thenifelse

Wenn Sie prüfen möchten, ob es eine Gruppe mit dem genauen Namen gibt www-data(Groß-/Kleinschreibung beachten und nicht nur mit dieser Sequenz beginnend), müssen Sie Folgendes tun:grep -e '^www-data:' /etc/group

verwandte Informationen