¿Ayuda para entender el código bash?

¿Ayuda para entender el código bash?

¿Qué hace este código?

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

Respuesta1

Hay dos partes allí, las dos primeras líneas y el resto:

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

imprime el nombre del usuario que ha iniciado sesión. la $(...)construcción asigna usercuál es el resultado del comando entre esos tokens. whocuando se invoca con dos argumentos, devuelve información de inicio de sesión sobre el usuario actualmente conectado (puede, por ejemplo, usar sintácticamente correcto who am Io algo completamente diferente como who loves popcorn), la salida de eso consta de varias partes separadas por espacios y el sedcomando al que se canaliza, cortes de todo después del primer espacio).

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

se establece groupen www-datasi hay un nombre de grupo que comienza con www-data (no distingue entre mayúsculas y minúsculas, es decir WWW-data, www-data-hallo) en /etc/group; de lo contrario, groupse establece en la cadena apache. Esto se hace usando el comando egrep(en desuso se debe usar ) para buscar sin distinguir entre mayúsculas y minúsculas ( ) al principio de una línea ( ) en . Si se encuentra una coincidencia, entonces (que contiene el valor de salida del comando anterior) es 0 y se toma la rama de la declaración; de lo contrario, se toma la rama.grep -E-iwww-data^/etc/group$?thenifelse

Si quieres comprobar si hay un grupo con el nombre exacto www-data(distingue entre mayúsculas y minúsculas y no solo comienza con esa secuencia) tienes que hacergrep -e '^www-data:' /etc/group

información relacionada