Loop for alinhado + ERROR fim prematuro de arquivo

Fala devs… fiz esse shell script contendo uma lista de ips de proxies socks5 e o que eu quero fazer é adicionar o termo ‘socks5’ para o início de cada linha contendo cada ip. Mas estou recebendo o erro de “fim prematuro de arquivo”
PS: eu coloquei done no final veja !!!

Veja abaixo meu código:

#!/bin/bash
for i in {1..23}; do
        echo -e 'socks5' then
        for i in 'socks5'; do
                echo -e "185.226.204.160:5713
                        103.210.206.26:8080
                        156.228.116.140:3128
                        162.220.246.225:6509
                        72.10.160.93:12649
                        103.218.24.67:58080
                        188.253.112.218:80
                        156.228.115.84:3128
                        108.170.12.11:80
                        18.134.236.231:1080
                        103.163.244.106:1080
                        3.10.93.50:3128
                        103.158.253.162:8199
                        50.174.7.156:80
                        104.207.40.42:3128
                        93.184.9.9:1080
                        165.140.185.179:39593
                        47.238.134.126:81
                        8.130.36.245:808
                        91.241.21.17:9812
                        177.125.86.108:8080
                        13.37.73.214:3128
                        104.207.34.233:3128
                        "
done

Está faltando 1 done antes do ultimo done.

1 curtida

Acredito que seria melhor jogar os IPs no arquivo e usar uma invocação do sed para acrescentar um texto antes de cada linha, algo como:

sed 's/^/socks5 /' ips.txt

Ou seguindo algo mais perto do esqueleto que você já tem:

# usando o caractere \ para continuar a linha
for i in \
    '185.265.204.160:5713' \
    '103.210.206.26:8080' \
    $OUTROS_IPS_AQUI
do
  echo "socks5 ${i}"
done

Do jeito que está aí (além de faltar um dos done, como disse o @aguamole, o para for i in socks5; do), o que vai acontecer é:

  1. as palavras socks5 then (o then não é uma palavra especial aqui, ele vai para o echo) vão sair.
  2. Saem os IPs nas linhas seguintes, do jeito que você botou no echo, sem socks5 antes. Inclusive, como os espaços que você usou para alinhar estão dentro das aspas, eles também serão reproduzidos literalmente.

Vai repetir o ciclo por 23 vezes (o primeiro for).