This is a random password generator script for Bash. It generates a password with 1 special character, 1 number, 1 lowercase letter, 1 uppercase letter and 9-16 additional characters from a combination of numbers, lowercase and uppercase letters. Note that I excluded “0” zero, “i” and “l” to avoid confusion.
#!/bin/bash
if [[ $1 = -m ]]; then
for i in `seq $2`;
do
choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
{
choose '!@#$%&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 8 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}'
echo ""
done
else
choose() { echo ${1:RANDOM%${#1}:1} $RANDOM; }
{
choose '!@#$%&'
choose '0123456789'
choose 'abcdefghijklmnopqrstuvwxyz'
choose 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
for i in $( seq 1 $(( 8 + RANDOM % 8 )) )
do
choose '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
done
} | sort -R | awk '{printf "%s",$1}'
echo ""
fi
If you want to change the length of the password then modify the following line
for i in $( seq 1 $(( 8 + RANDOM % 8 ))
First 8 is the fixed number of generated characters and the second 8 indicates a random number of additional characters, up to an additional 8 characters.
In order to generate multiple passwords, run the script with -m # option, where # is the number of passwords that you want to generate. Like so
./foo.sh -m X
In order to save generated passwords to a file, redirect output of the script like so
./foo.sh -m X > file.txt
This will create a file named file.txt that will contain your fresh passwords.