generowanie haseł ze znakiem specjanym

Linux - system operacyjny dla kazdego

Witam.
Mam do przerobienia ponad 150 haseł userów na hasła ustawowe czyli
minimum 8 znaków w tym jeden znak specjalny i cyfra.
Żeby nie klepać tego z palucha i nie pogubić się jaki user ma jakie hało
zaczołem pisać sobie skrypcik od wygenerowania tych haseł i zapisanie
ich do pliku. Wygląda to w następujący sposób

# plik z nazwamu userów lista.txt
adam
tom
gringo

# konta.sh
#!/bin/sh
while read KONTO USERNAME ; do
PASSWORD=`dd if=/dev/random bs=1 count=4 2>/dev/null |xxd -g 4|awk '{print $2}'`
./autopasswd $KONTO $PASSWORD
echo $USERNAME $KONTO $PASSWORD >> konta.log
done

# autopasswd
#!/usr/bin/expect -f
set password [lindex $argv 1]
spawn passwd [lindex $argv 0]
sleep 1
expect "password:"
send "$password\r"
sleep 1
expect "password:"
send "$password\r"
expect eof


I odpalam to w następujący sposób

# cat lista.txt|./konta.sh
I ładnie zapisuje do pliku konta.log w stylu
adam ba6b4c14
tom fd8f867f
gringo 10ds8ly7

Pomoże mi to ktoś przerobić ?
Marcin S napisał(a):
sproboj mkpasswd
Ale mkpasswd nie daje znaków specjalnych takich jak !@#$%^&*()
*** Marcin S:

% apg -a 1
Rfwk(?e[)
ycFP3*}H
veibHG\$
K:$X/m%y
;4osu*bP
;h3\o~cx