Как Wget продолжить предыдущий цикл, если URL вернет 404?удар - PullRequest
0 голосов
/ 20 октября 2018

Я пытаюсь написать скрипт для автоматической загрузки некоторых фотографий в режиме онлайн.

Как мне разорвать внутренний цикл, когда k вернет 404 и продолжить предыдущий цикл?

Вот мой код:

for i in {1..50}; 
do
for k in {1..100}; 
do
wget http://www.magga.com/files?cat=$i&id=$k
done

спасибо

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

Вывод wget отправляется в stderr, включая ошибку 404.
Вы можете проверить, содержит ли строка вывода 404 Not Found, и затем выйти из самого внутреннего цикла:

#!/bin/bash

for i in {1..50}; do
    for k in {1..100}; do
        ret=$(wget http://www.magga.com/files?cat=${i}&id=${k} 2>&1)
        if [[ "$ret" =~ 404\ Not\ Found ]]; then
            break   # exit from current "k" loop and continues with next "i"
        fi
    done
done

Надеюсь, это поможет.

0 голосов
/ 20 октября 2018

Вместо записи wget в файл, сохраните вывод в переменной.Например:

check=$(wget -O - http://www.magga.com/files?cat=$i&id=$k)

сохраняет вывод в $ check.Если длина $ check равна нулю - вы можете получить длину через $ {# check}, прервите цикл.В противном случае напишите $ check в файл.

...