これは私が私のコードに何をしたいのかの要約です:
if (group exists)
then
(add user to group)
else
(create group)
(add user to group)
fi
Ubuntu仮想マシンを使用していますが、同様のサイトで見つかったすべての結果が機能しません。
このスクリプトは次の場合に役立ちます。
read -p "enter group name: " group
if grep -q $group /etc/group
then
echo "group exists"
else
echo "group does not exist"
fi
rups のソリューションのgrep
ステートメントにはいくつかの欠陥があります。
例えば。 grepping
はグループadmin
がある場合、_true
はlpadmin
( "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
/ 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
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は存在しません。
動作するはずの3つのコマンドを次に示します。
group=Sudo
grep -qw ^$group /etc/group || groupadd $group
usermod -aG $group $USER
または、-f
/--force
を使用する場合(グループが既に存在する場合は正常に終了します):
groupadd -f mygroup && usermod -aG mygroup $USER