Shell 如何监控radclient数据包断开是否已成功接收

Shell 如何监控radclient数据包断开是否已成功接收,shell,freeradius,Shell,Freeradius,我有以下问题: 我想在bash脚本中执行radclient命令来强制用户断开连接,但是如果数据包已接收并确认,我如何监控数据包断开连接的结果呢 我在想: #!/bin/bash echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret 如果收到并确认数据包,则退出代码1,否则退出代码0。您可以使用grep检查输出中的行,如: #!/bin/bash echo "

我有以下问题:

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

我在想:

#!/bin/bash

echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret
如果收到并确认数据包,则退出代码1,否则退出代码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`.
如果您打算在脚本中进行测试,当然可以在以下情况下使用:

或更具可读性:

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
除了使用grep,您还可以使用==和=~:


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

如果[$?-eq 0];然后其他的fi@user3155074我懂了。你是shell,一定不是bash,我把标签改了。
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
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' ]]