Как читать несколько строк одновременно и затем ждать в 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

→ Ссылка