如何在Linux中检查组是否存在并在不存在时添加Shell脚本

r1zhe5dt  于 2023-11-17  发布在  Linux
关注(0)|答案(9)|浏览(160)

这是一个我想要我的代码做的总结:

if (group exists)
then

  (add user to group)

else

  (create group)

  (add user to group)

fi

字符串
我正在使用Ubuntu虚拟机,但我在类似网站上找到的所有结果都不起作用。

pokxtpni

pokxtpni1#

rups的解决方案中的grep语句有一些缺陷:
例如,当存在一个组lpadmin时,组admingrepping可能返回true(“组存在”)。
修复grep-query

grep -q -E "^admin:" /etc/group

字符串
或使用

if [ $(getent group admin) ]; then
  echo "group exists."
else
  echo "group does not exist."
fi

rwqw0loc

rwqw0loc2#

Grepping /etc/group可以工作,但仅在/etc/nsswitch.conf具有以下内容的计算机上:

group: files

字符串
这意味着在确定可用组时只参考/etc/group。使用以下两种方式之一(按名称或按gid):

getent group <groupname>
getent group <groupid>


对于更通用的解决方案,检查退出状态:0表示“存在”,非零表示“不存在”。例如,要检查组“postgres”是否存在,如果不存在则创建它(假设bash shell,以能够创建新组的用户身份运行),请运行:

/usr/bin/getent group postgres 2>&1 > /dev/null || /usr/sbin/groupadd postgres

hfsqlsce

hfsqlsce3#

此脚本可以帮助您:

read -p "enter group name: " group
   if grep -q $group /etc/group
    then
         echo "group exists"
    else
         echo "group does not exist"
    fi

字符串

r55awzrz

r55awzrz4#

我发现它更有用,将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不存在。

g2ieeal7

g2ieeal75#

单行:

$getent组<-groupname->||groupadd<-groupname->

798qvoo8

798qvoo86#

这里有3个应该工作的命令:

group=sudo
grep -qw ^$group /etc/group || groupadd $group
usermod -aG $group $USER

字符串
或者,当您使用-f/--force时(如果组已经存在,则成功退出):

groupadd -f mygroup && usermod -aG mygroup $USER

6rqinv9w

6rqinv9w7#

$ groupadd --help
Usage: groupadd [options] GROUP

Options:
  -f, --force                   exit successfully if the group already exists,
                                and cancel -g if the GID is already used

字符串
所以你可以简单地做:

groupadd -f some_new_grp

rpppsulh

rpppsulh8#

极客伟大的解决方案和指导,感谢分享这里是我的2美分,使我们的生活更简单或更懒惰:-)我可以用来补充useradd脚本,我必须添加几个用户一次.我想知道它会如何看起来像一个在循环中的几个组:group 1,group 2,group 3. group 6然后useradd到系统这样的东西?
第一个月

34gzjxbg

34gzjxbg9#

如果要确保将现有的USER添加到GROUP,则此流

if (group exists)
then
  (add user to group)
else
  (create group)
  (add user to group)
fi

字符串
可以简化为:

if (group exists)
then
   # do nothing
else
  (create group)

fi
(add user to group)


可以删除then ... # do nothing,并将条件更改为if NOT exists,以进一步简化流程

if (group NOT exists)
then
  (create group)
fi
(add user to group)


如果您可能尝试创建一个组,并且如果它已经存在,则没有必要检查if (group NOT exists)。因此,整个流程可以简化为:

(create group) AND (add user to group)


how to do that in code

相关问题