Sending modem AT command and parsing result

ogs picture ogs · Apr 24, 2015 · Viewed 14.9k times · Source

I would like to send AT command to my modem by using shell script and parse the result in order to verify if the OK is returned.

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

What is the best way to parse the at1 variable and extract "OK" or "ERROR" otherwise ?

Answer

hlovdal picture hlovdal · May 9, 2015

It is absolutely possible to send AT commands to a modem and capture its output from the command line like you are trying to do, however not by just using plain bash shell scripting. Which is why I wrote the program atinout specifically to support scenarios like you ask about.

Test like the following:

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

If you intend to parse the output in any more sophisticated way you should save the output to a file instead by giving a filename instead of the last - and read that.