语法错误:预期的操作数(错误标记为“ <”)

时间:2019-08-12 15:41:28

标签: bash for-loop jq

运行此代码时,我得到 ./file.sh:第23行:((:j <:语法错误:预期的操作数(错误令牌为“ <”)。以下代码中的$ orgs + $ i.json如果包含数据,将生成文件,否则,此文件不会生成文件。orgs和repos来自我传递的文件。一旦使用数据创建了json文件,那么我将需要从该json文件中提取一些字段,例如commit,repo,author,file字段。附加我要从中提取值的json文件格式。

Json文件数据如下图所示 enter image description here

#!/bin/bash
IFS=$IFS,
usr='*************'
pwd='*************'
url='*************'
curl --header "Content-Type: application/json" --request GET 
"https://$usr:$pwd@$url" |grep login|cut -d ':' -f2|sed 's/,//g'|sed 
's/"//g' >> MHEOrgs.txt
File=./MHEOrgs.txt

while read orgs; do

#orgs= $i
curl -s --header "Content-Type: application/json" --request GET --user 
"$usr:$pwd" $url/$orgs/repos?page=[1-100] >> $orgs+Repos.json
jq -r '.[].name' $orgs+Repos.json >>$orgs+Repolist.json
user="https://$usr:$pwd@********/$orgs/"
repos=`cat $orgs+Repolist.json`
for i in $repos;
do
    echo $user"$i".git
    #Below commabd will perform scan operation on the githubrepos and 
    generates multiple json files
    ~/go/bin/gitleaks --repo=$user"$i" --report=$orgs+$i.json
     #Now i wanted to get below values from each file generated above.
     numsecs=$(jq ".|length" $orgs+$i.json)
     for ((j=0;j<$numsecs;j++))
     do
        commit=$(jq -r ".[$j]|.commit" $orgs+$i.json)
        author=$(jq -r ".[$j]|.author" $orgs+$i.json)
        file=$(jq -r ".[$j]|.file" $orgs+$i.json)
        repo=$(jq -r ".[$j]|.repo" $orgs+$i.json)
        if [ "${commit}" != "null" ]; then

        echo "\"$repo\"," "\"$file\"," "\"$author\"," "\"$commit\",">> 
        gitleaks-scan-results.csv
        else
        echo "No leaks found"
        fi


      done


    done

done < $File

1 个答案:

答案 0 :(得分:1)

如果实际上没有将Choice1, Choice2, Choice3, Choice4设置为一个(单个整数)数字,则会发生这种情况。

一种可能的发生方式是,如果您的JSON文件中根本没有任何记录;或者它有多个(这意味着您在numsecs的输出中会有多个数字,而bash无法正确解析为单个数字)。


一些例子

零对象文档案例:

jq

多对象文档案例:

$ numsecs=$(jq '. | length' <<<'')
$ declare -p numsecs
declare -- numsecs=""
$ for ((j=0;j<$numsecs;j++)); do break; done
-bash: ((: j<: syntax error: operand expected (error token is "<")