Erro em script ao executá-lo

estou criando um script basicão, pro ufw bloquear vários ip’s que estão numa lista, neste formato (exemplo):

0.0.0.0/0
1.1.1.1/1
etc…
3.3.3.3/3

to usando essa regra:

while read line; do sudo ufw deny from $line; done < /etc/ufw-rules/arquivo

aí que tá o problema. se eu executo essa linha no terminal, vai tranquilo. mas se coloco num script bash. dá o erro: "linha XX: erro de sintaxe próximo ao token inesperado `do’ "

agradeço qqr ajuda.

:wave:t2:

Faz um certo tempo que não programo ou estudo programação mas, como você estaria escrevendo o código no script bash?
Tem umas diferenças entre executar line by line e executar por script bash.

Manda uma copia pra se fazer uma análise mais detalhada!

Tambem sou iniciante mas duas cabeças pensam mais que uma :joy:

1 curtida

Não deveria ser um $line ali em while read line?

1 curtida

Então line by line no terminal funciona, pois o terminal executa direto. Aquele “line” é para o programa pegar linha por linha de acordo com o comando “read” e jogar numa variável que é o"$line". Então teria de ver como o script está escrito, pode ser problemas com variável, pode ser que o comando está lendo coisas que ele não sabe oque fazer e então trava, tem um tanto de problemas, que só lendo o script que o @acvsilva criou, para tentarmos resolver. As vezes como acontecia muito na sala de aula, um ; faltando ou em lugar errado.

1 curtida

Bem isso ! :clap: :clap: :clap:

1 curtida

Aqui tá funcionando normal, vê o shell que você está usando, certifique se de o shebang (#!) está assim:

#!/usr/bin/env bash

Seu script deve se parecer com isso:

#!/usr/bin/env bash

while read line; do
  sudo ufw deny from "${line}";
done < /etc/ufw-rules/arquivo

Lembre-se de colocar o nome da váriavel quando você for chamar com chaves (${line})

2 curtidas

vai entender esse capeta desse script? botei do jeito que vc mostrou e foi. botando tudo numa linha só, não vai. tb retirei o sudo. pode ser que esteja “sudando” as permissões sei lá de onde com quem e quando e agora tá funfando legal. também troquei o shebang (#! ) por >>> #!/usr/bin/env bash <<<.

é um script tosco, linha por linha, assim:

apaga todas as regras do ufw
reinicia
adiciona as novas regras
pronto!

e a parte “adiciona as novas regras” é a pestilenta da linha acima. mas valeu sua ajuda. consegui fazer um scriptinho desejado pro ufw.

muito obrigado!

1 curtida

Você pode colocar uma verificação se o user é root