Skrypt w bashu do automatycznego uruchamiania modemu 3g

Potrzebujesz pomocy z C, C++, perl, python, itp.
tomekw
Posty: 32
Rejestracja: 11 grudnia 2010, 00:17

Skrypt w bashu do automatycznego uruchamiania modemu 3g

Post autor: tomekw »

Myślę, że skrypt posłuży wszystkim użytkownikom takich modemów.
Słowem wstępu, modem jest zainstalowany przy pomocy instrukcji stąd:
http://www.bez-kabli.pl/viewtopic.php?t=23432
wywołuje go poleceniem:

Kod: Zaznacz cały

wvdial 1234
teraz chciałem napisać skrypt, który automatycznie będzie:
  1. Co chwilę sprawdzał, czy modem jest podłączony i wykryty.
  2. Jeżeli nie, to dalej sprawdza.
  3. Jeżeli tak, to wywołuje wspomniane polecenie i sam się łączy z internetem.
  4. Po odpięciu modemu wraca do 1.
Pierwszą część udało się osiągnąć (sprawdzanie czy modem istnieje):

Kod: Zaznacz cały

ls -la /dev/ttyU*
teraz skrypt, i tu zaczynają się schody:

Kod: Zaznacz cały

#!/bin/bash
wyn = ls -la /dev/ttyU*
if [ "$wyn" -eq "1" ]
then echo "Wykrywa"
else echo "NIe wykrywa"
fi
exit 0
Proszę nie zapatrywać się teraz na drugą część, chodzi mi o sam warunek if,
chciałem by:

Kod: Zaznacz cały

if [ ls -la /dev/ttyU* = "prawda" ]
jeżeli [ modem = jest wykryty ]
i nie wiem jak wprowadzić takie coś.
Próbowałem też samo polecenie:

Kod: Zaznacz cały

 ls -la /dev/ttyU* 
wprowadzić jako oddzielny skrypt, niestety bezskutecznie.
Jak zrobić powyższą zależność?
mariaczi
Member
Posty: 1343
Rejestracja: 08 lutego 2008, 12:58
Lokalizacja: localhost@śląskie

Post autor: mariaczi »

Wykorzystaj przełącznik "-f" dla instrukcji if. Przy jej użyciu musisz podać dokładną nazwę pliku.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

"-f" nie zadziała, bo /dev/ttyUSB* jest urządzeniem blokowym, a nie plikiem. Za to "-e" powinno być ok ;)
panel
Beginner
Posty: 103
Rejestracja: 13 marca 2009, 21:07

Post autor: panel »

Najpierw sprawdziłbym co zwraca po komendzie

Kod: Zaznacz cały

ls -la /dev/ttyU*
echo $?
potem można próbować dalej

Kod: Zaznacz cały

#!/bin/bash
ls -la /dev/sda6
if [ "$?" != "0" ]; then
echo NO
else
echo OK
fi
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

panel, ale po co kombinować z ls'em, skoro są lepsze rozwiązania (wymienione wcześniej testy bashowe)?
tomekw
Posty: 32
Rejestracja: 11 grudnia 2010, 00:17

Post autor: tomekw »

Teraz nie mam dostępu do modemu, będę testował wieczorem, ewentualnie jutro, mam nową formę:

Kod: Zaznacz cały

#!/bin/bash
wyn = ls -la /dev/ttyU*
if [ "$wyn" != "0" ]
then echo "Jest"
else echo "Nie ma"
fi
Forma niestety nie działa, o ile sam if (chyba) nie jest zły, bardziej mnie martwi zmienna, czy odczyt.
@panel, próbowałem twoje, niestety zwraca błąd:

Kod: Zaznacz cały

ls: nie ma dostępu do /dev/ttyU*: NIe ma takiego pliku ani katalogu
2
OK
Czyli polecenie ls można sobie chyba darować.
...
Jeszcze próbowałen na inne sposoby, najważniejsze jest pobranie informacji, if nie będzie taki trudny jak to.
Przepraszam za rozwlekłość.
Awatar użytkownika
lessmian2
Member
Posty: 1088
Rejestracja: 30 kwietnia 2008, 19:38
Lokalizacja: Kraków

Post autor: lessmian2 »

Kod: Zaznacz cały

[lessmian@pyrtek ~]$ ls -al /dev/ttyUSB0
crw-rw---- 1 root uucp 188, 0 12-28 19:56 /dev/ttyUSB0
[lessmian@pyrtek ~]$ if [ -e /dev/ttyUSB0 ]; then echo dziaua; else echo 'nie dziaua';fi
dziaua
[lessmian@pyrtek ~]$ ls -al /dev/ttyUSB3
ls: nie ma dostępu do /dev/ttyUSB3: Nie ma takiego pliku ani katalogu
[lessmian@pyrtek ~]$ if [ -e /dev/ttyUSB3 ]; then echo dziaua; else echo 'nie dziaua';fi
nie dziaua
Kombinujecie Pany ;)
tomekw
Posty: 32
Rejestracja: 11 grudnia 2010, 00:17

Post autor: tomekw »

Skrypt w przygotowaniu, piszę byście Panowie wiedzieli, że projekt nie umarł.
Bardzo dziękuję lessmian2, bardzo pomogłeś. Skrypt jak ukończę robić, to umieszczę wersję ostateczną tutaj.
Pozdrawiam!

Edycja:
Szybciej to poszło niż myślałem jak się za niego wziąłem. Generalnie skrypt jest gotowy, ale ma jedną wadę (tu liczę na waszą pomoc).
Kod skryptu:

Kod: Zaznacz cały

#!/bin/bash
echo "Script by [email][email protected][/email]"
if [ -e /dev/ttyUSB0 ]
then
echo "Is work"
wvdial 1234
/home/tomek/modem_auto.sh
else
echo "Is Work not"
sleep 5
/home/tomek/modem_auto.sh
fi
exit 0
Problem jest z uruchamianiem tego przy starcie systemu, mianowicie, jak skopiuje to do /etc/init.d i dodam do rc.d poleceniem

Kod: Zaznacz cały

update-rc.d modem_auto.sh defaults
skrypt się nazywa modem_auto.sh, to podczas uruchamiania zaczyna mi skrypt wykonywać i nie chce się dalej system ładować. Sam też nie wiem, czy takie działanie skryptu jak obecnie nie jest mało wydajne (czy nie lepiej by było zrobić, by skrypt działał w tle.
Chciałem od razu zaznaczyć, że nie chodzi tutaj o ścieżkę, bo tą można w każdej chwili zmienić, ale właśnie dlaczego zamiast uruchamiać się cicho, to zaczyna cały skrypt odpalać podczas uruchamiania?
Pozdrawiam,
Tomek
Bodzio
Junior Member
Posty: 599
Rejestracja: 26 grudnia 2007, 18:35

Post autor: Bodzio »

Sprawa jest rozwiązana, proszę przeczytać ten wątek: http://dug.net.pl/tekst/132/huawei_e122 ... modemu_3g/

W artykule jest sporo informacji na temat obsługi modemów 3G (nie tylko tego konkretnego)
Jest rozwiązane doładowywanie konta, sms-y, wykorzystanie wammu i gammu.
Myślę że dobry gotowiec :)
ODPOWIEDZ