Usando bash estoy tratando de consultar /etc/passwd
a cualquier usuario con una identificación superior a 1000. Si existen, haga algo, de lo contrario, haga otra cosa. Estoy perplejo. Cualquier ayuda es apreciada.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Respuestas:
Prueba esto:
El primero
grep
buscapasswd
líneas con un uid de cuatro o más dígitos. El segundogrep
filtra la línea con uid 1000. El estado de salida será 0 si quedan líneas, 1 si no.fuente
then
línea, etc.-Evq
para suprimir su salida.getent passwd
lugar del/etc/passwd
archivo.Para hacer eso en un
bash
bucle, sugiero usarread
y meIFS
gusta:fuente
En lugar de leer
/etc/passwd
directamente, debe usargetent passwd
, eso también funcionará si algunos de sus usuarios se guardan en algo como LDAP o similar.awk
debería ser adecuado para el formato de salida separado por dos puntos.Esto imprimiría los nombres de usuario de todos los usuarios con UID> 1000:
Y esto solo se imprimiría
found
si se encuentra al menos uno de estos:fuente
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
hecho parece tener sentido. Sin> 1000
embargo, la pregunta tenía por alguna razón.nobody
parece ser comúnmente6553x
o3276x
, por lo que probablemente pueda aumentar ese límite superior un poco.Esta construcción no tiene mucho sentido:
El
id
comando funciona independientemente de la redirección de entrada. La redirección no tiene sentido aquí de todos modos.Puede usar esta tubería en su comparación de prueba. Le mostrará la identificación de usuario más alta en la máquina:
Es posible que desee ajustarlo para algunos sistemas, ya que puede haber un
nobody
usuario con UID65534
presente.fuente
Usando el código de Tom esto funcionó para mí ...
fuente