Se você quiser redirecionar a saída do comando echo , o operador de redirecionamento > precisa estar fora de qualquer cotação. O caractere > entre aspas duplas significa por si mesmo.
Por padrão, no bash, echo não expande sequências de contrabarra. Você precisa passar a opção -e para echo , definir a opção xpg_echo shell com shopt ou usar printf em vez de echo .
for i in 'seq 4006 4075'; do
printf "vid %s\nports %d\nactive = 1\n" "$i" 524288 1 >"vlan_$i.ini"
done
Um aqui documento é mais legível
maneira de representar uma string multilinha. Como ele é passado como entrada e não como um argumento de linha de comando, use cat em vez de echo . Observe que, se o texto for recuado, o recuo será copiado (é possível evitar isso com <<-EOF em vez de <<EOF , mas você só pode usar tabulações para recuar, não espaços).
for i in 'seq 4006 4075'; do
cat <<EOF >"vlan_$i.ini"
vid $i
ports 524288
active = 1
EOF
done