Problema con la sintaxis de eliminación de cuenta con script

1

Estoy trabajando en un módulo de script de limpieza de cuenta que puede manejar las cuentas ocultas y no ocultas que estamos creando de forma masiva en los nuevos sistemas MacOS.

Hemos mantenido la lógica simple para comenzar.

Sin embargo, sigo recibiendo un error: línea 4: [: falta ']'

Tengo el espacio ... ¿qué me falta? Probé los controles de sintaxis y pasa el examen.

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

2 respuestas

0

[ (y [[ ) esperan una expresión, no un comando; por lo que no puede ejecutar comandos directamente dentro de una prueba.

Cuando pones una tubería en tu condición, finaliza la evaluación iniciada con [ , lo que hace que ] sea tratado como un argumento hasta el último grep .

Intenta poner tu condición dentro de $() así:

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

De esa manera, la expresión (incluidas todas las canalizaciones) se ejecutará primero y devolverá su código de salida para que se use en su evaluación.

    
respondido por el Nikita 22.03.2016 - 17:41
0

En su declaración canalizada solo se usa el estado de salida del último grep y no necesita los corchetes de prueba. También puedes eliminar el primer grep.

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

Por favor, prueba antes de usar.

    
respondido por el fd0 22.03.2016 - 19:22

Lea otras preguntas en las etiquetas