Bagaimana saya bisa mengetahui, dalam skrip shell, apakah nama pengguna yang diberikan ada pada sistem saat ini?
/etc/passwd
dan /etc/shadow
tidak lengkap. Pertimbangkan Layanan Direktori OS X, atau Linux dengan integrasi Direktori Aktif yang Serupa.
if id -u "$1" >/dev/null 2>&1; then
...if
dengan pemeriksa hasil negatif?id -u $1 1>/dev/null 2>&1; echo $?
dapat digunakan untuk pipagetent
Perintah ini dirancang untuk mengumpulkan entri untuk database yang dapat didukung oleh file / etc dan berbagai layanan jarak jauh seperti LDAP, AD, NIS / Yellow Pages, DNS dan sejenisnya.
Untuk mengetahui apakah nama pengguna diketahui oleh salah satu layanan penamaan kata sandi, jalankan saja:
Ini juga berfungsi dengan grup, host, dan lainnya, tergantung pada OS dan implementasinya.
sumber
getent
, tidak adagetent
pada Mac OS Xfinger
Parsing output dari
finger -m <username>
. Sayangnya tidak ada kode kesalahan jika tidak ada pengguna yang ditemukan, tetapi jika tidak ditemukan, output kesalahan akan ditulis. Tidak ada kekurangan sejauh ini.Akan dicetak
0
jika pengguna ditemukan (karena tidak ada output kesalahan), angka yang lebih besar sebaliknya.chown
Jalankan (seperti halnya pengguna, secara mengejutkan):
Jika gagal
root
, nama akun tidak valid.Jika gagal sebagai bukan
root
pengguna, parsing output yang mungkin dilokalkan untuk Operasi tidak diizinkan atau tidak valid pengguna (atau setara). TetapkanLANG
sebelumnya untuk melakukan ini dengan andal.sumber
Saya akan mengatakan bahwa Anda ingin mengandalkan
/etc/passwd
dan serupa (misalnya/etc/shadow
untuk sistem berbasis Shadow; pada catatan-off-topik, beberapa sistem yang serupa mungkin menggunakan/etc/master.passwd
atau file-file semacam itu).The
/etc/passwd
biasanya diperlakukan sebagai keputusan otoritatif mutlak pada apakah pengguna ada atau tidak. Jika Anda menggunakan salah satu metode lain yang dijelaskan pada halaman ini, dan jika metode lain menunjuk ke pengguna yang sudah ada tetapi/etc/passwd
tidak, maka saya akan mengatakan bahwa pengguna tidak ada dengan benar pada sistem, dengan definisi standar paling umum yang perangkat lunak kemungkinan akan bergantung.Yang mengatakan, saya akan melemparkan cara lain untuk menambah campuran beberapa opsi lain yang bisa digunakan.
ls -l /home | grep ^customUserName$<BR> echo $?
Jelas, ganti "customuserName" dengan nama pengguna yang ingin Anda periksa. Ganti / beranda dengan / pengguna jika itu yang digunakan sistem Anda. Ini mungkin tidak menemukan semua pengguna di / etc / passwd jika tidak ada direktori home yang dibuat untuk pengguna tertentu, yang dapat terjadi jika Anda hanya mengimpor pengguna (yaitu, baris teks ke / etc / passwd) dan jika direktori home tidak dibuat kecuali / sampai seseorang login.
sumber
id
ataugetent
tidak "benar" ada pada sistem, terutama ketika OP secara jelas menyatakan layanan penamaan untuk dipertimbangkan.