2015-05-19 2 views
3

я написал следующий скрипт:Bash скрипт для проверки Перенаправление с CURL

#!/bin/bash 

host="www.myhost.com" 

IFS=$" " ; 

for x in $(cat foo.list) ; do 
     srcURI=$(echo $x | awk '{print $1}') ; 
     destURI=$(echo $x | awk '{print $2}') ; 
     srcCURL=$(curl -s -H "Host: ${host}" -I "qualified.domain.local${srcURI}" |grep "Location:" | tr -d [[:cntrl:]]) ; 
     destCURL=$(curl -s -H "Host: ${host}" -I "qualified.domain.local${srcURI}" |grep "301" | tr -d [[:cntrl:]]) ; 

     echo " " 
     echo " "   
     echo -e "srcURI = ${srcURI}" 
     echo -e "destURI = ${destURI}" 
     echo -e "srcCURL = ${srcCURL}" 
     echo -e "destCURL = ${destCURL}" 
     echo -e "Host:DestURI = Location: http://${host}${destURI}" 
     echo -e "Host:srcCURL = ${srcCURL}" 
     echo " " 
     echo " " 
#  if [[ ${srcCURL} == "Location: http://${host}${destURI}" ]] ; then 
#    echo -e "Good"; 
#  else 
#    echo -e "Bad"; 
#  fi 
done 

У меня есть файл с именем foo.list, который имеет список URI, которые я хочу, чтобы проверить, используя мой для цикла; это выглядит следующим образом:

/источник/URI/здесь/Dest/URI/здесь

/source2/URI/здесь/dest2/URI/здесь

/source3/URI/здесь/dest3/uri здесь

Я пытаюсь использовать awk, чтобы назначить источник в $ 1 и пункт назначения до $ 2, который работает, если у меня есть 1 uri, но если у меня есть несколько, он, кажется, разделяет его части.

Код выглядит беспорядочно, потому что у меня есть случайные эхо-сигналы для целей отладки.

В конце скрипта (который прокомментирован) Я пытаюсь сравнить назначение перенаправления исходного URL-адреса с предполагаемым пунктом назначения.

Куда я иду не так?

ответ

3

Не уверен, что я получил все детали в порядке, но я хотел бы попробовать что-то вроде этого:

while read -r src dst; do 
    redir="$(curl -q -s -S -o /dev/null -w '%{redirect_url}' qualified.domain.local"${src}")" 
    if [ $? -eq 0 -a x"$redir" = qualified.domain.local"${dst}" ]; then echo Good; else echo Bad; fi 
done <foo.list 
2

Благодарности lcd047!

Используя то, что вы кладете я получил следующее:

#!/bin/bash 

read -p "Enter the host: " host 

while read -r src dst; do 
     srcCURL=$(curl -s -H "Host: ${host}" -I "some.domain.local${src}" |grep "Location:" | tr -d [[:cntrl:]]) ; 
     dstURL="Location: http://${host}${dst}" 

     #echo ${srcCURL} 
     #echo ${dstURL} 

     if [ $? -eq 0 -a "${srcCURL}" == "${dstURL}" ]; then 
       echo -e "[\033[0;32mOK\033[0m]: ${src} \033[0;1mredirects to\033[0m ${dst}"; 
     else 
       echo -e "[\033[0;31mERROR\033[0m]: ${src} does not redirect to ${dst}"; 
     fi 
done <foo.list 

И это работает безупречно!

Смежные вопросы