0

我在这个 for 循环中做错了什么?我有$gGID包含一些数字的变量。我有另一个使用列表的顶部数字,它是$ONEGID变量。我想使用$ONEGID被匹配到列表中$gGID,如果匹配则继续执行其他操作。

echo $ONEGID

116899029375914044550 

我收集里面的$gGID东西

gGID=$(curl -A 'Mozilla/4.0' --silent "https://www.google.com/search?q=$Daniel%20Sandman%20plus.google.com" | grep -P -o '(?<=plus.google.com/)[^az/u]+(?=/)')

这就是$gGID给我的..

echo $gGID

116899029375914044550
116899029375914044550
116899029375914044550
108176814619778619437
108176814619778619437
108176814619778619437
105237212888595777019
105237212888595777019
105237212888595777019

这是我用来匹配它的 for 循环。

for USERS in $gGID; do
    if [ "$USERS" = "$ONEGID" ]; then
        echo "More than one match"
    else
        echo "Just one match"
    fi
done

我尝试了多种方式,但没有弄清楚。我看不出我做错了什么。难道是我存储的变量$gGID算作一个数字,这就是为什么?

4

2 回答 2

1

不确定你的意思,为什么当它不匹配时你会回显“只有一个匹配”?无论如何,这是你的意思吗?

#!/bin/bash

ONEGID=116899029375914044550  

gGID=\
"116899029375914044550 
116899029375914044550 
116899029375914044550 
108176814619778619437 
108176814619778619437 
108176814619778619437 
105237212888595777019 
105237212888595777019 
105237212888595777019"

matches=0

for USERS in $gGID; do 
    if [[ $USERS == $ONEGID ]]
    then 
        (( matches++ ))
    fi 
done 

if (( matches == 0 ))
then
    echo "no matches"
elif ((matches == 1 ))
then
    echo "Just one match"
else
    echo "$matches matches"
    echo "more than one match"
fi

(在问题更改为包括 curl 之前进行了测试 - 也适用于 curl)

于 2012-06-03T14:00:48.343 回答
1

如果您只想获取匹配数,请使用grep. 特别是,您应该查看-c(count)、-F(plain text) 和-x(full line) 开关:

$ grep -cFx "$ONEGID" <<<"$gGID"
3

实际上,您可以$gGID完全跳过变量并curl直接使用:

curl -A 'Mozilla/4.0' --silent "https://www.google.com/search?q=$Daniel%20Sandman%20plus.google.com" | grep -P -o '(?<=plus.google.com/)[^az/u]+(?=/)' \
    | grep -cFx "$ONEGID"

(为了可读性而拆分)

于 2012-06-03T14:11:14.417 回答