Existem alguns erros no seu script:
- Espaço ausente em
[-z $word2] - Falta de aspas duplas nas variáveis
- Uso inútil de
more | grep - A saída de análise de
lsestá corrompida -
grepfalhará se$word1ou$word2começarem com traço-
Aqui está uma correção:
word1=$1
word2=$2
for f in ./*.txt; do
printf '>%s\n' "$f"
###if word2 is empty; then execute
if [ -z "$word2" ]; then
grep -- "$word1" "$f"
else
###if word2 is not empty
grep -- "$word1" "$f" | grep -- "$word2"
fi
done