$ 2 e $ 3 estão entre aspas simples. O shell não expande variáveis entre aspas simples, por isso elas são interpretadas por awk
. Alterne para aspas duplas:
awk "NR >= $2 && NR <= $3 { print }" < "$1"
Note que você pode conseguir o mesmo com
sed -n 'X,Yp' file
onde X e Y são os números de linha, ou similarmente em Perl com
perl -ne 'print if X .. Y' file
que são tão curtos que você provavelmente não precisa de uma função para eles.