LINUX.ORG.RU
решено ФорумAdmin

Простой BASH скрипт для остановки почты при увеличении очереди

 ,


0

2

Приветствую всех

Пишу баш скрипт который проверяет очередь почты в зимбре и если если значение привышает 1000 стопит службу отправки

Для вывода из очереди только цифрового значения был использована вот эта команда:

/opt/zimbra/postfix/sbin/postqueue -p | grep -v "^[^0-9A-Z]\|^$" | wc -l

Согласно моему разумению код скрипта должен выглядеть вот так

#!/bin/bash
if [ /opt/zimbra/postfix/sbin/postqueue -p | grep -v "^[^0-9A-Z]\|^$" | wc -l] -gt '1000'
then 
su - zimbra -c 'zmmtactl stop'
fi

Но это не работает, не могу понять почему

Зы. Сильно не пинайте, до этого программирования почти не касался

Операция [ ] выдаст ноль или единичку. Может быть так

QUE_LEN=$(/opt/zimbra/postfix/sbin/postqueue -p | grep -v "^[^0-9A-Z]\|^$" | wc -l)
if [ $QUE_LEN -gt 1000 ]; then
  #dddd

Yur4eg ★★
()

if [ /opt/zimbra/postfix/sbin/postqueue -p | grep -v «^[^0-9A-Z]\|^$» | wc -l] -gt '1000'

  • test ([) не умеет исполнять, он только сравнивает. Он выдаст тебе «too many arguments», ибо каждое неслужебное вхождение будет считать отдельным;
  • Ты не закрыл свой test (ты передаёшь -l] в качестве аргументов для wc, test его не увидит (и не должен);
  • «Больше чем» (-gt) ты подаёшь вне теста;
  • '1000' — строковое значение, и будет сравнена длина строки, а не «размер» числа (если вообще будет).
r3lgar ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.