Receio que o seu script esteja cheio de erros de sintaxe. O erro específico que você está vendo é porque você não está fechando o loop for corretamente, mas há muitos, muitos mais:
- Você não pode ter espaços em torno de
=ao atribuir valores a variáveis (exceto em expressões aritméticas); - Para salvar a saída de um comando em uma variável, você deve usar substituição de comando , seja
var='command'ouvar=$(command); - Ao se referir ao valor de uma variável, você deve usar
$var, nãovare geralmente, que precisa ser citado ("$var"); - Ao fazer uma comparação aritmética , você precisa usar o
-ltde o comando[, não<, a menos que você esteja usando parênteses duplos; - O formato
command > filesobrescreveráfilecom a saída do comando. Você provavelmente quis usarwc < "$file"e nãowc > $file; - Você não pode adicionar um valor a uma variável usando
var=$var+1, a menos que essa variável tenha sido anteriormente declarada como um inteiro, você precisa de((var=var+1)),var=$((var+1))oudeclare -i var; var=var+1. Para adicionar 1, você também pode usar((var++)); - Sua sintaxe
ifestá errada. O formato correto éif condition; then do something; fi - O mesmo vale para o loop
for, a sintaxe correta éfor loop-specification; do something; done; - Não há comando
print(não criado no bash), apenasprintfeecho; - Você deve sempre citar suas variáveis a menos que haja uma boa razão para não fazê-lo.
Então, uma versão funcional do seu script com pequenas melhorias seria:
#!/bin/bash -
# Checks word count of each text file directory and deletes if less than certain amount of words
# Lastly, displays number of files deleted
count=0 # Set counter to 0
limit=2000
for file in *.txt
do
words=$(wc -w < "$file")
if [ "$words" -lt "$limit" ]
then
rm -- "$file"
((count++))
fi
done
echo "Number of files deleted: $count"
Da próxima vez, recomendo que você se familiarize com um idioma antes de tentar codificar nele. Cada idioma tem suas próprias regras e sintaxe.