Adiciona um usuário ao sistema * somente se ele não existir *

42

Estou executando o comando useradd {user} para adicionar usuários ao meu sistema, embora planeje executá-lo em um ambiente automatizado e ele pode acabar sendo executado novamente, mesmo que o usuário já exista.

Existe uma maneira de executar isso somente se o usuário ainda não existir? O usuário não tem uma pasta pessoal.

    
por tarnfeld 07.01.2012 / 14:39

4 respostas

59

id -u somename retorna um código de saída diferente de zero quando o usuário não existe.

Você pode testá-lo simplesmente ... ( &>/dev/null apenas suprime a saída / aviso normal)

id -u somename &>/dev/null || useradd somename 
    
por 07.01.2012 / 15:08
8

A menos que você tenha apenas um pequeno punhado de sistemas, você está fazendo a pergunta errada. A resposta é não executar o useradd, mas deixar este trabalho para uma solução de gerenciamento de configuração, como fantoche ou chef. Isso permitirá que suas definições de usuário sejam centralizadas e impedir que você execute loops e use ssh com usuários root para configurar seus sistemas. Você sempre terá sistemas em um estado de configuração conhecido.

A documentação para fantoches está disponível no link

Como exemplo no fantoche:

user { "bob" : 
  password   => "$1$yv3n066X$Vpb05Ac/fHTicNdT9T5vz1", # generated with 'openssl passwd -1'
  ensure     => present,                              # ensure => absent to remove
  managehome => true,
}
    
por 07.01.2012 / 17:05
8

tente isto:

useradd {user} || echo "User already exists."

ou até mesmo isso:

useradd {user} || true
    
por 31.03.2014 / 13:40
4

useradd não adicionará o usuário novamente se já existir, ele pretende garantir que o número uid e o login uid sejam exclusivos. Se você estiver planejando executar um lote, verifique se os uids que estão sendo usados são exclusivos; useradd iria reclamar para as entradas problemáticas e você precisa capturar os erros / stderr para ver quais contas de usuários tiveram problemas para entrar nos sistemas de contas (/ etc / passwd, group, shadow).

    
por 07.01.2012 / 14:57

Tags