Converter seqüência numérica do arquivo para sair do código no shell

2

Gostaria de usar o grep / etc / password para um nome de usuário e retornar os dois últimos dígitos de um número de identificação do usuário como o código de retorno.

Isso porque eu tenho um aplicativo cuja principal maneira de interagir com outros programas é algo como integer_variable = run("some command") , que pega o valor do byte do código de saída do comando.

Eu posso fazer isso usando algo como o seguinte comando

perl -n -e 'exit $1%100 if /^username:x:(\d+):/' /etc/passwd

Existe um equivalente usando awk ou algum outro utilitário padrão?

    
por RedGrittyBrick 04.12.2013 / 15:22

2 respostas

2
id=$( getent passwd $username | cut -d: -f3 | sed 's/.*\(..\)$//' )

com o awk

awk -v u=$username -F: '$1 == u {exit $3%100}' /etc/passwd
    
por 04.12.2013 / 15:31
2

O que você quer dizer com "algum outro utilitário padrão"? Se você quiser que um script de shell retorne status de saída arbitrário, você pode passar qualquer valor para o shell embutido exit :

exit 'awk -F: $USER '{print $2}' /etc/passwd'

(ou apenas exit 35 , etc.)

Isso permite transformar a saída em um status de saída, mesmo para programas que não têm uma operação exit , como perl e awk do. Mas tenha em mente que a convenção Unix é para programas bem-sucedidos que retornem 0 , então você terá algum comportamento estranho se você executar seu programa especial a partir da linha de comando (etc.)

    
por 04.12.2013 / 15:30

Tags