Re: modificar un archivo en bash

2003-03-25 Por tema Rafael F. Rodríguez
Hola a todos.

Perdonad, creo que no he sido demasiado claro. :-).

Se trata de la configuración de postfix y fetchmail, como sabeis hay 
que 
configurar varios archivos, y como la configuración, alias, etc.

Lo que prependo hacer es un scripts donde pregunte el nombre de 
dominio, los 
nombre de usuario, contraseñas... y que el script acceda a los archivos 
(plantillas previamente preparadas y colocadas en cada ruta) y modifique los 
valores que tengo por defecto. ejemplo:

---archivo main.cf--
# NOMBRE, DOMINIO(S) y RED(ES)
myhostname = var1
mydomain   = var2
relay  = var3

# DIRECCION QUE APARECE EN EL FROM
myorigin  = $mydomain
.
.
.

# PROPIETARIO DE COLAS Y PROCESOS 
mail_owner   = postfix
setgid_group = postdrop

# TRATAMIENTO DE ALIAS
alias_database   = hash:/etc/aliases
alias_maps   = hash:/etc/aliases 

# IDENTIFICACION DE USUARIOS LOCALES
local_recipient_maps = $alias_maps unix:passwd.byname

# ENVIO EN PARALELO A UN MISMO DESTINO
local_destination_concurrency_limit   = 2 
default_destination_concurrency_limit = 10

# OTROS PARAMETROS DE CONFIGURACION
notify_classes   = resource, software, policy
transport_maps   = hash:/etc/postfix/transport
disable_vrfy_command = yes
disable_dns_lookups  = yes
relayhost= [$relay] 
message_size_limit   = 10485760
mailbox_size_limit   = 0
maximal_queue_lifetime = 5d
#maps_rbl_domains= relays.ordb.org 

# CONTROL DE CORREO ENTRANTE / SALIENTE 
mynetworks   = variable4
mydestination= $myhostname localhost.$mydomain $mydomain  
relay_domains= $mydestination
#smtpd_client_restrictions = reject_maps_rbl reject_unknown_client 
#smtpd_helo_required   = yes
#smtpd_helo_restrictions   = reject_invalid_hostname reject_unknown_hostname 
reject_non_fqdn_hostname 
smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
header_checks  = regexp:/etc/postfix/header_checks 
body_checks= regexp:/etc/postfix/body_checks 
content_filter = vscan:
#mailbox_command   = procmail -a $EXTENSION 

---fin archivo
Pues eso, el script modificaría los var dependiendo de diversas 
entradas de 
por el teclado.


El Mar 25 Mar 2003 01:19, Cesar Rincon escribió:
 On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
  A alguien se le ocurre algo más elegante que mi chapucilla??

 Probablemente no he entendido lo que Rafael quiere, pero me suena
 demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
 más compacta (y quizá más entendible y fácil de mantener):

 Asumiendo que el archivo contiene una línea que reza literalmente
 Nombre: var1 cuya dirección ip es var2:

 ---
 #!/bin/bash
 if [ -z $1 -o -z $2 ]; then
   echo Uso: $0 nombre ip 2
   exit 1
 fi

 sed -e s|^Nombre: var1 cuya dirección ip es var2|\
 Nombre: $1 cuya dirección ip es $2|

 exit 0
 ---

 Y lo usarías como un filtro:

   cat archivo.in | script NOMBRE 123.123.123.123  archivo.out

 O, si te interesa reemplazar el archivo, algo como

   script NOMBRE 123.123.123.123  archivo  archivo.$$  \
 mv archivo.$$ archivo

 Decía que demasiado fácil porque ésto es realmente un one liner: no
 es necesario hacer el script, basta con teclear la invocación a sed.

 Pero bueno, seguramente no he entendido...

  -CR



Re: modificar un archivo en bash

2003-03-25 Por tema Victor Calzado Mayo
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

