Script de bash com dados de outro arquivo

1

Eu trabalhei no seguinte script que eu quero usar para adicionar facilmente vários Postfix, bem como algumas outras coisas.

Abaixo está uma pequena amostra

postmulti -e init
postmulti -I postfix-$new -e create
cd /etc/postfix-$new
rm -rf main.cf
wget http://www.********.com/*******/main.zip
unzip main.zip
mv main main.cf
echo -e "queue_directory = /var/spool/postfix-$new" >> /etc/postfix-$new/main.cf
echo -e "data_directory = /var/lib/postfix-$new" >> /etc/postfix-$new/main.cf
echo -e "multi_instance_name = postfix-$new" >> /etc/postfix-$new/main.cf
echo -e "mydomain = $domain" >> /etc/postfix-$new/main.cf
echo -e "myhostname = host1.$domain" >> /etc/postfix-$new/main.cf
echo -e "smtp_bind_address = $ip" >> /etc/postfix-$new/main.cf
sed -i "s/oldip/$ip/g" /etc/postfix-$new/main.cf

mv /etc/opendkim/keys/$domain/default.private /etc/opendkim/keys/$domain/default
echo -e "/ndefault._domainkey.$domain $domain:default:/etc/opendkim/keys/$domain/default" >> /etc/opendkim/KeyTable
echo -e "/n*@$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
sed -i "s/cyberciti.com/$domain/g" /etc/postfix-$new/main.cf

Existem três requisitos para este script $new $ip $domain Eu quero saber como posso adicioná-los em um arquivo linha por linha e depois bash este script, uma linha = uma execução completa do script.

Por exemplo, start contém

new1, 1.1.1.1, myweb.com
new2, 2.2.2.2, myweb2.com

A primeira linha deve executar o seguinte

postmulti -e init
 postmulti -I postfix-new1 -e create
 cd /etc/postfix-new1
 rm -rf main.cf
 wget http://www.********.com/*******/main.zip
 unzip main.zip
 mv main main.cf
 echo -e "queue_directory = /var/spool/postfix-new1" >> /etc/postfix-new1/main.cf
 echo -e "data_directory = /var/lib/postfix-new1" >> /etc/postfix-new1/main.cf
 echo -e "multi_instance_name = postfix-new1" >> /etc/postfix-new1/main.cf
 echo -e "mydomain = myweb.com" >> /etc/postfix-new1/main.cf
 echo -e "myhostname = host1.myweb.com" >> /etc/postfix-new1/main.cf
 echo -e "smtp_bind_address = 1.1.1.1" >> /etc/postfix-new1/main.cf
 sed -i "s/oldip/1.1.1.1/g" /etc/postfix-new1/main.cf

 mv /etc/opendkim/keys/myweb.com/default.private /etc/opendkim/keys/myweb.com/default
 echo -e "/ndefault._domainkey.myweb.com myweb.com:default:/etc/opendkim/keys/myweb.com/default" >> /etc/opendkim/KeyTable
 echo -e "/n*@myweb.com default._domainkey.myweb.com" >> /etc/opendkim/SigningTable
sed -i "s/cyberciti.com/$myweb.com/g" /etc/postfix-new1/main.cf

e assim por diante até que todas as linhas no arquivo start estejam completas

    
por Teddy291 03.07.2015 / 02:35

2 respostas

0

Aqui está o que eu substituiria seu script:

#!/bin/bash
while read new ip domain
do
  postmulti -e init
  postmulti -I postfix-$new -e create
  cd /etc/postfix-$new
  rm -rf main.cf
  wget http://www.********.com/*******/main.zip
  unzip main.zip
  mv main main.cf
  echo -e "queue_directory = /var/spool/postfix-$new" >> /etc/postfix-$new/main.cf
  echo -e "data_directory = /var/lib/postfix-$new" >> /etc/postfix-$new/main.cf
  echo -e "multi_instance_name = postfix-$new" >> /etc/postfix-$new/main.cf
  echo -e "mydomain = $domain" >> /etc/postfix-$new/main.cf
  echo -e "myhostname = host1.$domain" >> /etc/postfix-$new/main.cf
  echo -e "smtp_bind_address = $ip" >> /etc/postfix-$new/main.cf
  sed -i "s/oldip/$ip/g" /etc/postfix-$new/main.cf

  mv /etc/opendkim/keys/$domain/default.private /etc/opendkim/keys/$domain/default
  echo -e "/ndefault._domainkey.$domain $domain:default:/etc/opendkim/keys/$domain/default" >> /etc/opendkim/KeyTable
  echo -e "/n*@$domain default._domainkey.$domain" >> /etc/opendkim/SigningTable
  sed -i "s/cyberciti.com/$domain/g" /etc/postfix-$new/main.cf

done < start.txt

... tudo o que fiz foi envolver um loop while em torno do seu código existente.

Se eu puder sugerir outra alteração menor, seria consolidar todas as suas declarações echo em um documento "aqui", como este:

cat >> /etc/postfix-$new/main.cf << EOF
queue_directory = /var/spool/postfix-$new
data_directory = /var/lib/postfix-$new
...
EOF

Se não por motivos de desempenho (você pode não se importar), mas porque é mais fácil de ler.

    
por 03.07.2015 / 13:43
0

Você pode fazer algo como:

while read line;
do
new1=$(echo $line | cut -d"," -f1)
ip=$(echo $line | cut -d"," -f2)
domain=$(echo $line | cut -d"," -f3)
<Your bash script here with above three variables>
done < file.txt

Espero que ajude ..

    
por 03.07.2015 / 03:57

Tags