テキストファイルからユーザーを削除するスクリプトを作成しています。しかし、削除する前にユーザーに実行中のプロセスがあることを確認し、その場合はすべてのプロセスを終了して削除したいと思います。これが私がする方法です:
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"
ユーザーに実行中のプロセスがあることを確認する必要はありません。それ以外の場合、コマンドは何もしません。