Need help with find its action

I am writing a shell script that takes at least 2 arguments. The first is an octal representation of file permissions, the second is a command that is executed on all the files found with that permission.

#!/bin/sh
find . -perm $1 -exec $2 $3 $4 {} \;

invoked: ./script.sh 543 ls -la

what I have now works alright, but it assumes that there are no more than 2 options with the command. Also on the system I'm using it ignores the $3 and $4 if not further arguments were passed, but this is poor style and I'm guessing some systems may get messed up.

I tried

#!/bin/sh
shift
find . -perm shift -exec
while [$# gt 0]
do
    shift
end
{} \;

but this didn't work.

Is my question clear or should I clarify?
Thanks for the help.

Try

#!/bin/sh
var1="$1"
shift
find . -perm "$var1" -exec "$@" {} \;

thanks, it works
why do you put the variables in double quotes?

In order to avoid possible future trouble with parameters that contain non-alphanumerical characters. Perhaps some of the double quotes are superfluous in this case.