Sprawdzeń tego $FIND trochę za dużo. Wystarczy tak:
#!/bin/bash
DIR=$1
FIND=$2
COUNT=0
if [ "$FIND" = "" ]; then
echo "Brak parametru skladnia: "
exit 1
fi
for file in $1/*; do
NAME=`echo $file | cut -d'.' -f1`
EXT=`echo $file | cut -d'.' -f2`
if [ "$EXT" = "$FIND" ]; then
echo "Plik " $NAME"."$EXT
COUNT=$((COUNT+1))
fi
done
echo
echo "Ilosc plikow: " $COUNT
exit 0
Poza tym zamiast sprawdzać rozszerzenie po wyszukaniu, możesz (znacznie szybciej) od razu wyszukać pliki tylko z danym rozszerzeniem:
A skoro już (całkiem słusznie) przypisujesz parametry linii poleceń do zmiennych, to powyżej nie $1 tylko $DIR.
EDIT: Co do samego wyciągania ścieżki pliku, nazwy i rozszerzenia warto użyć poleceń basename i dirname zamiast męczyć się z ręczną obróbką stringa.
EDIT2: Drobna poprawka: do porównywania stringów za pomocą test (czyli "[ ... ]") lepiej używać pojedynczego =. Podwójne działają tylko w Bashu, a pojedynczy jest bardziej przenośny (np. sh).