【问题标题】:line 39: [: ==: unary operator expected第 39 行:[: ==: 应为一元运算符
【发布时间】:2015-03-11 19:03:05
【问题描述】:

我正在尝试生成具有特定要求的密码。 当我进入 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++" 行,则没有错误。但是我需要增加我的索引才能退出循环并检查密码的最小长度

【问题讨论】:

  • 您没有使用大多数密码存储应用程序或pwqgen 中的密码生成器是否有原因?这是作业吗?
  • all=( {0..9} {a..z} {A..Z} )
  • 是的,这是一个作业,所以我需要自己创建一个密码生成器

标签: arrays bash unary-operator


【解决方案1】:

如果${phrase[$i]}(顺便说一下,在[$i] 上下文中,${phrase[i]} 也不需要$)是空字符串,if 测试将变为[ == value-of-all-n ],这不是有效的测试。

要么引用变量(这几乎总是正确的做法),要么阻止它成为空字符串。 (i++ 应该发生在内循环之外吗?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-31
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2022-11-18
    • 2018-10-25
    相关资源
    最近更新 更多