Non so cosa faccia quel ${n:=1} ma prova così, da me funziona:

codice:
#!/bin/bash
for utente in Utente1 Utente2 Utente3 Utente4
do
	# Genero una Password per ogni utente
	MATRICE="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
 	LUNGHEZZA="8"
	RANDOM=$(head -1 /dev/urandom | od -N 1 | awk '{ print $2 }')
	PASS=""
	n=1
 	while [ "${n:=1}" -le "$LUNGHEZZA" ]
 	do
 		PASS="$PASS${MATRICE:$(($RANDOM%${#MATRICE})):1}"
 		let n+=1
	done
	# Mando a video l'accoppiata NomeUtente Password
	echo "$utente" "$PASS"
done 
exit 0
Tu prima non azzeravi la stringa PASS e non reinizializzavi il contatore n. Inoltre ho aggiunto l'inizializzazione di un nuovo seme casuale ad ogni giro.