Gil*_*not 31
试着这样做:
username=ANY_USERNAME
if getent group customers | grep &>/dev/null "\b${username}\b"; then
echo true
else
echo false
fi
Run Code Online (Sandbox Code Playgroud)
要么
username=ANY_USERNAME
if groups $username | grep &>/dev/null '\bcustomers\b'; then
echo true
else
echo false
fi
Run Code Online (Sandbox Code Playgroud)
Ant*_*xon 31
if id -nG "$USER" | grep -qw "$GROUP"; then
echo $USER belongs to $GROUP
else
echo $USER does not belong to $GROUP
fi
Run Code Online (Sandbox Code Playgroud)
说明:
id -nG $USER 显示用户所属的组名.grep -qw $GROUP 如果输入中存在$ GROUP作为整个单词,则静默检查.Nic*_*kin 10
使用零字符分隔的固定字符串 grep 检查组成员身份的一种稍微防错的方法。
if id -nGz "$USER" | grep -qzxF "$GROUP"
then
echo User \`$USER\' belongs to group \`$GROUP\'
else
echo User \`$USER\' does not belong to group \`$GROUP\'
fi
Run Code Online (Sandbox Code Playgroud)
或使用长选项
if id --name --groups --zero "$USER" |
grep --quiet --null-data --line-regexp --fixed-strings "$GROUP"
then
echo User \`$USER\' belongs to group \`$GROUP\'
else
echo User \`$USER\' does not belong to group \`$GROUP\'
fi
Run Code Online (Sandbox Code Playgroud)
对于所有高尔夫球迷:
ingroup(){ [[ " `id -Gn $2` " == *" $1 "* ]]; }
Run Code Online (Sandbox Code Playgroud)
用法:ingroup group [user]
例子:
if ingroup video; then
echo 'Enjoy the show!'
fi
Run Code Online (Sandbox Code Playgroud)
TL;DR 重点是我利用了内置的通配符来查找子字符串。
编辑:感谢@Anthony Geoghegan的提示id -Gn。
小智 6
我知道这可能是旧线程,但以防万一这也很好用:
id -Gn"username"| grep -c"groupname"
如果返回任何数字> 0,则user是该组的成员.
你可以用
groups $username_here | grep -q '\busergroup\b'
如果找到匹配项,退出代码将为 0,如果未找到匹配项,则退出代码将为 1。
user_in_group()
{
groups $1 | grep -q "\b$2\b"
}
Run Code Online (Sandbox Code Playgroud)
您可以将此功能用作 user_in_group userfoo groupbar