我正在编写一个脚本来从文本文件中删除用户。但是,在删除之前,我想检查用户是否有任何进程正在运行,如果正在运行,则终止所有进程并删除。我是这样做的:
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"
无需检查用户是否有任何进程正在运行。如果没有,该命令不执行任何操作。