运行此代码时,我得到 ./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
答案 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 "<")