prosberry/tests/check_blog_links.sh

53 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
# Exit immediately if a command exits with a non-zero status.
set -e
BLOG_INDEX="blog/index.html"
SAMPLE_ARTICLE="blog/clanki/2025-11-17-sample-article.html"
echo "Checking links in $BLOG_INDEX..."
# Extract all href attributes and check if they return 200 OK
grep -Eio 'href="([^"]+)"' "$BLOG_INDEX" | sed -E 's/href="([^"]+)"/\1/' | while read -r link; do
if [[ "$link" == /* ]]; then # Internal link
# For internal links, check if the file exists
if [ -f ".${link}" ]; then
echo " [OK] Internal link: $link"
else
echo " [ERROR] Internal link not found: $link"
exit 1
fi
elif [[ "$link" == http* ]]; then # External link
# For external links, use curl to check status
status_code=$(curl -s -o /dev/null -w "%{http_code}" "$link")
if [ "$status_code" -eq 200 ]; then
echo " [OK] External link: $link"
else
echo " [ERROR] External link failed ($status_code): $link"
exit 1
fi
fi
done
echo "Checking links in $SAMPLE_ARTICLE..."
grep -Eio 'href="([^"]+)"' "$SAMPLE_ARTICLE" | sed -E 's/href="([^"]+)"/\1/' | while read -r link; do
if [[ "$link" == /* ]]; then # Internal link
# For internal links, check if the file exists
if [ -f ".${link}" ]; then
echo " [OK] Internal link: $link"
else
echo " [ERROR] Internal link not found: $link"
exit 1
fi
elif [[ "$link" == http* ]]; then # External link
status_code=$(curl -s -o /dev/null -w "%{http_code}" "$link")
if [ "$status_code" -eq 200 ]; then
echo " [OK] External link: $link"
else
echo " [ERROR] External link failed ($status_code): $link"
exit 1
fi
fi
done
echo "Link checking completed."