0

I am trying to generate a random password with certain requirements.

Minimum 8 characters

Atleast 1 lowercase letter

atleast 1 uppercase letter

atleast 1 number

must have 1 special character

Atm I am trying to compare a random passphrase, that I generate, with the number array so that I can determine if a number exists in the generated passphrase. After getting this to work I want to use a similar check for the other arrays (lowercase, uppercase and special chars).

However when I run my script if $phrase[1] = F and $num[1] = 1 my code will echo "fine" instead of echoing false... the two values are not equal so I do not know why its not working?

#!/bin/bash
#SET ARRAYS
num=( 0 1 2 3 4 5 6 7 8 9 )
all=( a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 )

echo

#GENERATE RANDOM PASSPHRASE
for (( i=0; i<8; i++ ))
do
phrase[$i]=${all[$RANDOM%62]}
        for (( j=0; j<10; j++ ))
        do
                #CHECK IF A VALUE FROM $NUM ARRAY IS IN $PHRASE
                if [ ${phrase[$i]}==${num[$j]} ]
                then
                echo phrase[$i]: ${phrase[$i]} #debug
                echo num[$j]: ${num[$j]}       #debug
                echo fine                     
                else
                echo false
                fi
        done
done

printf "%s" "Phrase: ${phrase[@]}" && echo
echo

echo ${num[@]}
echo

1 Answer 1

1

You need spaces around the == operator. Otherwise, bash only sees one large word and tests

[ -n "${phrase[$i]}==${num[$j]}" ]
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.