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ãovar
e geralmente, que precisa ser citado ("$var"
); - Ao fazer uma comparação aritmética , você precisa usar o
-lt
de o comando[
, não<
, a menos que você esteja usando parênteses duplos; - O formato
command > file
sobrescreveráfile
com 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
if
está 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), apenasprintf
eecho
; - 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.