El grep
declaración en la solución de rups tiene algunos defectos:
P.ej. grepping
para un grupo admin
puede devolver true
("grupo existe") cuando hay un grupo lpadmin
.
Arregle el grep
-consulta
grep -q -E "^admin:" /etc/group
o usar
if [ $(getent group admin) ]; then
echo "group exists."
else
echo "group does not exist."
fi
Este script puede ayudarte:
read -p "enter group name: " group
if grep -q $group /etc/group
then
echo "group exists"
else
echo "group does not exist"
fi
Grepping /etc/group funciona, pero solo en una máquina donde /etc/nsswitch.conf tiene:
group: files
lo que significa que solo se consulta /etc/group al determinar los grupos disponibles. Usar:
getent group <groupname>
para una solución más genérica, verificar el estado de salida:0 significa "existe", distinto de cero significa "no existe". Por ejemplo, para verificar si existe el grupo 'postgres' y crearlo si no existe (suponiendo que bash shell, ejecutándose como un usuario capaz de crear nuevos grupos), ejecute:
/usr/bin/getent group postgres 2>&1 > /dev/null || /usr/sbin/groupadd postgres