Проблема із синтаксисом видалення облікового запису із сценарієм


1

Я працюю над модулем сценарію очищення облікового запису, який може обробляти приховані та нерозкриті акаунти, які ми створюємо масово в нових системах MacOS.

Ми зберегли логіку просто для початку.

Однак я продовжую отримувати помилку: рядок 4: [: відсутній `] '

У мене є простір ... чого мені не вистачає? Я спробував перевірити синтаксис, і він проходить збирання.

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

Відповіді:


0

[[[) очікуйте виразу, а не команди; тому ви не можете безпосередньо запускати команди всередині тесту.

Коли ви ставите трубку у свій стан, вона припиняє оцінку, розпочату з [якої змушує ]трактуватися як аргумент останнього grep.

Спробуйте помістити свій стан всередину $()так:

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

Таким чином, вираз (включаючи всі труби) буде виконаний спочатку і поверне свій вихідний код, який буде використаний у вашій оцінці.


0

У вашому констатаційному записі використовується лише статус виходу останньої грепи, і вам не потрібні тестові дужки. Ви також можете усунути перший греп.

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

Будь ласка, протестуйте перед використанням.


Дякую за коментар - я зробив це як перший контроль за допомогою системних акаунтів ... облікових записів, які ми не хочемо видаляти. IE, якщо хтось із наших технічних осіб використовує назву облікового запису системи випадково, я не хочу, щоб цей обліковий запис було видалено навіть випадково що було б добре видалити на відміну від _WWW, якого не можна торкатися.
JasonBee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.