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

时间:2015-04-24 16:27:17

标签: linux bash shell at-command modem

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

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

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

2 个答案:

答案 0 :(得分:5)

绝对可以将AT命令发送到调制解调器并从命令行捕获其输出,就像您尝试的那样,但是只需使用普通的bash shell脚本。这就是我编写程序atinout的原因,专门用于支持您提出的方案。

按以下方式进行测试:

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

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

答案 1 :(得分:0)

我无法使用@hlovdal的解决方案与我的华为E3372h-158通信,因此我使用expectscreen滚动了自己的电话,在这种情况下,是通过{{1}读取温度传感器}:

^CHIPTEMP?

提示和警告:设置output=$(sudo expect <<EOF set timeout 5 log_user 0 spawn sudo screen /dev/ttyUSB0- sleep 1 send "AT\x5ECHIPTEMP?\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 "$output\n" | grep -P "^\^CHIPTEMP" 以获取log_user 1的输出。不确定screen在所有情况下都能正常工作,因为它会产生一些非打印字符并可能重复输出。