나는 여러 개의 Postfix와 몇 가지 다른 것들을 쉽게 추가하는 데 사용하고 싶은 다음 스크립트를 작성했습니다.
아래는 작은 샘플입니다
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
이 스크립트에는 세 가지 요구 사항이 있으며 $new
$ip
$domain
이를 파일에 한 줄씩 추가한 다음 이 스크립트를 bash하는 방법을 알고 싶습니다. 한 줄 = 스크립트 전체 실행 1회.
예를 start
들어
new1, 1.1.1.1, myweb.com
new2, 2.2.2.2, myweb2.com
첫 번째 줄은 다음을 실행해야 합니다
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
start
파일의 모든 줄이 완료될 때까지 계속됩니다.
답변1
귀하의 스크립트를 다음으로 대체할 스크립트는 다음과 같습니다.
#!/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
...내가 하는 일은 while
기존 코드를 루프로 둘러싸는 것입니다.
echo
또 다른 작은 변경 사항을 제안할 수 있다면 다음과 같이 모든 선언을 하나의 "여기" 문서로 병합하는 것입니다 .
cat >> /etc/postfix-$new/main.cf << EOF
queue_directory = /var/spool/postfix-$new
data_directory = /var/lib/postfix-$new
...
EOF
성능상의 이유(아마도 신경쓰지 않을 수도 있지만)가 아니라 읽기가 더 쉽기 때문입니다.
답변2
다음을 수행할 수 있습니다.
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