
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 user
die Ausgabe des Befehls zwischen diesen Token zu. who
Wenn es mit zwei Argumenten aufgerufen wird, werden die Anmeldeinformationen des aktuell angemeldeten Benutzers zurückgegeben (Sie können z. B. syntaktisch korrekte who am I
oder etwas völlig anderes wie verwenden who loves popcorn
). Die Ausgabe besteht aus mehreren durch Leerzeichen getrennten Teilen, und der sed
Befehl, 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
group
wird 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 group
wird 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
-i
www-data
^
/etc/group
$?
then
if
else
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