コマンド実行時にバックアップを取る

#!/bin/sh
#backup.sh コマンド(引数を含む)

allarg=$*
daytime=`date +%y%m%d_%H%M%S`

shift
#バックアップ処理
while [ -n "$1" ]; do
    if [ -f $1 ]; then
        cp -i $1 $1.~$daytime
    fi
    shift
done

#コマンドを実行
$allarg
#allargの値を$1,$2...に戻す
set -- $allarg
shift
#バックアップファイルを削除する処理
while [ -n "$1" ]; do
    if [ -f $1.~$daytime ]; then
        rm -i $1.~$daytime
    fi
    shift
done
$ ./backup.sh vi autogz.sh 
rm: remove 通常ファイル `autogz.sh.~100215_191351'? no

$ ls
autogz.sh autogz.sh.~100215_191351