cria arquivos numerados com conteúdo definido com o bash

2

Eu quero criar 69 arquivos com um nome de arquivo de 4006 até 7075 e cada arquivo precisa ter algum conteúdo enumerado, o código a seguir imprime no shell o que eu gostaria de ter inserido nos respectivos arquivos, mas como faço para fazer isso?

#!/bin/bash
for i in 'seq 4006 4075'; do
      echo "vid $i\nports 524288\nactive = 1 >vlan_$i.ini"
done

Eu tentei colocar a parte entre aspas em '(carrapatos anteriores), mas acabei recebendo arquivos vazios.

    
por cerr 04.09.2014 / 00:01

1 resposta

4

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
    
por 04.09.2014 / 00:14