This may take a while, but i want to touch on this part first...
Originally Posted By: Virtual1
Code:

if [ $EUID != 0 ] ; then
	admins=" $(dscl . -read /Groups/admin | grep GroupMembership | cut -c 23-999) "
	if [ -z "$(echo "$admins" | grep " ${USER} ")" ] ; then
		echo "You must be logged in as an administrator to run this installer."
		exit
	fi 

The dscl stuff can be omitted and handled more simply this way (using id):
Code:
if [ `id -u` -ne 0 ]
then
	if id |grep -q -s -v '80(admin)'
	then
		echo "You must be logged in as an administrator to run this script."
		exit
	fi

But those lines also raise a question: is this script intended for the public at large... or just for your personal usage?

--

Then the conclusion of your authorization section goes like this...
Originally Posted By: Virtual1
Code:

		exit
	fi
	sudo "$0"
	exit
fi

I totally get what you're doing there, but i've never seen it done anywhere else before. Maybe it's kosher, but my gut tells me there must be some reason why that might be regarded as slightly more than unorthodox. The normal (safer?) route would be to tell the user to re-execute it using sudo by themselves (not do it for them). I realize "it works" but...

One seldom (if ever) sees scripts with 'sudo' in them — let alone using it to call another instance of themselves. Did you devise that method on your own, or dig it up somewhere? Anyway, knowing whether this script is destined for 'jon q public' or seasoned techs will give me some idea on which way i may modify the content.

--

Also, It appears that the version you posted is strictly handling the 12 partition service disk. So then, is 12 partitions written in stone here? Or was your use of the $pl array done so that this version could be quickly adapted for fewer partitions by simply commenting out a few lines? [i'm trying to decide whether to do away with the array approach entirely, or does that aspect need to remain intact?]

OTOH, using 2 simpler arrays (each 1 dimensional) might be even better, because their index value can "tie" them together while also eliminating much of those fancy ${parameter%=*} expansions. (it's only at the very end when it all gets fed to diskutil that both names and sizes actually need to be in "sync"... and having them stuck together at the very start of the script isn't serving any purpose that i can see).


[p.s. - i am embroiled in other "projects" so give me a week or so... but i'm definitely interested in knocking this off before summer vaca starts, if possible.]