Problema con la sintassi di eliminazione degli account programmata

1

Sto lavorando a un modulo di script di pulizia dell'account in grado di gestire gli account nascosti e nascosti che stiamo creando in blocco sui nuovi sistemi MacOS.

Abbiamo mantenuto semplice la logica per iniziare.

Tuttavia continuo a ricevere un errore: riga 4: [: mancante ']'

Ho lo spazio ... cosa mi manca? Ho provato i controlli di sintassi e passa il controllo.

#!/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
    
posta JasonBee 22.03.2016 - 17:24
fonte

2 risposte

0

[ (e [[ ) si aspettano un'espressione, non un comando; quindi non puoi eseguire direttamente i comandi all'interno di un test.

Quando inserisci una pipe nelle tue condizioni termina la valutazione iniziata con [ che rende ] da trattare come argomento per l'ultimo grep .

Prova a inserire la tua condizione all'interno di $() in questo modo:

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

In questo modo l'espressione (compresi tutti i pipe) verrà eseguita per prima e restituirà il codice di uscita da utilizzare nella valutazione.

    
risposta data 22.03.2016 - 17:41
fonte
0

Nella tua dichiarazione in pipe viene utilizzato solo lo stato di uscita dell'ultimo grep e non hai bisogno delle parentesi quadre. Puoi anche eliminare il primo grep.

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

Si prega di testare prima dell'uso.

    
risposta data 22.03.2016 - 19:22
fonte

Leggi altre domande sui tag