我有以下问题:
我想在 bash 脚本中执行 radclient 命令以强制用户断开连接,但是如果已收到并确认数据包断开连接的结果,我如何监控它?
我在想一件事:
#!/bin/bash
echo "User-Name=value1,Acct-Session-Id=value2" | radclient -x IP_XXXXXX:1700 disconnect secret
如果数据包收到并确认,则退出代码 (1) 否则退出代码 (0)
我有以下问题:
我想在 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`.
如果您打算在脚本中进行测试,您当然可以使用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' ]]
只需检查退出状态。NAK 将导致 radclient 返回 none 0 退出状态。或者至少在 v3.0.x radclient 中是这样的。