hola
On Tuesday 25 March 2003 09:49, Rafael F. Rodríguez wrote:
 Hola a todos.

   Perdonad, creo que no he sido demasiado claro. :-).

   Se trata de la configuración de postfix y fetchmail, como sabeis hay que
 configurar varios archivos, y como la configuración, alias, etc.

   Lo que prependo hacer es un scripts donde pregunte el nombre de dominio,
 los nombre de usuario, contraseñas... y que el script acceda a los archivos
 (plantillas previamente preparadas y colocadas en cada ruta) y modifique
 los valores que tengo por defecto. ejemplo:

De la forma mas simple posible esto sería:
Simplemente recordarte que las comillas delimitan variables que contienen 
espacios.
un saludo
Victor


 ---archivo main.cf--

#!/bin/bash
#uso ./miscript hostname domain relay
 # NOMBRE, DOMINIO(S) y RED(ES)
 myhostname = $1
 mydomain   = $2
 relay  = $3

echo   # DIRECCION QUE APARECE EN EL FROM
 myorigin  = $mydomain
 .
 .
 .

 # PROPIETARIO DE COLAS Y PROCESOS
 mail_owner   = postfix
 setgid_group = postdrop

 # TRATAMIENTO DE ALIAS
 alias_database   = hash:/etc/aliases
 alias_maps   = hash:/etc/aliases

 # IDENTIFICACION DE USUARIOS LOCALES
 local_recipient_maps = $alias_maps unix:passwd.byname

 # ENVIO EN PARALELO A UN MISMO DESTINO
 local_destination_concurrency_limit   = 2
 default_destination_concurrency_limit = 10

 # OTROS PARAMETROS DE CONFIGURACION
 notify_classes   = resource, software, policy
 transport_maps   = hash:/etc/postfix/transport
 disable_vrfy_command = yes
 disable_dns_lookups  = yes
 relayhost= [$relay]
 message_size_limit   = 10485760
 mailbox_size_limit   = 0
 maximal_queue_lifetime = 5d
 #maps_rbl_domains= relays.ordb.org

 # CONTROL DE CORREO ENTRANTE / SALIENTE
 mynetworks   = variable4
 mydestination= $myhostname localhost.$mydomain $mydomain
 relay_domains= $mydestination
 #smtpd_client_restrictions = reject_maps_rbl reject_unknown_client
 #smtpd_helo_required   = yes
 #smtpd_helo_restrictions   = reject_invalid_hostname
 reject_unknown_hostname reject_non_fqdn_hostname
 smtpd_recipient_restrictions = permit_mynetworks, check_relay_domains
 header_checks  = regexp:/etc/postfix/header_checks
 body_checks= regexp:/etc/postfix/body_checks
 content_filter = vscan:
 #mailbox_command   = procmail -a $EXTENSION
  archivo_de_salida
 ---fin archivo
   Pues eso, el script modificaría los var dependiendo de diversas 
 entradas
 de por el teclado.

 El Mar 25 Mar 2003 01:19, Cesar Rincon escribió:
  On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
   A alguien se le ocurre algo más elegante que mi chapucilla??
 
  Probablemente no he entendido lo que Rafael quiere, pero me suena
  demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
  más compacta (y quizá más entendible y fácil de mantener):
 
  Asumiendo que el archivo contiene una línea que reza literalmente
  Nombre: var1 cuya dirección ip es var2:
 
  ---
  #!/bin/bash
  if [ -z $1 -o -z $2 ]; then
echo Uso: $0 nombre ip 2
exit 1
  fi
 
  sed -e s|^Nombre: var1 cuya dirección ip es var2|\
  Nombre: $1 cuya dirección ip es $2|
 
  exit 0
  ---
 
  Y lo usarías como un filtro:
 
cat archivo.in | script NOMBRE 123.123.123.123  archivo.out
 
  O, si te interesa reemplazar el archivo, algo como
 
