id=$( getent passwd $username | cut -d: -f3 | sed 's/.*\(..\)$//' )
com o awk
awk -v u=$username -F: '$1 == u {exit $3%100}' /etc/passwd
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?
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.)