ユーザーをリストし、ユーザーがシステムにない場合は、ゼロ以外の終了コードを返します。

ユーザーをリストし、ユーザーがシステムにない場合は、ゼロ以外の終了コードを返します。

ユーザーを見つける必要があり、そのユーザーがシステムにない場合、コマンドはゼロ以外の戻りコードで終了する必要があります。でこれを行うことはできますが、スクリプトではなく行bashコマンドで必要です。bashそれは可能ですか?

答え1

システムにユーザーが存在するかどうかをテストする良い方法は、を使用することです。getentこのgetentユーティリティは、さまざまな「データベース」からさまざまな情報を返すことができますpasswd(たとえば、利用可能なログインシェルのエクスポート)。groupgetent

ユーザーがtestuserシステムにいるかどうかをテストするには、ユーザーのエントリを要求getentしますpasswd

getent passwd testuser

passwd成功すると、1つの項目が出力され、終了ステータスは0になりますgetent。失敗した場合、出力はなく、終了ステータスはゼロではありません。私はこれがあなたが要求したコマンドだと思います。

ユーティリティによって生成されたすべての出力を削除し、if次の文で使用できます。

theuser=testuser

if getent passwd "$theuser" >/dev/null
then
    printf 'The user "%s" exists\n' "$theuser"
else
    printf 'The user "%s" does not exist\n' "$theuser"
fi

もちろん/etc/passwd、いくつかのコマンドを使用してファイルを直接解析することはできますが、grepこれはエラーが発生しやすく(getent上記の使用法と比較して)、いくつかの形式のディレクトリサービスを使用するシステムでは正しく機能しません。

関連情報