Bom roteiro. Normalmente eu usaria todos os argumentos restantes como a lista de sites. Algo parecido com isto (eu não testei estes mods):
if [ $# -lt 3 ]; then
echo >&2 "usage: $0 fileperm folderperm owner [site ...]"
exit 1
fi
[. . . ]
fileperm="$1"
folderperm="$2"
owner="$3"
shift 3 # shift first 3 args off of list
if [ $# -eq 0 ]; then
for dir in /var/www/httpdocs/*/ #stackexchange syntax coloring fix*/
do
dir="${dir%/*}"
chg_perms "/var/www/httpdocs/${dir##*/}" "$fileperm" "$folderperm"
chg_owner "/var/www/httpdocs/${dir##*/}" "$owner"
done;
else
for dir # step through positional args ($1,$2,...,$N)
do
chg_perms "/var/www/httpdocs/$dir" "$fileperm" "$folderperm"
chg_owner "/var/www/httpdocs/$dir" "$owner"
done
fi