删除前检查并杀死用户进程

删除前检查并杀死用户进程

我正在编写一个脚本来从文本文件中删除用户。但是,在删除之前,我想检查用户是否有任何进程正在运行,如果正在运行,则终止所有进程并删除。我是这样做的:

    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..任何解决方案,如何修复它?

答案1

您有以下代码:

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

bash 在这里对空格很挑剔。只需删除其中的空格pids = ...,它就会按预期工作:

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

答案2

一些事情:

=1) shell 脚本变量赋值周围不能有空格。pids = ...应该pids=...
2)kill可以接受多个PID。你不需要for pid in $pids ...循环。 (尽管与下一项无关)
3)可以通过执行以下操作大大简化您的代码:

pkill -KILL -U "$name"

无需检查用户是否有任何进程正在运行。如果没有,该命令不执行任何操作。

相关内容