Usando o bash, estou tentando consultar /etc/passwd
qualquer usuário com um ID acima de 1000. Se eles existirem, faça alguma coisa, então faça outra coisa. Estou perplexo. Qualquer ajuda é apreciada.
if [ "$(id -u)" -gt "1000" </etc/passwd]; then
do something
else
do something else
fi
Respostas:
Tente o seguinte:
A primeira
grep
pesquisapasswd
por linhas com um uid de quatro ou mais dígitos. O segundogrep
filtra a linha com o uid 1000. O status de saída será 0 se alguma linha permanecer, 1 se não.fonte
then
linha, etc.-Evq
para suprimir sua saída.getent passwd
vez do/etc/passwd
arquivo.Para fazer isso em um
bash
loop, sugiro usarread
eIFS
gostar:fonte
Em vez de ler
/etc/passwd
diretamente, você deve usargetent passwd
isso também funcionará se alguns de seus usuários forem salvos em algo como LDAP ou algo assim.awk
deve ser adequado para o formato de saída separado por dois pontos.Isso imprimiria os nomes de usuário de todos os usuários com UID> 1000:
E isso seria impresso apenas
found
se pelo menos um deles fosse encontrado:fonte
getent passwd | awk -F: '$3 >= 1000 && $3 < 2000 {print $1}'
>= 1000
fato parece fazer sentido. A pergunta teve> 1000
por algum motivo, no entanto.nobody
parece ser comum6553x
ou3276x
, então você provavelmente pode aumentar um pouco esse limite superior.Essa construção não faz muito sentido:
O
id
comando funciona independentemente do redirecionamento de entrada. O redirecionamento não faz sentido aqui de qualquer maneira.Você pode usar esse pipeline na sua comparação de teste. Ele mostrará o maior ID de usuário na máquina:
Você pode ajustá-lo para alguns sistemas, pois pode haver o
nobody
usuário com o UID65534
presente.fonte
Usando o código de Tom, isso funcionou para mim ..
fonte