Como Thrig aponta, você está esperando que o PATH seja alterado fora da subshell na qual o script é executado?
Isso não vai funcionar. Quando você exporta variáveis, faz isso somente para o shell atual .
Seu script parece bom, tente adicionar uma linha que imprima o PATH na parte inferior dele para garantir que:
echo 'export PATH=$PATH":$HOME/.bin"' >> ~/.profile
mkdir ~/.bin
cp passwrdgen ~/.bin
chmod +x ~/.bin/passwrdgen
. ~/.profile
echo "$PATH"
echo Done!