削除する前に、ユーザープロセスを確認して終了してください。

削除する前に、ユーザープロセスを確認して終了してください。

テキストファイルからユーザーを削除するスクリプトを作成しています。しかし、削除する前にユーザーに実行中のプロセスがあることを確認し、その場合はすべてのプロセスを終了して削除したいと思います。これが私がする方法です:

    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"

ユーザーに実行中のプロセスがあることを確認する必要はありません。それ以外の場合、コマンドは何もしません。

関連情報