Как читать несколько строк одновременно и затем ждать в BASH
Есть скрипт
#!/bin/sh
pause=40
spooldir=/var/spool/asterisk
diallist=/etc/asterisk/script/zvonar/diallist.txt
file=diallist=/etc/asterisk/script/zvonar
echo `date`": Набор номера с $pause секунд паузой "
while read number; do
echo "Channel: Local/8$number@zvonar-dialer
MaxRetries: 0
RetryTime: 5
WaitTime: 30
Context: zvonar-informer
Extension: 2222
Callerid: 2222
Account: autodialer
Priority: 1" > $spooldir/tmp/$number
chmod 777 $spooldir/tmp/$number
chown asterisk:asterisk $spooldir/tmp/$number
mv $spooldir/tmp/$number $spooldir/outgoing
echo "$number"
sleep $pause
done < $diallist
echo "Done"
exit 0
Как сделать чтобы скрипт брал первые 3 номера из файла, затем спал 40 секунд, по истечении 40 секунд снова брал 3 номера и запускался снова? Я пробовал использовать такую конструкцию, но это не помогло
#!/bin/bash
for (( i=1; i <= 3; i++ )); do
.....
echo "$number"
done < $diallist
Ответы (1 шт):
Автор решения: aleksandr barakin
→ Ссылка
наверно, надо использовать счётчик проходов цикла, и на значениях, кратных требуемому числу, выполнять какие-то действия.
пример:
i=0 # начальное значение счётчика, пусть он будет в переменной i
while :; do # бесконечный цикл
((i++)) # увеличиваем счётчик на единицу
echo $i # выводим текущее значение счётчика
if ! ((i%3)); then # если значение кратно трём (остаток от деления равен 0)
sleep 3 # то вызываем программу sleep
fi # конец условия
done # конец цикла
результат выполнения — бесконечный список чисел, после вывода каждых трёх чисел — пауза. прервать цикл можно комбинацией ctrl+c