スクリプトが中断されたときに後始末をする

#!/bin/sh
#trap_exit.sh

#終了時に呼び出される関数
cleanup(){
    echo "Doing cleanup jobs."
    [ -n "$tmpfile" ] && rm "$tmpfile"
}

#シグナルを受信したときにcleanupを実行
trap cleanup EXIT

tmpfile=`mktemp /tmp/tmp.XXXXXXXX` || exit 1
echo "Press Ctrl-C to abort."

for i in one two three four five six seven eight nine ten; do
    echo $i >> "$tmpfile"
    sleep 1
done

cat "$tmpfile"
$ ./trap_exit.sh 
Press Ctrl-C to abort.
one
two
three
four
five
six
seven
eight
nine
ten
Doing cleanup jobs.

$ ./trap_exit.sh 
Press Ctrl-C to abort.
Doing cleanup jobs.

$ ls /tmp/tmp.*
ls: /tmp/tmp.*: No such file or directory