método básico pode ser semelhante a este no exemplo i modificar um valor = bye números & arquivos & filename também tem valor dentro, então são arquivos separados
#!/bin/bash
for i in a b c 1 2 3 ; do
cat > file${i} << EOT
! input file
a = ${i}
b = 6
d = 789
! end
EOT
done
para obter 6 arquivos com 6 conteúdos diferentes como:
# cat file?
! input file
a = 1
b = 6
d = 789
! end
! input file
a = 2
b = 6
d = 789
! end
! input file
a = 3
b = 6
d = 789
! end
! input file
a = a
b = 6
d = 789
! end
! input file
a = b
b = 6
d = 789
! end
! input file
a = c
b = 6
d = 789
! end
se você tiver que ler o valor b de um arquivo de referência você pode usar uma variável do subcomando read por exemplo
while read ; do
cat > file${REPLY} << EOT
! input file
a = 1
b = ${REPLY}
d = 789
! end
EOT
done < referencefile
exemplo completo em condição real:
[root@h2g2w tmp]# cat > ./test.sh
while read ; do
cat > file${REPLY} << EOT
! input file
a = 1
b = ${REPLY}
d = 789
! end
EOT
done < referencefile
[root@h2g2w tmp]# cat > referencefile
qsd
gfd
eza
vxcv
bxc
[root@h2g2w tmp]#
[root@h2g2w tmp]# sh ./test.sh
[root@h2g2w tmp]# ls -lrth file???
-rw-r--r--. 1 root root 41 28 juin 22:47 fileqsd
-rw-r--r--. 1 root root 41 28 juin 22:47 filegfd
-rw-r--r--. 1 root root 41 28 juin 22:47 fileeza
-rw-r--r--. 1 root root 41 28 juin 22:47 filebxc
[root@h2g2w tmp]# cat file???
! input file
a = 1
b = bxc
d = 789
! end
! input file
a = 1
b = eza
d = 789
! end
! input file
a = 1
b = gfd
d = 789
! end
! input file
a = 1
b = qsd
d = 789
! end
[root@h2g2w tmp]#
Espero que você possa adaptar isso às suas necessidades.