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

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

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, чтобы убедиться, что какой-либо процесс не выполняется пользователем, и если его запуск выполняется, принудительно закрыть процессы и удалить пользователя.

Тем не менее, он не работает и говорит pids: command not found .. Любое решение, как его исправить?

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" 

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

  • gpg запрашивает пароль даже с --passphrase
  • Как прочитать файл свойств через мой скрипт?
  • показать год при отображении файлов в текущем каталоге
  • Как перечислять только файлы JPEG из корня ниже с помощью командной строки?
  • Bash: слияние имени папки из переменной с именем файла
  • Неясно, где идет выход bash
  • Как я могу захватить stdout / stderr в файле, но все еще вижу его в моей консоли?
  • Почему это пока не работает в Ubuntu?
  • Сценарий Bash SFTPing на удаленный сервер и загрузка файлов, cd в соответствующий каталог на локальной машине
  • загрузка файла один раз и воспроизведение его несколько раз
  • Для цикла для переименования файлов с подсказкой для каждого имени файла
  • Linux и Unix - лучшая ОС в мире.