script NOMBRE 123.123.123.123  archivo  archivo.$$  \
  mv archivo.$$ archivo
 
  Decía que demasiado fácil porque ésto es realmente un one liner: no
  es necesario hacer el script, basta con teclear la invocación a sed.
 
  Pero bueno, seguramente no he entendido...
 
   -CR

- -- 
- --
Marzo
Uno de los peores meses para andar metiendo al mundo en guerras absurdas
El resto de meses del mismo tipo son: Enero, Febrero, Abril, Mayo, Junio, 
Julio, Agosto, Septiembre, Octubre, Noviembre y Diciembre. 
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iD8DBQE+gCo0EzqHF8R72ekRAjqnAKCVWzSEOTGQsaAbMTB9LM3LCuDF0wCeIXUC
00phKznYtW9KsC3yaIlvblE=
=N+Hv
-END PGP SIGNATURE-



Re: modificar un archivo en bash

2003-03-25 Por tema Cesar Rincon
On Tue, 2003-03-25 at 02:49, Rafael F. Rodríguez wrote:
   Lo que prependo hacer es un scripts donde pregunte el nombre de
 dominio, los nombre de usuario, contraseñas... y que el script acceda
 a los archivos (plantillas previamente preparadas y colocadas en cada
 ruta) y modifique los valores que tengo por defecto.

Oh, ya veo.  Pues mira, si hay libertad de decidir el formato de las
plantillas (quiero decir, si no hay que ajustarse a un formato de
plantilla en particular), yo haría scripts-plantilla.  Por ejemplo:

-
#!/bin/sh
# genmain.sh: Plantilla para generar el main.cf de Postfix
# Uso: genmain.sh HOSTNAME DOMAIN RELAY NETWORKS

cat END
# Este es un archivo de configuracion autogenerado.
# No tocar, a menos que sepas lo que haces.

myhostname = $1
mydomain = $2
relay = $3

# DIRECCION QUE APARECE EN EL FROM
myorigin = \$mydomain
...

mynetworks = $4
...
END

exit 0
-

Nota el escape antes de $mydomain.  Debería ser obvio porqué es
necesario.

El script lo puedes probar en la consola, tecleando a mano los valores. 
Cuando funcione correctamente, simplemente invocas a la plantilla desde
tu script principal:

-
#!/bin/sh

TARGET=/tmp/main.cf

read -p Hostname:  HOST
read -p Domain:  DOMAIN
read -p Relay:  RELAY
read -p Networks:  NETWORKS

genmain.sh $HOST $DOMAIN $RELAY $NETWORKS  $TARGET
exit 0
-

Las comillas son necesarias por si te teclean espacios en alguna de las
variables.

¿Se parece más a lo que necesitas, ésto?

 -CR




Re: modificar un archivo en bash

2003-03-24 Por tema Mauricio Alejandro Araya Lopez
On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote:

 Hola  a todos.
Holas

 
   Tengo un problema ya dos semanas, y no consigo encontrar la respuesta. 
 Me 
 gustaría modificar el contenido de un archivo en la línea de comandos. ejem.

cut(1), awk(1), sed(1), bash(1).
 
   archivo.txt
   Nombre: var1 cuya dirección ip es var2

Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas las 
veces completo, no hay para que modificarlo.
 
   Pues lo que quiero es modificar var1 y var2 desde la línea de 
 comando por 
 otros valores.

Reescribelo todad las veces mejor.
 
   Muchas gracias.

De nada

Saludos!
-- 
Mauricio Alejandro Araya Lopez* User #249395 counter.li.org
Est.Ingenieria Civil Informatica, * Fono: +56 32 671387
Universidad Tecnica Federico Santa María  * Cel : 09 3469128
Viña del Mar, Chile.  * http://www.inf.utfs.cl/~maray



Re: modificar un archivo en bash

2003-03-24 Por tema Matías nnss
Hola:
 ¿De dónde o cómo obtienes var1 y var2?






-- 
Atentamente, yo Matías
No a la invación en Irak


