xdotool sleep
sleep используется сам по себе. Его не нужно склеивать с xdotool. Добавить можно. У нас уже реализован перебор в цикле. Сверяем текущий символ с пробелом или переводом строки и добавляем (если совпадает) рандомный sleep; при таком алгоритме лишние отправки return можно полностью выбросить - везде где перенос строки в переменной text, везде будет посылаться return:
#!/bin/bash
WID=`xdotool search --name "Mozilla Firefox" | head -1`
xdotool windowfocus $WID
xdotool mousemove 810 250 click 1
xdotool mousemove 810 260
sleep 0.1
xdotool click 1
NL=$'\x10' #везде где хотим перевод строки в переменной text вводим $NL
text="$NL$NLФорум русскоязычного сообщества Ubuntu$NLВторая строка текста$NL"
for ((i=0; $i<${#text}; i=$(($i+1))))
do
case "${text:$i:1}" in
" ")
#задержки и действия если пробел (500 ... 900 мс)
xdotool type --delay $(( RANDOM%900+500 )) "${text:$i:1}";;
$'\x10')
#задержки и действия если перевод строки (500 ... 900 мс)
sleep 0.$(( RANDOM%9+5 ))
xdotool key "Return";;
* )
#действия в остальных случаях (100 ... 500 мс)
xdotool type --delay $(( RANDOM%500+100 )) "${text:$i:1}";;
esac
done
exit 0
Можно вписать свои действия на любой символ. Чтоб проигрывало mp3 файл, если в строке встречается { или выдавало сообщение - если в строке табуляция. Дописывайте свои действия к селектору case, помещайте их перед * ), и все.