
O que faz 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
Responder1
Existem duas partes ali, as duas primeiras linhas e o resto:
export user=$(who am i | sed -e 's/ .*//')
echo $user
imprime o nome do usuário logado. a $(...)
construção atribui user
qual é a saída do comando entre esses tokens. who
quando invocado com dois argumentos retorna informações de login do usuário conectado no momento (você pode, por exemplo, usar sintaticamente correto who am I
ou algo completamente diferente como who loves popcorn
), a saída disso consiste em várias partes separadas por espaços e o sed
comando para o qual é canalizado, cortes de tudo depois do primeiro espaço).
egrep -i "^www-data" /etc/group >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
group='www-data'
else
group='apache'
fi
é definido group
como www-data
se houver um nome de grupo começando com www-data (sem distinção entre maiúsculas e minúsculas, ou seja WWW-data
, www-data-hallo
) em /etc/group
, caso contrário, group
é definido como string apache
. Isso é feito usando o comando egrep
(obsoleto deve usar grep -E
) para pesquisar sem distinção entre maiúsculas e minúsculas ( -i
) www-data
no início de uma linha ( ^
) em /etc/group
. Se for encontrada uma correspondência, então $?
(que contém o valor de saída do comando anterior) será 0 e a then
ramificação da if
instrução será obtida, caso contrário, a else
ramificação será obtida.
Se você quiser verificar se existe um grupo com o nome exato www-data
(diferencia maiúsculas de minúsculas e não apenas começando com essa sequência), você deve fazergrep -e '^www-data:' /etc/group