web-dev-qa-db-ja.com

グループが存在するかどうかを確認し、Linuxシェルスクリプトに存在しない場合は追加する方法

これは私が私のコードに何をしたいのかの要約です:

if (group exists)
then

  (add user to group)

else

  (create group)

  (add user to group)

fi

Ubuntu仮想マシンを使用していますが、同様のサイトで見つかったすべての結果が機能しません。

32
annieapple2000

このスクリプトは次の場合に役立ちます。

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

rups のソリューションのgrepステートメントにはいくつかの欠陥があります。

例えば。 greppingはグループadminがある場合、_truelpadmin( "group exists")を返すことがあります。

grep- queryを修正する

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

または使用する

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

/ etc/groupの削除は機能しますが、/ etc/nsswitch.confに以下が含まれるマシンでのみ:

group: files

つまり、使用可能なグループを決定するときに/ etc/groupのみが参照されます。つかいます:

getent group <groupname>

より一般的なソリューションでは、終了ステータスをチェックします。0は「存在する」ことを意味し、ゼロ以外は「存在しない」ことを意味します。たとえば、グループ「postgres」が存在するかどうかを確認し、存在しない場合は作成します(bashシェルを想定し、新しいグループを作成できるユーザーとして実行します)。

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

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は存在しません。

5
nemesisfixx

動作するはずの3つのコマンドを次に示します。

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

または、-f/--forceを使用する場合(グループが既に存在する場合は正常に終了します):

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