Ответ 1
Этот script может вам помочь:
read -p "enter group name: " group
if grep -q $group /etc/group
then
echo "group exists"
else
echo "group does not exist"
fi
это краткое изложение того, что я хочу сделать для моего кода:
if (group exists)
then
(add user to group)
else
(create group)
(add user to group)
fi
Я использую виртуальную машину Ubuntu, но все результаты, которые я нашел на похожих сайтах, не работают.
Этот script может вам помочь:
read -p "enter group name: " group
if grep -q $group /etc/group
then
echo "group exists"
else
echo "group does not exist"
fi
Оператор grep
в решении rups имеет некоторые недостатки:
например. grepping
для группы admin
может возвращать true
( "group exists" ), когда существует группа lpadmin
.
Либо установите grep
-query
grep -q -E "^admin:" /etc/group
или используйте
if [ $(getent group admin) ]; then
echo "group exists."
else
echo "group does not exist."
fi
Grepping/etc/group работает, но только на машине, где /etc/nsswitch.conf:
group: files
означает, что при определении доступных групп учитывается только команда /etc/group. Использование:
getent group <groupname>
для более общего решения, проверяющего статус выхода: 0 означает "существует", ненулевое означает, что "не существует". Например, чтобы проверить, существует ли группа postgres, и создавать ее, если это не так (предполагается, что bash shell, работающий как пользователь, способный создавать новые группы):
/usr/bin/getent group postgres 2>&1 > /dev/null || /usr/sbin/groupadd postgres
Я нашел его более полезным, чтобы составить решение andiba в правильную функцию:
function grpexists {
if [ $(getent group $1) ]; then
echo "group $1 exists."
else
echo "group $1 does not exist."
fi
}
Это может быть вызвано, например, в вашу среду, включив эту функцию в ваш /etc/bash.bashrc*
, чтобы вы могли проверить наличие группы, используя следующее заклинание:
grpexists group_name
Затем он должен вернуть один из:
существует имя группы group_name.
или
имя_группы group_name не существует.