หมุน Ip ที่ส่งออกใน Postfix สคริปต์ไม่ทำงาน


0

ฉันพบสิ่งที่ดูเหมือนว่าจะเป็นโค้ดที่ดีในการหมุน postfix IP แต่ฉันไม่สามารถใช้งานได้ เมื่อฉันเรียกใช้ฉันได้รับข้อผิดพลาดนี้:

rotate_postfix_ip.sh: 2: Syntax error: "(" unexpected

ฉันไม่รู้ว่าจะแก้ไขอย่างไรไม่มีใครช่วยได้ไหม

#!/bin/bash
ips=("64.250.120.128" "64.250.121.241" "64.250.121.242")
length=${#ips[@]}
pos=`cat current.txt`
oldip=${ips[$pos - 1]}
if [ "$length" -eq "$pos" ] ; then
    echo "limit reached"
    pos=1
else
    echo "increment!"
    (( pos++ ))
fi

echo "$pos" > current.txt

newip=${ips[$pos - 1]}
echo "prev: $oldip"
echo "new: $newip"

sed -ie "s/smtp_bind_address=$oldip/smtp_bind_address=$newip/g" /etc/postfix/main.cf > /dev/null
service postfix reload






x@debi:~$ cat test.sh
#!/bin/bash
ips=("1" "2" "3")

x@debi:~$ sh test.sh
test.sh: 2: Syntax error: "(" unexpected
x@debi:~$ bash -xv test.sh
#!/bin/bash
ips=("1" "2" "3")
+ ips=("1" "2" "3")

ห่ามันไม่ได้เป็นอะไรกับการขึ้นบรรทัดใหม่ ฉันได้แก้ไขไฟล์ใหม่ด้วยกลุ่มและมันให้ข้อผิดพลาดเดียวกัน


อะไร bash คุณใช้เวอร์ชั่นอะไร ทำงานได้ดีกับ GNU bash, version 4.1.10(4)-release (i686-pc-cygwin).
mpy

ลองใส่ declare -a ips หลังจากแถวชีคอ
mpy

@mpy GNU bash เวอร์ชัน 4.1.5 (1) -release (i486-pc-linux-gnu) ก็ลองด้วยการประกาศ -a และมันก็ไม่ทำงาน
sathia

ไม่มีการทำให้จุดสิ้นสุดของเส้นยุ่งลงนั่นคือ \ n \ r แทนที่จะเป็น \ n? อาจ bash -xv rotate_postfix_ip.sh จะไม่ให้คำแนะนำใหม่หรือ นอกจากนี้โปรดลองป้อน ips=("64.250.120.128" "64.250.121.241" "64.250.121.242") ที่บรรทัดคำสั่ง (bash-)
mpy

1
คุณรันสคริปต์ได้อย่างไร ถ้าคุณทำ sh /path/to/rotate_postfix_ip.sh มัน เคยชิน วิ่งเพราะ bashเมื่อเรียกว่า shเลียนแบบเชลล์เป้าหมายซึ่งไม่สนับสนุนอาร์เรย์ คุณต้องเรียกใช้สคริปต์เช่นนี้: bash /path/to/rotate_postfix_ip.sh หรือเช่นนี้ chmod 755 /path/to/rotate_postfix_ip.sh; /path/to/rotate_postfix_ip.sh.
jaume

คำตอบ:


1

เพียงเรียกใช้สคริปต์ด้วยคำสั่ง "bash" มันจะแก้ปัญหา

ตัวอย่างเช่น : bash rotate_postfix_ip.sh


1

นั่นเป็นเหตุผลที่ฉันชอบโซลูชัน POSIX แบบพกพาที่ใช้งานได้เสมอ ...

#!/bin/sh

ips='
    64.250.120.128

    64.250.121.241
    64.250.121.242
'
#####################################################
[ ! -f './current.txt' ] && echo '1' > ./current.txt

nIPS=0
for ip in ${ips}; do nIPS=$(( nIPS + 1 )); done

pos=$(cat ./current.txt)
counter=1
for oldip in ${ips}; do
    [ $pos -eq $counter ] && break
    counter=$(( counter + 1 ))
done

[ "$nIPS" -eq "$pos" ] && {
    echo "limit reached"
    pos=1
} || {
    echo "increment!"
    pos=$(( pos + 1 ))
}

echo "$pos"  > current.txt

counter=1
for newip in ${ips};do
    [ $pos -eq $counter ] && break
    counter=$(( counter + 1 ))
done

echo "prev: $oldip"
echo "new: $newip"

sed -ie "s/smtp_bind_address=$oldip/smtp_bind_address=$newip/g" /etc/postfix/main.cf > /dev/null
service postfix reload
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.