Долго мучился с проверкой баланса на USB модеме. Дело в том, что в ответ на запрос *100# приходит кодированное сообщение. Переключение сообщений на английский язык не помогает. Интернет готового решения не дал. В итоге написал однострочник, может кому пригодится:
gammu getussd *100# | grep "Service reply" | sed -e "s/.*\"\(.*\)\".*/\1/" | xxd -r -ps | iconv -f=UTF-16BE -t=UTF-8
Должны быть установлены: gammu, iconv. Остальные программы вроде есть по-умолчанию.
gammu должен быть настроен на нужный порт при помощи gammu-config.