Процесс проверки и уничтожения пользователя перед удалением

Я работаю над скриптом для удаления пользователей из текстового файла. Однако перед удалением я хочу проверить, запущен ли какой-либо процесс пользователем, а затем запустить, а затем уничтожить все процессы и удалить. Вот как я это делаю:

if #user doesn't exists then print user not exist else pids = `ps U "$name" -o pid | head -n -1` if [ -n "$pids" ] then for pid in $pids do sudo kill -KILL $pid done fi sudo userdel $name -r -f echo echo "The user - $name - has been deleted!" echo fi done < "$fname" # double-quote fname echo 

Таким образом, в основном его цикл для удаления пользователей и в том, что оператор if, чтобы убедиться, что какой-либо процесс не выполняется пользователем, и если его запуск выполняется, принудительно закрыть процессы и удалить пользователя.

  • Назначьте в TAB как полное меню, так и dynamic-complete-history
  • Перенаправить все стандартные для остальной части скрипта
  • Почему значение cd по умолчанию равно ~?
  • Эхо-список процесса не работает
  • `su` и` sudo bash` дают корневое приглашение, которое не будет выполнять какую-либо команду
  • В OS X, как мне входить в интерактивном режиме с правами root, начиная с обычной учетной записи пользователя?
  • Тем не менее, он не работает и говорит pids: command not found .. Любое решение, как его исправить?

  • Найти последнее появление строки в нескольких файлах
  • Можно ли использовать коды escape-кода ANSI в Bash здесь-документах?
  • Сравнение строк с целым числом в [[test
  • Избегайте буферизации вывода для группы команд (фигурные скобки) в сценарии bash
  • Могу ли я сделать «Есть прекращенные рабочие места», которые сложнее убить?
  • Как разрешить запуск сценария кем угодно в любом месте
  • 2 Solutions collect form web for “Процесс проверки и уничтожения пользователя перед удалением”

    У вас есть следующий код:

     pids = `ps U "$name" -o pid | head -n -1` 

    Здесь bash придирчив к пробелам. Просто удалите пробелы из pids = ... и он будет работать в соответствии с назначением:

     pids=`ps U "$name" -o pid | head -n -1` 

    Немногие вещи:

    1) У вас не может быть пробела вокруг присваивания переменной скрипта = . pids = ... должно быть pids=...
    2) kill может принимать несколько PID. Вам не нужен for pid in $pids ... loop. (хотя со следующим пунктом это не имеет значения)
    3) Ваш код может быть значительно упрощен:

     pkill -KILL -U "$name" 

    Нет необходимости проверять, есть ли у пользователя какие-либо процессы. Если их нет, команда ничего не делает.

    Linux и Unix - лучшая ОС в мире.