#!/bin/bash echo "Тестирование доступности страниц в вёб-интерфейсе на сервере." domain="git.org.ru" && source info_param.sh file="DIRECTORY_TREE.md" # две тестовые страницы для каждого проекта [ "$domain" == "hub.mos.ru" ] && folder="blob" || folder="src/branch" [ "$domain" == "hub.mos.ru" ] && wiki_home="-/wikis/home" || wiki_home="wiki" # подготовка массива строк — адрес страницы и название файла через пробел for repo in {1..6} {dispatcher,pomodoro,older-tomato-theme,color-tomato-theme}; do case "$repo" in [1-6]) owner="pomodoro" ;; *) owner="golovin" ;; esac pages+=("'https://$domain/$owner/$repo/$folder/master/$file' '$file'") pages+=("'https://$domain/$owner/$repo/$wiki_home' 'Home'") done # тестирование доступности страниц function testing { # название файла должно быть в заголовке страницы, иначе конвейер должен вернуть ошибку, # обычный цвет для существующих страниц, светло-красный цвет для несуществующих страниц curl -f "$1" 2>/dev/null | grep -q ".*$2.*" && color="0" || color="91" # текст соответствующего цвета и адрес страницы printf "\e[${color}m%s\e[0m %s\n" "Страница:" "$1" } export -f testing time_ms="$(date '+%s%3N')" # вывод строк массива, параллельный запуск функции и сортировка результатов printf "testing %s\0" "${pages[@]}" | xargs -n1 -0 -P0 bash -c | sort -k2 # замер продолжительности выполнения в миллисекундах, пересчёт в минуты, секунды и миллисекунды tms="$(($(date '+%s%3N') - time_ms))" && min="$((tms / 1000 / 60))" && sec="$((tms / 1000 % 60))" ms="$((tms % 1000))" && printf 'Общее время выполнения: %02d:%02d.%03d мс.\n' "$min" "$sec" "$ms"