Как проверить, существует ли группа и добавить ее, если она отсутствует в Linux Shell Script

это краткое изложение того, что я хочу сделать для моего кода:

if (group exists)
then

  (add user to group)

else

  (create group)

  (add user to group)

fi

Я использую виртуальную машину Ubuntu, но все результаты, которые я нашел на похожих сайтах, не работают.

Ответы

Ответ 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

Ответ 2

Оператор 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

Ответ 3

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

Ответ 4

Я нашел его более полезным, чтобы составить решение 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 не существует.