我想使用 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进行通信,因此我使用expect
和screen
推出了自己的解决方案,在这种情况下,通过^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
是否适用于所有情况,因为它会产生一些非打印字符,并且可能重复输出。