Requirement:
- The length of the string must be 12 bits
- The password must contain numbers, lowercase letters, uppercase letters and at least one special characters
- Special characters include: ><+-{}:.&;
For script, see below:
#!/bin/bash
#
# used for create password.
#
function random_num()
{
head -5 /dev/urandom | md5sum | grep -o "[0-9]" | sed -n '1p'
}
function random_lowcase()
{
head -5 /dev/urandom | md5sum | grep -o "[a-z]" | sed -n '1p'
}
function random_uppercase()
{
random_lowcase | tr '[a-z]' '[A-Z]'
}
function random_symbol()
{
case $(random_num) in
1)
echo ">"
;;
2)
echo "<"
;;
3)
echo "+"
;;
4)
echo "-"
;;
5)
echo "{"
;;
6)
echo "}"
;;
7)
echo ":"
;;
8)
echo "."
;;
9)
echo "&"
;;
0)
echo ";"
;;
esac
}
n_num=`head -5 /dev/urandom | md5sum | grep -o "[1-8]" | sed -n '1p'`
n_lowcase=`head -5 /dev/urandom | md5sum | grep -o "[1-$((10-n_num))]" | sed -n '1p'`
n_uppercase=`head -5 /dev/urandom | md5sum | grep -o "[1-$((11-n_num-n_lowcase))]" | sed -n '1p'`
n_symbol=$((12-n_num-n_lowcase-n_uppercase))
function str_num()
{
for((i=1;i<="$n_num";i++))
do
echo -e ""$(random_num)"\c"
done
}
function str_lowcase()
{
for((i=1;i<="$n_lowcase";i++))
do
echo -e ""$(random_lowcase)"\c"
done
}
function str_uppercase()
{
for((i=1;i<="$n_uppercase";i++))
do
echo -e ""$(random_uppercase)"\c"
done
}
function str_symbol()
{
for((i=1;i<="$n_symbol";i++))
do
echo -e ""$(random_symbol)"\c"
done
}
function which_to_print()
{
if [[ $1 -eq 1 ]]; then
str_num
elif [[ $1 -eq 2 ]]; then
str_lowcase
elif [[ $1 -eq 3 ]]; then
str_uppercase
else
str_symbol
fi
}
function random_print1()
{
n=0
for((I=1;I<=2;I++)); do
tmp=`head -5 /dev/urandom | md5sum | grep -o "[1-2]" | sed -n '1p'`
if [[ n -ne tmp ]]; then
n=$tmp
which_to_print $n
else
while [[ $n -eq $tmp ]]; do
tmp=`head -5 /dev/urandom | md5sum | grep -o "[1-2]" | sed -n '1p'`
done
n=$tmp
which_to_print $n
fi
done
}
function random_print2()
{
n=0
for((I=1;I<=2;I++)); do
tmp=`head -5 /dev/urandom | md5sum | grep -o "[3-4]" | sed -n '1p'`
if [[ n -ne tmp ]]; then
n=$tmp
which_to_print $n
else
while [[ $n -eq $tmp ]]; do
tmp=`head -5 /dev/urandom | md5sum | grep -o "[3-4]" | sed -n '1p'`
done
n=$tmp
which_to_print $n
fi
done
}
random_print1
random_print2
echo