回答:
そのために使用される最も基本的なツールの1つはおそらくid
です。
#!/bin/bash
if id "$1" >/dev/null 2>&1; then
echo "user exists"
else
echo "user does not exist"
fi
生産する
$ ./userexists root
user exists
$ ./userexists alice
user does not exist
$ ./userexists
user does not exist
if
負の結果チェッカーのみで必要な場合はどうなりますか?
id -u $1 1>/dev/null 2>&1; echo $?
パイプに使用できます
つかまえる
このコマンドは、/ etcファイルと、LDAP、AD、NIS / Yellow Pages、DNSなどのさまざまなリモートサービスによってバックアップできるデータベースのエントリを収集するように設計されています。
ユーザー名がパスワードネームサービスの1つで認識されているかどうかを確認するには、次を実行します。
getent passwd username
これは、OSや実装に応じて、グループ、ホストなどでも機能します。
getent
、getent
Mac OS X にはありません
finger
の出力を解析しますfinger -m <username>
。残念ながらユーザーが見つからない場合はエラーコードはありませんが、見つからない場合はエラー出力が書き込まれます。今のところ欠点はありません。
finger -ms <username> 2>&1 1>/dev/null | wc -l
印刷され0
たユーザが発見された場合(エラー出力がありませんので)それ以外の場合は、より大きな数字を。
chown
実行(驚くことに、すべてのユーザーとして):
T=$( mktemp -t foo.XXX ) ; chown <username> $T
として失敗したroot
場合、アカウント名は無効です。
非root
ユーザーとして失敗した場合は、許可されていない操作または無効なユーザー(または同等のもの)のローカライズされた出力を解析します。LANG
これを確実に行うために、事前に設定してください。
私はあなたが依存し/etc/passwd
、類似したいことを言うだろう(例えば/etc/shadow
、シャドウベースのシステムのために、オフトピックサイドノートでは、いくつかの類似したシステムが使用するかもしれない/etc/master.passwd
または他のそのようなファイル)。
/etc/passwd
典型的には、ユーザが存在するか否かに絶対的な権限の判定として扱われます。このページで説明されている他の方法のいずれかを使用し、それらの他の方法が既存のユーザーを指しているが/etc/passwd
そうでない場合、そのユーザーはシステムに適切に存在しないと言うでしょう。ソフトウェアはおそらく依存しています。
そうは言っても、使用できる他のオプションの組み合わせに別の方法で追加します。
ls -l /home | grep ^customUserName$<BR>
echo $?
明らかに、「customuserName」を確認するユーザーの名前に置き換えます。システムで使用している場合は、/ homeを/ usersに置き換えます。特定のユーザーに対してホームディレクトリが作成されていない場合、/ etc / passwdにすべてのユーザーが見つからない場合があります。これは、ユーザーを単にインポートした場合(つまり、テキスト行を/ etc / passwdに)、ホームディレクトリが作成しない場合に発生する可能性があります人がログインしない限り/されるまで作成されます。
id
かによって有効であると報告された、またはgetent
システムに「適切に」存在しないと報告されているユーザーを述べる理由がわかりません。考慮される。
if id -u "$1" >/dev/null 2>&1; then
...