3

I want to create a script that change a username. I want to check if the user is not a system user. My idea is to check /etc/passwd and pick only users with an ID between 1000 and 60000 and users that have a /home directory like

user:x:1005:1021::/home/user:/bin/sh

My grep command for now is like

egrep -E '1[0-9]{3}.*/home' /etc/passwd 

As you can see, it doesn't match my [1000-60000] pattern nor the name

wjandrea
  • 14,236
  • 4
  • 48
  • 98
danaso
  • 147
  • 1
    Minor point: grep -E is the same thing as egrep. There's no point in using both (egrep -E), just use grep -E. – terdon Jul 17 '19 at 14:47

1 Answers1

6

You can use awk to find local users with id >= 1000:

awk -F: '$3>=1000 && $3!=65534 {print $1}' /etc/passwd

To also check for a home folder below /home:

awk -F: '$3>=1000 && $3 != 65534 && $6 ~ /^\/home/ {print $1}' /etc/passwd

Replace /etc/passwd with <(getent passwd) to list all users including network accounts ...

See also this related question, as well as this one.

pLumo
  • 26,947