Я принимаю удар здесь, но я думаю, что вас смущает тот факт, что curl
иногда возвращает более одной информации заголовка (следовательно, более одного кода состояния), когда первоначальный запрос перенаправляется.
Например:
[me@hoe]$ curl -sIL www.google.com | awk '/HTTP/{print $2}'
302
200
Когда вы печатаете это в цикле, может показаться, что второй код состояния стал частью следующего URL.
Если это действительно ваша проблема, то есть несколько способов решить ее в зависимости от того, чего вы пытаетесь достичь.
Если вы не хотите следовать перенаправлениям, просто пропустите опцию -L
в curl
statuscode=$(curl -sI $i | awk '/HTTP/{print $2}')
Toвзять только последний код состояния, просто перенаправить всю команду на tail -n1
, чтобы взять только последний.
statuscode=$(curl -sI $i | awk '/HTTP/{print $2}' | tail -n1)
Чтобы показать все коды в заказе, замените все разрывы строк напробелы
statuscode=$(curl -sI $i | awk '/HTTP/{print $2}' | tr "\n" " ")
Например, используя третий сценарий:
[me@home]$ cat script.sh
#!/bin/bash
for URL in www.stackoverflow.com stackoverflow.com stackoverflow.com/xxx
do
statuscode=$(curl -siL $i | awk '/^HTTP/{print $2}' | tr '\n' ' ')
echo -e "${URL}\t${statuscode}"
done
[me@home]$ ./script.sh
www.stackoverflow.com 301 200
stackoverflow.com 200
stackoverflow.com/xxx 404