Eu testei isso com o ksh, que acredito ser o shell usado no AIX. Ao contrário do meu comentário à pergunta, parece "até" funciona bem. Este script assume que bc está funcionando; Não tenho certeza se a sintaxe $( )
funciona em seu provável shell antigo, mas é uma aposta e sem informações de versão específica / shell, ele terá que fazer.
Uso: thisscript.sh *minutes*
Chama o script com um número de minutos . Ele executará os comandos a cada segundo até que seja contado do loop_total calculado para zero.
Não há saída visível além de algumas mensagens de "início / fim" e de duração. Tudo é canalizado para o LOG_FILE. Se você quiser saída para a tela, você provavelmente terá que usar variáveis para armazenar os dados e, em seguida, saída para o LOG_FILE. Felicidades.
#!/bin/sh
LOG_FILE="connections.txt"
PORT="16752"
COMMAND="netstat -an | grep ${PORT} | grep ESTABLISHED | wc -l"
TIMESTAMPER="date +'%D %H:%M:%S'" # Format like "mm/dd/yy hh:mm:ss"
if test -z "$1" ; then
echo "ERROR: No duration provided"
exit 1
else
INPUT="$1" # Store the number of minutes wanted
LOOP_TOTAL=$(( ${INPUT} * 60 ))
echo "Started on $( eval ${TIMESTAMPER} )"
echo "Executing for: ${LOOP_TOTAL} seconds (${INPUT} minutes)"
COUNTDOWN=${LOOP_TOTAL} # Initialize counter
until test ${COUNTDOWN} -eq 0 ; do
COUNTDOWN=$(echo "${COUNTDOWN} - 1" | bc)
OUTPUT=$( eval ${COMMAND} )
if test -z "${OUTPUT}"; then
OUTPUT="0" # greps are blank when no connection, so fill out as 0
fi
TIMESTAMP=$( eval ${TIMESTAMPER} )
echo "${TIMESTAMP} #${OUTPUT}"
sleep 1;
done >> ${LOG_FILE}
echo "Finished on $( eval ${TIMESTAMPER} ) "
fi