我想通过使用shell脚本将AT
命令发送到我的调制解调器并解析结果以验证是否返回了OK。
at=`echo -ne "AT+CFUN1=1\r\n" > /dev/ttyUSB0 | cat /dev/ttyUSB0`
解析at1变量并提取" OK"的最佳方法是什么?或"错误"否则?
答案 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通信,因此我使用expect
和screen
滚动了自己的电话,在这种情况下,是通过{{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
在所有情况下都能正常工作,因为它会产生一些非打印字符并可能重复输出。