Świetny, prosty skrypt. Mam kilka drobnych uwag. Linię 4. zmieniłbym na:
files_list=$(ls -R 2>/dev/null *.jpg *.JPG *.gif *.GIF *.png *.PNG); # tworzenie listy plików
Dzięki temu, jeśli w katalogu nie będzie zdjęć któregoś typu, to komunikaty polecenia ls zostaną przekierowane na standardowe wyjście błędów i nie będą widoczne na ekranie. Jeśli wypisujesz już jakieś komunikaty diagnostyczne na ekran, mowa o liniach: 10 i 12, to można by je opisać:
echo "Liczba plików: $val"; # wyświetlam ile plików znaleziono
...
echo "Liczba podstron: $nrof"; # wyświetlam liczbę podstron
Poza tym warto sprawdzić czy katalog o nazwie folder już nie istnieje, by go nie nadpisać:
if [ -d folder ]; then
mkdir inna_nazwa
fi
Zmniejszyłbym też ilość maksymalnej liczby miniatur na podstronę, bo jest trochę przewijania. Ponadto liczba ta powinna być podzielna przez 3 bez reszty, tak by kompozycja była domknięta (miniatury tworzyły duży prostokąt) przy całej wypełnionej podstronie. By wywołać skrypt wystarczy użyć:
sh html_gen2.sh
Lub dodać do pierwszej linii skryptu dyrektywę interpretera, zmienić uprawnienia pliku i wywołać w bieżącym katalogu, kolejno:
#!/bin/bash
...
chmod 755 html_gen2.sh
./html_gen2.sh
Poza tym dobra robota.