Sempre funcionou bem, mas foi preciso pensar numa situação de contorno quando a conexão caia ou quando o roteador wireless dava seus tilts. Neste caso, o download não se completa e a condição test -s "$inteiro" não passa para verdadeiro.
Foi pensado da seguinte forma: comparo a quantidade de bytes entre 2 segundos consecutivos.
Se não forem iguais a variável contagem sofre um reset voltando a valer 1 (um). Se forem iguais a variável contagem é incrementada de 1 a cada 1 segundo. Se a contagem chegar a 300 (5 minutos), é executado o comando para desligar.
Alguns downloads não admitem continuar de onde pararam e talvez seja melhor desligar o computador tão logo que se perceba que o download não será concluído.
#!/bin/bash
# v1.0: 10/21/2006
# v1.1: 04/11/2012
# v1.2: 05/12/2012
parte=""
inteiro=""
contagem=0
until test -s "$inteiro"
do
status_antes=`du "$parte" | awk '{printf "%2s\n",$1}'`
sleep 1
status_depois=`du "$parte" | awk '{printf "%2s\n",$1}'`
if [ "$status_antes" -ne "$status_depois" ]
then
contagem=1
else
let contagem=$contagem+1
if [ "$contagem" -eq 300 ]
then
/sbin/shutdown -h now
fi
fi
echo Download em andamento: $status_depois kB $contagem
sleep 2
continue
done
test -s "$inteiro"
/sbin/shutdown -h now