Problema com a sintaxe de exclusão de conta com script

1

Eu estou trabalhando em um módulo de script de limpeza de conta que pode lidar com as contas ocultas e unhidden que estamos criando em massa em novos sistemas MacOS.

Nós mantivemos a lógica simples para começar.

No entanto, continuo recebendo um erro: linha 4: [: missing `] '

Eu tenho o espaço ... o que estou perdendo? Eu tentei verificações de sintaxe e passa o teste.

#!/bin/bash
USERNAME=administrator

if [ dscl . -list /Users | grep -v '^_' | grep $USERNAME ];
    then
    echo "Deleting user account $USERNAME"
    dscl . -delete "/Users/$USERNAME"
else
    echo "The admin account $USERNAME does not exist here"
fi

if [ -d "/$USERPATH/$USERNAME" ];
    then
    echo "Deleting leftover user account folder $USERPATH/$USERNAME"
    rm -rf $USERPATH/$USERNAME
fi

if [ -d "/Users/$USERNAME" ];
    then
    echo "Deleting leftover user account folder /Users/$USERNAME"
    rm -rf /Users/$USERNAME]
fi
JasonBee
fonte

Respostas:

0

[ (e [[ ) espera uma expressão, não um comando; então você não pode executar comandos diretamente dentro de um teste.

Quando você coloca um tubo em sua condição, ele termina a avaliação iniciada com [ que faz ] para ser tratado como um argumento para o último grep.

Tente colocar sua condição dentro $() igual a:

if [ $(dscl . -list /Users | grep -v '^_' | grep $USERNAME) ];

Dessa forma, a expressão (incluindo todos os pipes) será executada primeiro e retornará seu código de saída para ser usado na sua avaliação.

Nikita
fonte
0

Em sua instrução canalizada apenas o status de saída do último grep é usado e você não precisa dos colchetes de teste. Você também pode eliminar o primeiro grep.

if dscl . -list  /Users | grep -w "$username"
then
    .........
    .........
else
    .........
fi

Por favor, teste antes de usar.

fd0
fonte
Obrigado pelo comentário - Eu fiz isso como um primeiro controle de portão devido às contas do sistema ... contas que não queremos excluir. Se um de nossos técnicos usa um nome de conta do sistema por acidente, eu não quero que essa conta seja excluída mesmo por acidente / O código deve ser reutilizado, então eu queria que ele fosse uma prova idiota caso alguém criasse uma conta "www" que seria OK excluir, ao contrário de _WWW que não pode ser tocado.
JasonBee