LINUX.ORG.RU

Цикл for с несколькими параметрами в каждом из элементов списка

 


1

1

Здравствуйте прошу помощи разобраться.

Есть файл (/run/balance-ipt-restart) вида:

-A PREROUTING -s 10.192.234.108/32 -j balance_isp3
-A PREROUTING -s 10.192.234.108/32 -j balance_isp3
-A PREROUTING -s 10.192.236.102/32 -j balance_isp1
-A PREROUTING -s 10.192.186.115/32 -j balance_isp3

Есть цикл:

for iptrestore in $(cat /run/balance-ipt-restart)
   do
        iptables -t mangle $iptrestore
   done
При подстановке переменной с cat элементы списка разбиваются по словам в виде:
+ cat /run/balance-ipt-restart
+ iptables -t mangle -A
iptables v1.4.14: option "-A" requires an argument
Try `iptables -h' or 'iptables --help' for more information.
+ iptables -t mangle PREROUTING
Bad argument `PREROUTING'
Try `iptables -h' or 'iptables --help' for more information.
+ iptables -t mangle -s
iptables v1.4.14: option "-s" requires an argument
Try `iptables -h' or 'iptables --help' for more information.
+ iptables -t mangle 10.192.234.108/32
Bad argument `10.192.234.108/32'
Try `iptables -h' or 'iptables --help' for more information.
+ iptables -t mangle -j
iptables v1.4.14: option "-j" requires an argument
Try `iptables -h' or 'iptables --help' for more information.
+ iptables -t mangle balance_isp3
Bad argument `balance_isp3'
Хотелось бы получить конструкцию вида
for iptrestore in '-A PREROUTING -s 10.192.234.108/32 -j balance_isp3' '-A PREROUTING -s 10.192.234.108/32 -j balance_isp3'
   do
        iptables -t mangle $iptrestore
   done
То есть что бы каждая строка была элементом списка. Заранее спасибо.


Двойные кавычки вроде съедают новые строки. Попробуй

"$(cat /run/balance-ipt-restart)"

anonymous
()
Ответ на: комментарий от anonymous

Получишь весь файл одной строкой.

iVS ★★★★★
()
Ответ на: комментарий от anonymous

Если так «$(cat /run/balance-ipt-restart)»

то

+ cat /run/balance-ipt-restart
+ iptables -t mangle -A PREROUTING -s 10.192.234.108/32 -j balance_isp3 -A PREROUTING -s 10.192.234.108/32 -j balance_isp3
iptables v1.4.14: Cannot use -A with -A

fet4
() автор топика
Ответ на: комментарий от anonymous

Спасибо огромное. То что нужно.

Не могли бы описать цикл не могу понять как он выполняется.

fet4
() автор топика
Ответ на: комментарий от fet4

Не могли бы описать цикл не могу понять как он выполняется.

Файл читается построчно — читайте help read.

while ...; do
    ...
done < file
эквивалентно
cat file | while ...; do
   ...
done
с той разницей, что while выполняется в текущем шелле, а не создаётся ещё один.

anonymous
()
Ответ на: комментарий от Deleted

собственно ТС говорил что ему не нравится поведение for, которое аналогично xargs -n1, и он хочет -L1

bl ★★★
()

Если чтобы именно внутри скрипта использовать, я предпочту такие переменные загнать в массив.

Цикл из строк. (комментарий)

$ cat xx.sh 
#!/bin/sh

declare -a iptrestore
IFS="
"
iptrestore=(`cat /run/balance-ipt-restart`)

for x in ${iptrestore[@]}; do
 echo "$x"
 echo -------------- ko ko ko --------------
 iptables -t mangle "$x"
 echo -------------- ok ok ok --------------
done;

justAmoment ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.