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
ls
está corrompida -
grep
falhará se$word1
ou$word2
começ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