0

我有以下问题:

我想在 bash 脚本中执行 radclient 命令以强制用户断开连接,但是如果已收到并确认数据包断开连接的结果,我如何监控它?

我在想一件事:

#!/bin/bash

echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret

如果数据包收到并确认,则退出代码 (1) 否则退出代码 (0)

4

2 回答 2

0

您可以使用grep检查输出中的一行,例如:

#!/bin/bash
echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret | grep -Fq 'rad_recv: Disconnect-ACK packet'

例子:

bash script.sh
echo "$?"  ## Can produce 0 or 1 depending on the exit value of `grep`.

如果您打算在脚本中进行测试,您当然可以使用if

if echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret | grep -Fq 'rad_recv: Disconnect-ACK packet'; then
    ...
else
    ...
fi

或者更具可读性:

echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret | grep -Fq 'rad_recv: Disconnect-ACK packet'
if [[ $? -eq 0 ]]; then
    ...
else
    ...
fi

除了使用之外,您还可以使用andgrep来检查模式:===~

RESULT=$(echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret)
[[ $RESULT == *'rad_recv: Disconnect-ACK packet'* ]]
...

或者

[[ $RESULT =~ 'rad_recv: Disconnect-ACK packet' ]]
于 2014-08-07T09:24:21.023 回答
0

只需检查退出状态。NAK 将导致 radclient 返回 none 0 退出状态。或者至少在 v3.0.x radclient 中是这样的。

于 2014-08-07T12:03:51.833 回答