Você está passando \b$2\b
para grep
literalmente por causa das aspas simples. Para permitir que $2
se expanda para o valor do argumento, use "$2"
. Além disso, citar entre backquotes pode ser complicado; use $(…)
, que tem o mesmo significado que '…'
(substituição de comando), mas se comporta bem com relação a citações.
if [ $(grep -c -e "\b$2\b" /etc/group) -eq 0 ]; then …
Em seguida, contar as correspondências é muito complicado: você pode usar o status de retorno de grep
para saber se houve correspondências. Passe a opção -q
para informar a grep
que você não está interessado em nenhuma saída, apenas no status de retorno.
if ! grep -q -e "\b$2\b" /etc/group; then …
Em seguida, sua pesquisa está errada. Você está procurando a palavra $2
, mas isso pode corresponder a um nome de usuário ou a uma parte de um nome de grupo que contenha um caractere de pontuação ou a mais algumas diferenças exóticas. O nome do grupo é o primeiro campo delimitado por dois pontos, então pesquise por isso.
if ! grep -q -e "^$2:" /etc/group; then …
Observe que você pode precisar limpar a entrada: $2
não deve conter nenhum caractere especial para grep
ou que seja um delimitador de grupo.
case $2 in
*[][\.*^$]*) echo "Unsupported character in the group name";;
esac
if ! grep -q -e "^$2:" /etc/group; then …
Por fim, grep /etc/group
não é a ferramenta certa aqui, se você puder evitá-la. Você só pode encontrar nomes de grupos locais dessa maneira, não grupos vindos de NIS ou LDAP ou configurações incomuns. A maioria dos unices modernos (pelo menos Solaris, Linux e * BSD) tem um getent
para recuperar entradas de bancos de dados do sistema, incluindo o banco de dados do grupo.
if ! getent group "$2" >/dev/null; then …
(para usuários, em vez de procurar em /etc/passwd
, use getent passwd
ou mais, de forma portável, chame id
.)