0

我一直试图让这个工作有几次,但我似乎遇到了一些麻烦。

asterisk -rx "core show calls" | grep "active" | cut -d' ' -f1

星号命令像这样从/usr/sbin/asterisk启动它运行,执行星号可执行文件并管道输出,grep 用于活动调用。我通常会得到一个整数值,我想将它存储在一个变量中并从那里继续运行脚本。

我很难将参数传递给命令。

我基本上是在尝试将该命令变成一个 SHELL SCRIPT 并存储该值。

你们能指出我正确的方向吗?

4

3 回答 3

0

如果您的星号具有名称为“活动”的单个对等点,则所有其他示例都将不起作用

注意,对于这个任务简单做

asterisk -rx 'core show calls' |tail -n 2 | head -n 1|cut -f 1 -d\ 
于 2015-03-18T07:17:18.887 回答
0

关于什么:

active=$(asterisk -rx "core show calls" | awk '$2=="active"{n=$1} END{printf("%d",n)}')

这使用 awkprintf来确保如果在您的输出中跳过活动调用行,则为您的变量分配 a0而不是空白。

或者,如果您的 shell 是 bash,您可以使用它来避免所有管道:

while read active what _; do
  if [ "$what" = "active" ]; then
    break
  fi
done < <(asterisk -rx "core show calls")

在这个循环结束时,如果没有看到“活动呼叫”行,$active将是空白的,所以如果你愿意,你可以添加:

active=${active:-0}

如果没有报告活动呼叫,则分配零值。

(在我的测试0 active calls中,每次运行都会报告,所以所有这些空白处理只是保险。)

于 2015-03-16T15:23:17.240 回答
0

我找到了这个例子7.2.2.2 ,我已经修改了它来解决我想要完成的事情,所以如果我有超过 5 个调用在每次程序运行时运行,然后通过电子邮件提醒我。

#!/bin/sh

rast=`asterisk -rx 'core show calls' | grep 'active' | cut -d' ' -f1`
maxvalue="5"

echo "Program started"

if [ "$rast" -ge "$maxvalue" ]; then
  echo "More than one calls processed" | mail -s 'Verify Calls from '`uname -n` hayonj@example.com
else
  echo "No active calls" | mail -s 'Crontab executed from '`uname -n` hayonj@example.com
fi

echo "Program Terminated"

将文件保存在verify.sh我将它放在星号的二进制文件所在的位置,/sbin/并用于chmod a+x verify.sh设置脚本的执行权限。

之后,我只是用 crontab 像这样设置它, crontab -e然后* * * * * /sbin/verify.sh

这个小例子是我第一个自动化日常任务的 bash 脚本。

于 2015-03-16T18:32:38.273 回答