No Bash $#
se expande para o número de parâmetros posicionais que foram definidos.
if [ $a -lt $b ]
significa que o valor de a é menor que o valor de b.
if [ $# -lt 2 ]
significa que o número de parâmetros posicionais definido é menor que 2.
Em um exemplo de trabalho, você talvez usaria isso para contar os parâmetros dados a uma função. Se você definir uma função como:
count_words(){
if [ $# -lt 2 ]
then
echo "There are less than two words."
else
echo "There are 2 or more words."
fi
}
Em seguida, chame a função com diferentes números de palavras, os resultados seriam os seguintes:
$ count_words hello
There are less than two words.
$ count_words how many words
There are two or more words.
$ count_words
There are less than two words.
$ count_words two words
There are two or more words.