Как проверить состояние URL-адресов из текстового файла с помощью скрипта оболочки bash
Я должен проверить статус 200 http-адресов и узнать, какие из них являются сломанными ссылками. Ссылки присутствуют в простом текстовом файле (скажем, URL.txt, который присутствует в моей папке~). Я использую Ubuntu 14.04 и я новичок в Linux. Но я понимаю, что оболочка bash очень мощная и может помочь мне достичь того, чего я хочу.
моим точным требованием было бы прочитать текстовый файл, который имеет список URL-адресов и автоматически проверить, работают ли ссылки, и написать ответ на новый файл с URL-адресами и соответствующим им статусом (рабочий / сломанный).
4 ответов
Я создал файл "checkurls.sh" и поместил его в мой домашний каталог, где URL-адреса.txt файл находится. Я дал привилегии execute файлу, используя
$chmod +x checkurls.sh
содержание checkurls.sh приведено ниже:
#!/bin/bash
while read url
do
urlstatus=$(curl -o /dev/null --silent --head --write-out '%{http_code}' "$url" )
echo "$url $urlstatus" >> urlstatus.txt
done <
наконец, я выполнил его из командной строки, используя следующий -
$./checkurls.sh urls.txt
вуаля! Это работает.
#!/bin/bash
while read -ru 4 LINE; do
read -r REP < <(exec curl -IsS "$LINE" 2>&1)
echo "$LINE: $REP"
done 4< ""
использование:
bash script.sh urls-list.txt
пример:
http://not-exist.com/abc.html
https://kernel.org/nothing.html
http://kernel.org/index.html
https://kernel.org/index.html
выход:
http://not-exist.com/abc.html: curl: (6) Couldn't resolve host 'not-exist.com'
https://kernel.org/nothing.html: HTTP/1.1 404 Not Found
http://kernel.org/index.html: HTTP/1.1 301 Moved Permanently
https://kernel.org/index.html: HTTP/1.1 200 OK
для всего, прочитайте Руководство Bash. См.man curl
, help
, man bash
как хорошо.
как насчет добавления некоторого параллелизма к принятому решению. Позволяет изменить скрипт chkurl.sh
чтобы быть немного легче читать и обрабатывать только один запрос за раз:
#!/bin/bash
URL=${1?Pass URL as parameter!}
curl -o /dev/null --silent --head --write-out "$URL %{http_code} %{redirect_url}\n" "$URL"
и теперь вы проверяете свой список, используя:
cat URL.txt | xargs -P 4 -L1 ./chkurl.sh
Это может закончить работу в 4 раза быстрее.
Если ваш входной файл содержит один url на строку, вы можете использовать скрипт для чтения каждой строки, а затем попробуйте пинговать url, если успех пинга, то url действителен
#!/bin/bash
INPUT="Urls.txt"
OUTPUT="result.txt"
while read line ;
do
if ping -c 1 $line &> /dev/null
then
echo "$line valid" >> $OUTPUT
else
echo "$line not valid " >> $OUTPUT
fi
done < $INPUT
exit
ping параметры :
-c count
Stop after sending count ECHO_REQUEST packets. With deadline option, ping waits for count ECHO_REPLY packets, until the timeout expires.
вы также можете использовать эту опцию, чтобы ограничить время ожидания
-W timeout
Time to wait for a response, in seconds. The option affects only timeout in absense
of any responses, otherwise ping waits for two RTTs.