Ajuda para entender o código bash?

Ajuda para entender o código bash?

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 userqual é a saída do comando entre esses tokens. whoquando invocado com dois argumentos retorna informações de login do usuário conectado no momento (você pode, por exemplo, usar sintaticamente correto who am Iou algo completamente diferente como who loves popcorn), a saída disso consiste em várias partes separadas por espaços e o sedcomando 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 groupcomo www-datase 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-datano 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 thenramificação da ifinstrução será obtida, caso contrário, a elseramificaçã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

informação relacionada