如果shell脚本中的条件基于404未授权的错误

时间:2014-12-02 19:43:27

标签: shell curl

这是我的shell脚本。我想根据我得到的状态为我的curl命令设置一个条件。在grepping" Http / 1.1 401 Unauthorized"从第一个curl命令。之后,如果状态为401,我需要将其置于一个条件,执行第二和第三个curl命令。请帮忙

STATUS="HTTP/1.1 401 Unauthorized"
read $STATUS

for ((i=1; i<=2000; i++)); do
curl -i -vs -X POST -D post.txt -H "$SESSION_TOKEN" -H "$AUTH_TOKEN" -H "Accept:$ACCEPT_HEADER" -H "Content-Type:text/plain" "http://$BASE_URI/api/$PLATFORM//$CHANNEL_ID/subscription" | grep -e "*Unauth*" >> post.txt

if [$STATUS]
then
curl -i -vs -X POST -D tmp.txt -H "Content-Type:text/plain" --data "$SECRET" -H "Accept:$ACCEPT_HEADER" -H "Connection:close" http://$BASE_URI/api/${PLATFORM}/authenticate >> tmp1.txt
SESSION_TOKEN=`grep SessionToken tmp.txt`

curl -i -vs -X POST -D tmp2.txt -H "$SESSION_TOKEN" -H "Content-Type:text/plain" -H "Content-Type:application/json" --data "{ \"username\":\"$USER_NAME\",\"password\":\"$PASSWORD\", \"rememberMe\":\"false\"}" http://$BASE_URI/api/web/users/authenticate >> data.json
AUTH_TOKEN=`grep Authorization tmp2.txt`

continue

fi

done

2 个答案:

答案 0 :(得分:4)

正确的解决方案:

res=$(curl -s -o /dev/null -w '%{http_code}\n' http://google.fr)
if ((res == 404)); then
    echo "404 spotted"
fi 

res=$(curl -s -o /dev/null -w '%{http_code}\n' http://google.fr)
if [[ $res == 404 ]]; then
    echo "404 spotted"
fi 

检查

man curl | less +/'^ *-w'

答案 1 :(得分:0)

您必须捕获卷曲输出并检查状态行:

output=$( curl -i ... )

if [[ $output == "$STATUS"* ]]; then
    # I was unauthorized
else
    # ...
fi

请注意我[(以及我在答案中使用的[[) 不仅仅是语法,它是一个命令,因此它需要在它和它的参数之间留一个空格