Помогите разобраться в коде bash?

Помогите разобраться в коде bash?

Что делает этот код?

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ветвь из оператора, в противном случае берется ветвь.ifelse

Если вы хотите проверить, существует ли группа с точным именем www-data(с учетом регистра и не только начинающимся с этой последовательности), вам нужно сделатьgrep -e '^www-data:' /etc/group

Связанный контент