Você está dando um loop de 1 a [number of arguments] e, em seguida, testando se cada um desses números é, de fato, um diretório. Pode ser mais simples fazer algo como:
#!/bin/bash
for item in "$@"; do # iterate over the arguments themselves
if [[ ! -d "$item" ]]; then
echo "$item is not a directory" >> file.txt
else
DIRECTORY=$(ls -l $item | grep ^d | wc -l)
LINK=$(find $item -type l | wc -l)
FILE=$(ls -A $item | wc -l)
echo 'date "+%H:%M:%S %d-%m-%y"' directory $item file count: $FILE link count: $LINK subdirectory count: $DIRECTORY >> file.txt
fi
done