发送调制解调器 AT 命令并解析结果



我想使用 shell 脚本将AT命令发送到我的调制解调器并解析结果以验证是否返回 OK。

at=`echo -ne "AT+CFUN1=1rn" > /dev/ttyUSB0 | cat /dev/ttyUSB0`

解析 at1 变量并提取"OK"或"ERROR"的最佳方法是什么?

绝对有可能将 AT 命令发送到调制解调器并从命令行捕获其输出,就像您尝试的那样,但不能仅使用普通的 bash shell 脚本。这就是为什么我专门为支持您询问的场景编写了该程序。

测试如下所示:

MODEM_DEVICE=/dev/ttyUSB0
MODEM_OUTPUT=`echo AT | atinout - $MODEM_DEVICE -`
case $MODEM_OUTPUT
in
        *OK*)
                echo "Hurray, modem is up and running :)"
                ;;
        *)
                echo "Oh no! Something is not working :("
                ;;
esac

如果您打算以任何更复杂的方式解析输出,则应通过提供文件名而不是最后一个-来将输出保存到文件中并读取该输出。

我无法使用@hlovdal的解决方案与华为E3372h-158进行通信,因此我使用expectscreen推出了自己的解决方案,在这种情况下,通过^CHIPTEMP?读取温度传感器:

output=$(sudo expect <<EOF
set timeout 5
log_user 0                                                                                                                 spawn sudo screen /dev/ttyUSB0-
sleep 1
send "ATx5ECHIPTEMP?r"
expect "OK"
puts "n-->$expect_out(buffer)<--"
# Send C-a  to end the session
send "x01"
send "x5C"
EOF
)
# Strip non-printable control characters
output=$(printf "$output" | tr -dc '[:print:]n' )
printf "$outputn" | grep -P "^^CHIPTEMP"

提示和注意事项:设置log_user 1以获取screen的输出。不确定screen是否适用于所有情况,因为它会产生一些非打印字符,并且可能重复输出。

最新更新