Usando bash estoy tratando de consultar /etc/passwda 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
grepbuscapasswdlíneas con un uid de cuatro o más dígitos. El segundogrepfiltra la línea con uid 1000. El estado de salida será 0 si quedan líneas, 1 si no.fuente
thenlínea, etc.-Evqpara suprimir su salida.getent passwdlugar del/etc/passwdarchivo.Para hacer eso en un
bashbucle, sugiero usarready meIFSgusta:fuente
En lugar de leer
/etc/passwddirectamente, debe usargetent passwd, eso también funcionará si algunos de sus usuarios se guardan en algo como LDAP o similar.awkdeberí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
foundsi se encuentra al menos uno de estos:fuente
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'>= 1000hecho parece tener sentido. Sin> 1000embargo, la pregunta tenía por alguna razón.nobodyparece ser comúnmente6553xo3276x, por lo que probablemente pueda aumentar ese límite superior un poco.Esta construcción no tiene mucho sentido:
El
idcomando 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
nobodyusuario con UID65534presente.fuente
Usando el código de Tom esto funcionó para mí ...
fuente