Temat: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Cześć. Próbuję napisać coś w Bashu, ale tutoriale, które znajduję nijak się mają do mojego routera. Nie wiem, czy to kwestia innej powłoki, czy implementacji basha. Mam niemal zerowe pojęcie o Linuxie i skryptach, natomiast całkiem spore wiem o C++

Próbuje stworzyć tablice, ale poniższy kod zupełnie nie dziła
klasa[0]="Marta M"
klasa[1]="Aleksandra D"
klasa[2]="Adam S"
klasa[3]="Angelika C"

log:
line 14: klasa[0]=Marta M: not found
line 15: klasa[1]=Aleksandra D: not found
line 16: klasa[2]=Adam S: not found
line 17: klasa[3]=Angelika C: not found

O takiej pętli, z operatorami to już tylko mógłbym marzyć
for (( i = 0 ; i <= 5; i++ ))
do
echo "Witam $i raz"
done
Rezultat: syntax error: bad for loop variable


A tak zapytam jeszcze... W Gargoyle na Status-->Connected Hosts istnieje rubryka Connected Wireless Hosts. Czy jest osobny plik na routerze, który przechowuje te właśnie dane? Znalazłem tylko Current DHCP Leases w  '/tmp/dhcp.leases', a chciałbym tylko aktywne połączenia z wifi

2

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Może nie używał byś tablic, co? To pokazałeś to jest dla basha, a w openwrt jest domyślnie ash. Rozróżniaj to i stosuj ogólna składnie, bez rozszerzeń specyficznych dla danej powłoki.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

W openwrt a raczej w busybox  jako shell jest ash. Petle for zob tak:

for i in 1 2 3 4 5
do
echo "$i"
done

4

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Dziękuje.
Mam jeszcze jedno pytanie odnośnie asha smile
W funkcji parametry są pod zmiennymi $1, $2, $3 itd. Natomiast ich ogólną ilość zawiera zmienna $#
Czy jest możliwość aby odwołać się do parametru x?
Przykład:
x=3
$$x, albo $($x) - czy coś w tym stylu...= odniesienie do wartości 3 parametru (zgodnie z wartością zmiennej x)...

5

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

x=3
x=$(($x-1))
shift $x
echo $1

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

6

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Dziękuje smile
A co do aktywnych połączeń to wyczytałem aby pingować IP`ki z  '/tmp/dhcp.leases'. Ale które to połączenia wifi nadal nie wiem. Może po szybkości pingu big_smile. Ja sobie po prostu zrobię pliczek z wyjątkami - adresami MAC hostów lan i te połączenia, które są inne od tych z pliczku to prawdopodobne wifi big_smile

7

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

http://eko.one.pl/?p=openwrt-skrypty#mac

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Panie Cezary... Dziękuje smile. To mi bardzo pomogło smile

9

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Jeśli jeszcze bym mógł na chwile Pana zająć.

read -n 1 lol < $sciezka
echo $lol

Pobranie jednego znaku z pliku 'sciezka', następnie jego wyświetlenie.
Wszystko fajnie, ale co jeżeli chciałbym wczytać pojedynczy znak z innej zmiennej, a nie z pliku?
Niby jest parametr -i oraz -e, ale nie wychodzi mi. Może to z basha.
W jaki więc sposób pobrać jeden znak ze zmiennej o x rozmiarze?

10

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

A="12345678"; echo ${A:0:1}

Naprawdę google bardzo ułatwia sprawę smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

11 (edytowany przez allucard018 2014-01-10 14:58:40)

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Stale używam google. Zdąrza się, że tracę po kilka godzin na szykanie jednej dupereli. W ostateczności dopiero tworzę temat wink. Trochę ogranicza mnie słaba znajomość angielskiego, ale zamierzam w przyszłości nad tym popracować. Tyle że to już zupełny offtopic smile.
Dziękuje za pomoc i miłego dnia życzę smile

12 (edytowany przez allucard018 2014-01-17 13:46:18)

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Uhm, mam pewien problem.
Mianowicie:

glob=0

fun()
{
  echo "funkcja"
  glob="yupi"
  echo "w fun glob: $glob"
  return 1
}

bufor=$(fun)
echo "$bufor"
echo "poza fun glob: $glob"

fun
echo "poza fun glob: $glob"

Rezultat:
funkcja
w fun glob: yupi
poza fun glob: 0
funkcja
w fun glob: yupi
poza fun glob: yupi


W przypadku 1 instrukcji to co wprowadziłem do echo jest zapisane do zmiennej bufor (tak jakby przechwycenie), ale zmienna globalna 'glob' nie zmienia wartości, gdyż staje się lokalną. Natomiast w 2 przypadku echo jest wyświetlone w konsoli, a wartość globalna ulega zmianie.
Teraz rodzi się pytanie: Czy jest możliwość "przechwycenia" (tak jak w 1 instrukcji) tego co jest w echo do zmiennej, a jednocześnie zmienienie globalnych zmiennych wewnątrz takiej funkcji przy tego rodzaju zapisie?

@Edit
Chodzi mi o to aby funkcja zmieniała wartości globalne,  wyświetlając przy tym informacje w konsoli, ale nie zawsze. Mógłbym po prostu wywoływać funkcje z parametrem i sprawdzać go przy każdym echo, ale czy nie ma innego wyjścia?

@Edit 2
Dobra... Rozwiązałem to w ten sposób, że uruchamiam taką funkcje normalnie, a komunikaty zapisywane są w zmiennej globalnej. I potem wyświetlam zawartość tej zmiennej, bądź nie.

13

Odp: Problem z pisaniem skyptów (TL-WR740N/ND v4, Gargoyle)

Dokładnie tak.

Jak wywołasz

fun
echo "poza fun glob: $glob"

to będzie działać. Jak zrobić

A=$(fun)
echo "poza fun glob: $glob"

to już nie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.