第39行:[:==:一元运算符预期

时间:2015-03-11 19:03:05

标签: arrays bash unary-operator

我正在尝试生成具有某些要求的密码。 当我进入while循环以从数组生成一个随机字符时,我可以添加我的索引“$ i”的计数

使用以下代码:

#!/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++"行,则没有错误。但我需要增加索引以退出循环并检查密码的最小长度

1 个答案:

答案 0 :(得分:2)

如果${phrase[$i]}(在$上下文[$i]工作中也不需要${phrase[i]}),那么if就是空字符串} test将成为[ == value-of-all-n ],这不是有效的测试。

引用变量(这几乎总是正确的事情)或防止它变成空字符串。 (i++是否应该在内循环之外发生?)