Uma recomendação ... edite a pergunta com o seguinte, para permitir uma resposta mais completa / relevante:
- O seu SO (ou seja, o Solaris é muito diferente do RHEL em acct mgmt)
- Tipo de script / código (Bash, csh, ksh, etc), pois parece que isso é apenas parte de um script e não a coisa toda, já que não podemos ver o shebang (#! / bin / bash, etc ..).
A primeira coisa que noto é que sua variável $ olduser não está definida para a substituição de comando, mas para a cadeia literal "who | grep | -u, -q +30"
A substituição de comandos geralmente é feita com $(command_to_be_run)
ou com backticks como 'command_to_be_run'
. E eu não acho que você está procurando who
, mas deve estar procurando, como mencionado acima, em comandos de contabilidade como logins
ou last
ou até mesmo arquivos de log.
Algo como for-loop para gerar uma lista de usuários e, a partir daí, usar essa última e sua substituição de variável para gerar uma data do último logon para cada participante, para que você possa executar uma instrução de avaliação como if-then-fi eles têm mais de 35 dias.
por exemplo. No Solaris 10, com Bash
LAST_LOGON_DATE=$(last $user | awk 'NR==1{print $5,$6}' | custom_date_convert_cmd )
if [[ ${LAST_LOGON_DATE} -ge 35 ]]; then
echo "${user} is expired. Last logon: ${LAST_LOGON_DATE} days ago"
important_commands_here
fi
Obviamente, o sed / perl provavelmente seria uma solução melhor em termos de velocidade de processamento em relação ao AWK, mas se você está em uma correção e precisa apenas de algo funcionando, esse é provavelmente um bom lugar para começar.
Procure o seu sistema STIG da DISA, pois normalmente eles incluem comandos para fazer exatamente isso ... checar os últimos logins dos usuários, usuários sem senhas, etc ...
link