
Что делает этот код?
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
решение1
Там две части, первые две строки и остальное:
export user=$(who am i | sed -e 's/ .*//')
echo $user
печатает имя вошедшего в систему пользователя. $(...)
конструкция назначает то user
, что является выводом команды между этими токенами. who
при вызове с двумя аргументами возвращает информацию о входе в систему для текущего вошедшего в систему пользователя (вы можете, например, использовать синтаксически правильный who am I
или что-то совершенно иное, например who loves popcorn
), вывод которого состоит из нескольких частей, разделенных пробелами, и sed
команда, в которую он передается, отсекает все после первого пробела).
egrep -i "^www-data" /etc/group >/dev/null 2>/dev/null
if [ $? -eq 0 ]; then
group='www-data'
else
group='apache'
fi
устанавливается group
в www-data
, если есть имя группы, начинающееся с www-data (без учета регистра, т. е. WWW-data
, www-data-hallo
) в /etc/group
, в противном случае group
устанавливается в строку apache
. Это делается с помощью команды egrep
(устарело следует использовать grep -E
) для поиска без учета регистра ( -i
) www-data
в начале строки ( ^
) в /etc/group
. Если совпадение найдено, то $?
(который содержит выходное значение предыдущей команды) равно 0 и берется then
ветвь из оператора, в противном случае берется ветвь.if
else
Если вы хотите проверить, существует ли группа с точным именем www-data
(с учетом регистра и не только начинающимся с этой последовательности), вам нужно сделатьgrep -e '^www-data:' /etc/group