cita quien=Rafael F. Rodríguez
 Hola amigo.

   No hombre el archivo es muucho mas largo, pero he considerado
   oportuno no
 ponerlo directamente, solo era un ejemplo.

   Necesitaria un ejemplo concreto, por ejemplo:
   loquesea archivo.txt var1 esto hay que poner
   loquesea archivo.txt var2 y aquí la otra variable

   Gracias.

 El Lun 24 Mar 2003 13:03, Mauricio Alejandro Araya Lopez escribió:
 On Mon, 24 Mar 2003, Rafael F. [iso-8859-15] Rodríguez wrote:
  Hola  a todos.

 Holas

 Tengo un problema ya dos semanas, y no consigo encontrar la
 respuesta.
  Me gustaría modificar el contenido de un archivo en la línea de
  comandos. ejem.

 cut(1), awk(1), sed(1), bash(1).

 archivo.txt
 Nombre: var1 cuya dirección ip es var2

 Eso solo va en el archivo? Si es tan poco, puedes reescribirlo todas
 las veces completo, no hay para que modificarlo.

 Pues lo que quiero es modificar var1 y var2 desde la línea de
  comando por otros valores.

 Reescribelo todad las veces mejor.

 Muchas gracias.

 De nada

 Saludos!


 --
 To UNSUBSCRIBE, email to [EMAIL PROTECTED]
 with a subject of unsubscribe. Trouble? Contact
 [EMAIL PROTECTED]





Re: modificar un archivo en bash

2003-03-24 Por tema Fernando Blat Peris
Si todo es como he entendido este script te puede funcionar:

#!/bin/bash

# $0: ejecutable
# $1: fichero 
# $2: var1 o var2
# $3: cadena a añadir

if [ $# -ne 3 ]
then
echo Error en el numero de argumentos
echo Uso: $0 fichero var1|var2 cadena
exit -1
fi

if [ $2 == var1 ]
then 
cat $1 | awk -v texto=$3 '{print $1   texto   $3   $4   
$5   $6  
 $7 }'  $1
exit 0
fi

if [ $2 == var2 ]
then 
cat $1 | awk -v texto=$3 '{print $1   $2   $3   $4   $5 
  $6   
texto }'  $1
exit 0
fi

Pero ten en cuenta que está muy limitado para la estructura de fichero que has 
dado, es decir, si la modificas no te servirá :S

A alguien se le ocurre algo más elegante que mi chapucilla??


-- 
Fernando Blat Peris
http://ttt.inf.upv.es/~ferblape
Polinux http://polinux.upv.es
UPV - Valencia



Re: modificar un archivo en bash

2003-03-24 Por tema Cesar Rincon
On Mon, 2003-03-24 at 13:41, Fernando Blat Peris wrote:
 A alguien se le ocurre algo más elegante que mi chapucilla??

Probablemente no he entendido lo que Rafael quiere, pero me suena
demasiado simple...  En fin.  Mi solución no es más elegante, pero sí
más compacta (y quizá más entendible y fácil de mantener):

Asumiendo que el archivo contiene una línea que reza literalmente
Nombre: var1 cuya dirección ip es var2:

---
#!/bin/bash
if [ -z $1 -o -z $2 ]; then
  echo Uso: $0 nombre ip 2
  exit 1
fi

sed -e s|^Nombre: var1 cuya dirección ip es var2|\
Nombre: $1 cuya dirección ip es $2|

exit 0
---

Y lo usarías como un filtro:

  cat archivo.in | script NOMBRE 123.123.123.123  archivo.out

O, si te interesa reemplazar el archivo, algo como

  script NOMBRE 123.123.123.123  archivo  archivo.$$  \
mv archivo.$$ archivo

Decía que demasiado fácil porque ésto es realmente un one liner: no
es necesario hacer el script, basta con teclear la invocación a sed.

Pero bueno, seguramente no he entendido...

 -CR