Você pode enviar a saída de < /dev/urandom tr -dc $1 | head -c $2
(tomei a liberdade de remover o UUOC e o aparentemente desnecessário env LC_CTYPE=C
e echo
; você pode restaurá-los em sua versão) para um loop while
lendo um caractere no momento e repetindo diferentes seqüências de escape de cor seguidas por um caractere diferente baseado no caractere de leitura:
#!/bin/bash
if [ $# == 2 ]
then
< /dev/urandom tr -dc $1 | head -c $2 | while read -n 1 x
do
case $x in
A)
echo -ne '3[0;34mA'
;;
G)
echo -ne '3[0;32mG'
;;
C)
echo -ne '3[0;31mC'
;;
T)
echo -ne '3[0;33mT'
;;
esac
done
echo -e '3[0m'
exit 0
fi
exit 1