如何检查组是否存在,如果不在Linux Shell Script中则添加

时间:2015-03-16 09:19:52

标签: linux shell ubuntu

这是我希望我的代码要做的总结:

if (group exists)
then

  (add user to group)

else

  (create group)

  (add user to group)

fi

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

7 个答案:

答案 0 :(得分:44)

rups解决方案中的grep语句存在一些缺陷:

E.g。如果有一个群组grepping,则admin群组true可能会返回lpadmin("群组存在")。

修复grep - 查询

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

或使用

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

答案 1 :(得分:15)

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

答案 2 :(得分:9)

此脚本可以帮助您:

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

答案 3 :(得分:5)

我发现将andiba的解决方案组合成一个合适的函数更有用:

CREATE DATABASE bamazon

USE bamazon;

CREATE TABLE products
(
    `id` int NOT NULL AUTO_INCREMENT,
    `product_name` varchar(45) NOT NULL,
    `department_name` varchar(45) NOT NULL,
    `price` int NOT NULL,
    `stock_quantity` int NOT NULL,
    PRIMARY KEY (id),
);

}

这可以通过在function grpexists { if [ $(getent group $1) ]; then echo "group $1 exists." else echo "group $1 does not exist." fi 中包含此函数来调用到您的环境中,这样您就可以使用以下符号检查组的存在:

/etc/bash.bashrc*

然后应返回以下之一:

  

组group_name存在。

  

group group_name不存在。

答案 4 :(得分:1)

这里有3个命令应该起作用:

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

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

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

答案 5 :(得分:1)

expo install react-native-gesture-handler react-native-reanimated react-native-screens react-native-safe-area-context @react-native-community/masked-view

所以您可以简单地做:

$ 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

答案 6 :(得分:0)

极客的出色解决方案和指导,感谢您分享我的2美分,使我们的生活更简单或更懒惰:-)我可以用来补充一个useradd脚本,我必须一次添加几个用户。我想知道for里面的样子  循环访问多个组:group1,group2,group3 ... group6 然后用户将这样的内容添加到系统中吗?

for g in $( cat fewgroups.txt ); do groupadd $g echo "Group:" $g "Exist not added moving on" else echo "Group:" $g "added successfully!" # Then create the users for u in $( cat 100sofusers.txt ); do useradd -m -g group1 -G group2,wheel -d /home/$u -c "Just anothe SiFiGeek" -s /bin/bash $u echo "userID:" $u "added successfully!" echo $u:$randompw | chpasswd echo "Password for userID:" $u "changed successfully" done