Logo


Kurs programowania w Bash'u

Nowości       Porady      

Tablice zmiennych

Tablice stosujemy gdy potrzeba przechować wiele zmiennych.

składnia:

tablica[nr_elementu]=wartosc

np. jesli mamy spis uczniów w klasie mozemy ich dane zapisać nastepujaco:


# zapisujemy dane w tablicy o nazwie klasa
# uwaga: tablica zawsze zaczyna sie od elementu 0 !

klasa[0]="Marta M"
klasa[1]="Aleksandra D"
klasa[2]="Adam S"
klasa[3]="Angelika C"

# odczytujemy dane ucznia nr 2

echo ${klasa[2]}

# lub cala tablice używając gwiazdki

echo ${klasa[*]}

# odczytujemy liczbe wszystkich uczniow
# poprzez dodanie znaku # bezpośrednio przed nazwą klasy

echo ${#klasa[*]}

Warto wspomnieć że liczba wszystkiech elementow tablicy zawiera rowniez elementy niezdefiniowane tzn. jeśli napiszemy:

klasa[25]="Joanna"

to polecenie wyświetlające ilość wszystkich elementów tablicy

echo ${#klasa[*]}


wyświetli 26 .

Po prostu bash liczy elementy od zera do ostatniego elementu, nie sprawdzając czy pod danym indeksem znajduje sie sensowna wartość. Jeśli zależy nam na sprawdzeniu ile elementów jest rzeczywiście przypisanych - mozna to sprawdzić za pomocą pętli - przykład jest _tutaj_.

Wyświetlenie zawartości tablicy klasa za pomocą pętli

#!/bin/bash


# wprowadzanie danych

klasa[0]="Marta M"
klasa[1]="Aleksandra D"
klasa[2]="Adam S"
klasa[3]="Angelika C"

liczba_elem=${#klasa[*]}
i=0

# dopoki i < liczba_el

while [ $i -lt $liczba_elem ]
do
echo ${klasa[i]}
# Wyswietl biezacy element
i=$[i+1]
# Zwieksz licznik o 1
done


Wygodnie byłoby aby program pytał o nazwiska uczniów i zapisywał je w tablicy. Można to zrobić następująco:

BAZA DANYCH UCZNIOW

Dane umieszczone sa w pamieci RAM



#!/bin/bash

echo -e "\nWprowadzanie danych:\n (aby zakonczyc, zamiast wpisywac dane ucznia - wcisnij enter)\n"

i=1
# numer poczatkowy ucznia = 1 [w dziennikach szkolnych liczymy od 1
# a nie od zera (choc mozna i tak :-) )]
while [ 1 ]
# petla nieskonczona
do
echo -n "Uczen $i: "
read "klasa[$i]"

if [ "${klasa[$i]}" = "" ]
# jesli uzytkownik zatwierdzil pusty wiersz
then
# wyjdz z petli
break
fi

i=$[i+1]
done

ilosc_uczniow=${#klasa[*]}

echo -e "Wyswietlanie bazy danych:\n\n"

# Jesli $ilosc_uczniow = 1 wyswietl komunikat i wyjdz z kodem powrotu = 0
if [ $ilosc_uczniow -eq 1 ] ; then echo "Brak uczniow w bazie";exit 0;fi

# dopoki $i < $ilosc_uczniow
# wyswietl ich

i=1
while [ $i -lt $ilosc_uczniow ]
do
echo -n "$i. "
# numer ucznia
echo "${klasa[$i]}"
# nazwisko ucznia
i=$[i+1]
done

echo
# pusty wiersz



Mozna byloby w ogóle nie używać tablic tylko umiescic dane w pliku tekstowym - przykład jest w dziale ze skryptami.

Ostatnio dodano

O stronie

Stronę najlepiej oglądać w rozdzielczości 1024x768. Strona optymalizowana dla przeglądarki Mozilla.

Prośba

Jeśli chciałbyś coś zmienić lub uważasz że czegoś brakuje pisz. Odpiszę na każdy list.

Subskrypcja

Jeśli chcesz być informowany o nowościach na stronie wpisz tu swój e-mail i kliknij Wyślij.

O mnie

O autorze
Autorem kursu jest Mariusz Majerowski
Ostatnia aktualizacja: 23 VI 2004.