2015-03-11 7 views
1

Я пытаюсь сгенерировать пароль с определенными требованиями. Когда я вхожу в то время цикла, чтобы сгенерировать случайный характер из массива оно хорошо, пока я не добавить счетчик для моего индекса «$ я»строка 39: [: ==: ожидаемый операционный оператор

С помощью следующего кода:

#!/bin/bash 

#SET ARRAY VALUES 
all=(0 1 2 3 4 5 6 7 8 9 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) 

echo 

#SET COUNT VALUES TO 0 
numc=0 
lowc=0 
upc=0 
i=0 

while true; 
do 
#GENERATE PASSWORD 
phrase[$i]=${all[$RANDOM%62]} 
    #CHECK IF PASSWORD MEETS REQUIREMENTS 
    for ((n=0; n<10; n++)) 
    do 
      if [ ${phrase[$i]} == ${all[$n]} ] 
      then 
      echo num ${all[$n]} 
      let "numc++" 
      let "i++" 
      fi 
    done 

Я получаю ошибку "строка 39: [: ==: ожидаемый унарный оператор"

, но если я удалю линию let "i++", то ошибки не будет. Но мне нужно увеличить свой индекс для того, чтобы выйти из цикла и проверить минимальную длину пароля

+0

Есть ли причина, по которой вы не используете генератор паролей, как в большинстве приложений для хранения паролей, или ['pwqgen'] (http: //www.openwall. ком/passwdqc /)? Это задание? –

+2

'all = ({0..9} {a..z} {A..Z})' – kojiro

+0

да его назначение, поэтому мне нужно создать генератор паролей самостоятельно – hotlinks0

ответ

2

Если ${phrase[$i]} (кстати вам не нужно $ в [$i] контексте ${phrase[i]} работает тоже) когда-либо пустая строка, if тест будет [ == value-of-all-n ] который не является действительным тестом.

Либо укажите переменные (что почти всегда правильно делать), либо не допускайте, чтобы это когда-либо являлось пустой строкой. (Было ли это, что i++ должно произойти за пределами внутреннего цикла?)

+0

Спасибо. Это сработало для меня – hotlinks0

 Смежные вопросы

  • Нет связанных вопросов^_^