1ª pergunta sobre stackoverflow, diga-me se fiz algo errado.
Quero coletar membros do grupo administrativo e compará-los com os usuários locais (algumas contas excluídas via grep -v). Compará-los meio que não funciona, pois sempre mostra 2 strings idênticas como diferentes.
Sou novo no scipting e confio muito no Google para fazer qualquer coisa. Tentei basicamente tudo que encontrei no stackoverflow via google sem sucesso e revisei as perguntas semelhantes, então, embora este pareça ser um tópico recorrente, não acho que seja uma duplicata.
Então aqui está o script:
#!/bin/bash
localuser=$(ls /Users/ | grep -v "Shared\|admin\|.localized\|_appstore\|root")
localadmin=$(dseditgroup -o read admin | grep $localuser)
if [[ "$localadmin" == "$localuser" ]]; then
echo "true"
else
echo "false"
fi
Se eu repetir ambas as variáveis usando od -c, obtenho a seguinte saída:
0000000 m f r a n k \n
0000007
0000000 m f r a n k \n
0000007
Usando set -x (deixando de fora o -if/else), obtenho o seguinte:
++ ls /Users/
++ grep -v 'Shared\|admin\|.localized\|_appstore\|root'
+ localuser=mfrank
++ dseditgroup -o read admin
++ grep mfrank
+ localadmin=' mfrank'
+ echo mfrank
mfrank
+ echo mfrank
mfrank
Aqui posso ver claramente que $localadmin tem dois ' e espaços em branco. De onde eles vêm e como posso me livrar deles? Por que eles não estão aparecendo com od -c?
Muito obrigado por ajudar.
EDITAR:
O uso correto do OD mostra o seguinte:
localadmin
0000000 004411 063155 060562 065556 0000010
localuser
0000000 063155 060562 065556 0000006
Seu problema imediato é porque
$localadmin
está sujeito a divisão de palavras e expansão global; portanto, quando você executou,echo $localadmin | od
o espaço em branco foi removido. Use sempre"$localadmin"
entre aspas para evitar que seus dados sejam mungados.Quando você deseja remover intencionalmente espaços em branco de uma variável, pode fazer isso com
${localadmin//[[:space:]]/}
.Para o seu problema real , encontrar o nome de usuários administradores locais não raiz no MacOS:
Obrigado a Ed Morton por ajudar com o awk. :)
solução detalhada
awk
sem o loop: