Написал недавно простенький скриптик на Bash. Если вкратце, то он отправляет АТ команду на модем, считывает ответ, отрезает лишнее и подаёт на вывод уровень сигнала. Использую для отображения в conky.
#!/bin/sh
#Отправляем АТ команду на один из портов модема
echo -e "AT+CSQ\r\n" > /dev/ttyUSB1
# Ждём отклика модема
sleep 1
# Считываем вывод в файл и завершаем считывание через 1 сек.
cat /dev/ttyUSB1 > /tmp/sig &
sleep 1 && killall cat
# Отрезаем лишние символы.
#После отрезания cut'ом на выводе может оказаться либо "[0-9]," либо "[1-9][0-9]"
# То есть нужно отрезать запятую, если она есть.
r=`cat /tmp/sig | cut -c7-8|sed 's/,//'`
#Чистим за собой
rm -f /tmp/sig
#Формула для вычисления уровня сигнала в dB x=r*2-113, где r - вывод модема.
m=$((-113))
rur=$((r*2+$m))
#Проверяем, всё ли считалось с модема верно, если не считалось, то скрипт
#просто выводит предыдущее значение (заточено под conky)
if (($rur!=$m ))
then
rm -f /tmp/sig1
echo $rur >/tmp/sig1
fi
#Так как затачивалось всё под conky, нужно было более-менее исправное
#отображение уровня сигнала, поэтому вывод сохраняется в файл,
#и, в случае неудачного считывания, на вывод подаётся последний исправный.
cat /tmp/sig1
exit 0
C башем знаком плохо. Только учусь писать на нём скрипты. С удовольствием выслушаю замечания и рекомендации по коду.