1 votos

Problema con la sintaxis de borrado de cuentas con script

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

Hemos mantenido la lógica simple para empezar.

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

Tengo el espacio... ¿qué me falta? He probado la comprobación de la sintaxis y pasa la prueba.

#!/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

0voto

Nikita Puntos 354

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

Cuando se pone una tubería en la condición se termina la evaluación iniciada con [ que hace que ] para ser tratado como un argumento para el último grep .

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

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

De esta manera la expresión (incluyendo todas las tuberías) se ejecutará primero y devolverá su código de salida para ser utilizado en su evaluación.

0voto

Michael Zhou Puntos 167

En tu sentencia piped sólo se utiliza el estado de salida del último grep y no necesitas los paréntesis de prueba. También puedes eliminar el primer grep.

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

Por favor, pruébelo antes de usarlo.

0 votos

Gracias por el comentario - Hice eso como un primer control de la puerta debido a las cuentas del sistema ... cuentas que no queremos eliminar. Es decir, si uno de nuestros técnicos utiliza un nombre de cuenta del sistema por accidente no quiero que esa cuenta se elimine incluso por accidente / El código está destinado a ser reutilizado por lo que quería que fuera a prueba de idiotas en caso de que alguien crea una cuenta "www" que estaría bien para eliminar, a diferencia de _WWW que no se puede tocar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X