텍스트 파일에서 사용자를 삭제하는 스크립트를 작성 중입니다. 하지만 삭제하기 전에 사용자에게 실행 중인 프로세스가 있는지 확인하고, 그렇다면 모든 프로세스를 종료하고 삭제하고 싶습니다. 이것이 내가 하는 방법이다:
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) 쉘 스크립트 변수 할당 주위에는 공백이 있을 수 없습니다. pids = ...
해야 한다 pids=...
.
2) kill
여러 PID를 사용할 수 있습니다. for pid in $pids ...
루프가 필요하지 않습니다 . (다음 항목과 관련은 없지만)
3) 다음을 수행하면 코드가 크게 단순화될 수 있습니다.
pkill -KILL -U "$name"
사용자에게 실행 중인 프로세스가 있는지 확인할 필요가 없습니다. 그렇지 않은 경우 명령은 아무 작업도 수행하지 않습니다.