Menggunakan bash, saya mencoba untuk meminta /etc/passwd
pengguna dengan id lebih dari 1000. Jika ada, lakukan sesuatu, atau lakukan yang lain. Saya bingung. Bantuan apa pun dihargai.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Jawaban:
Coba ini:
grep
Pencarian pertamapasswd
untuk baris dengan jumlah empat atau lebih digit.grep
Filter kedua menyaring baris dengan uid 1000. Status keluar akan menjadi 0 jika ada garis yang tersisa, 1 jika tidak.sumber
then
garis, dll.-Evq
untuk menekan outputnya.getent passwd
bukan/etc/passwd
file.Untuk melakukannya dalam satu
bash
lingkaran, saya sarankan menggunakanread
danIFS
menyukai:sumber
Alih-alih membaca
/etc/passwd
secara langsung, Anda harus menggunakangetent passwd
, yang juga akan berfungsi jika beberapa pengguna Anda disimpan dalam sesuatu seperti LDAP atau semacamnya.awk
harus cocok untuk format output yang dipisahkan oleh titik dua.Ini akan mencetak nama pengguna semua pengguna dengan UID> 1000:
Dan ini hanya akan mencetak
found
jika setidaknya ada yang ditemukan:sumber
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
sepertinya memang masuk akal. Tapi pertanyaannya ada> 1000
karena beberapa alasan.nobody
tampaknya biasa6553x
atau3276x
, jadi Anda mungkin bisa menaikkan batas atas itu sedikit.Konstruk ini tidak masuk akal:
The
id
perintah bekerja terlepas dari pengalihan masukan. Pengalihan tidak masuk akal di sini.Anda dapat menggunakan pipa ini dalam perbandingan pengujian Anda. Ini akan menunjukkan kepada Anda id pengguna tertinggi pada mesin:
Anda mungkin ingin men-tweak untuk beberapa sistem karena mungkin ada
nobody
pengguna dengan65534
hadiah UID .sumber
Menggunakan kode Tom ini berhasil bagi saya ..
sumber