Vou dar alguns exemplos de pdbedit
output que encontrei online. Você pode diferir; Se você puder fornecer alguns exemplos do que imprime, esse código pode ser mais adequado ao que você precisa.
Primeiro, você precisa encontrar os nomes de usuário que correspondem ao seu prefixo. Parece que pdbedit
output está no formato username: foo
, então você pode usar awk
para fazer isso:
pdbedit -L -v | awk '/username:/ {print $2}'
Então precisamos encontrar nomes que começam com o seu prefixo, então vamos usar o grep:
pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg
Para ver se a senha de um usuário específico precisa ser alterada, podemos ver se grep
encontrou essa sequência, marcando o código de retorno:
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
Colocando tudo junto com um loop que verifica cada nome:
for name in $(pdbedit -L -v | awk '/username:/ {print $2}' | grep ^eg); do
if pdbedit -v -u $name | grep -q "Password must change" ; then
echo $name
fi
done
Atualizar depois de publicar um exemplo de saída
Esse formato claramente não foi criado por alguém que é fã de ferramentas normais de processamento de texto de linha de comando Unix! Embora você possa, claro, fazer qualquer coisa em qualquer idioma, eu provavelmente mudaria para algo como Python ou Perl para analisar esse. Eu escolhi Perl aqui porque a manipulação de datas e horários do Python é péssima.
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$change = str2time($1);
if ($change <= $now) {
print "$username\n";
}
}
}
Isso imprimirá o nome de usuário do Unix de qualquer usuário cuja senha expirou. Use-o como:
pdbedit -L -v | perl parse.pl
Editar por autor da pergunta
O código final que usei foi:
#!/usr/bin/perl
use Date::Parse;
$now = time();
while (<>) {
if (/Unix username:\s*(.*)/) {
$username = $1;
}
if (/Password must change:\s*(.*)/) {
$expiry = $1;
$change = str2time($expiry);
if ($expiry !~ /^never/ && $change <= $now && $username =~ /^eg[a-z]{3}\d+/) {
print "$username expiry: $expiry\n";
}
}
}
Que produz uma saída assim:
egdfd001 expiry: Mon, 30 Jul 2012 08:12:02 NZST
egjpf001 expiry: Mon, 13 Aug 2012 07:50:03 NZST