Nowe posty

Autor Wątek: if / for  (Przeczytany 5684 razy)

Offline justysia atonik

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 2
    • Zobacz profil
if / for
« dnia: 2005-05-31, 10:38:40 »
mam problem z uruchomieniem skryptu, probowalam na orzne sposoby ale nic nie daje rezultatow, nie wiem moze gdzies wkradl sie jakis blad.. gdyby ktos potrafil mi pomoc, to bylabym bardzo wdzieczna.. ponizej zamieszczam tresc calego skryptu

#!/bin/bash
echo Skrypt nr.4;
echo $1;
wielkosc=$1;

#>>>----------------------------------------------------------------------------------------------------------
# polecenie echo drukuje na ekranie kolejno: nazwe skryptu, nastepnie pierwszy parametr
# argument : $1 - wielkosc pliku w bajtach, której istnienie ma być sprawdzone
#----------------------------------------------------------------------------------------------------------------


if [ $# -ne \\"1\\" ]; then
echo \\"BLAD! Niewłasciwa liczba parametrów\\";
echo \\"SPOSOB UZYCIA: `basename $0` [Wpisz wielkosć pliku w bajtach] \\";
exit;

#>>>----------------------------------------------------------------------------------------------------------
# funkcja sprawdza czy liczba podanych parametrow rowna się jeden, jeżeli nie to
# polecenie echo wyswietla komunikat o bledzie i nastepuje zakonczenie (wyjscie - exit)
#----------------------------------------------------------------------------------------------------------------

# Sprawdzmy, czy wielkosc jesli liczba calkowita
if [ -z \\"`echo $1 | egrep \\'^[0-9]*$\\'`\\" ]; then
   echo \\"Wielkość musi być liczba całkowita\\"
   exit;
fi

#>>>----------------------------------------------------------------------------------------------------------
# Sprawdzmy, czy wielkosc jesli liczba calkowita
# Opłaca się uzyc wyrazenia regularnego (liczba calkowita to po prostu ciag cyfr)
# -------------------------------------------------------------------------------------------------------------


lista=(`awk -F: \\'{ print $1; }\\' /etc/passwd | sort -d`)

#>>>----------------------------------------------------------------------------------------------------------
# tablica : lista - zapisane sa do niej nazwy uzytkownikow, które znajduja się w pliku
# /etc/passwd, awk filtruje plik i drukuje na ekranie pierwsza jego kolumne - print$1
# opcja -F - zmienia wartosc separatora rekordu wejsciowego, sort sortuje wynik
# alfabetycznie
# -------------------------------------------------------------------------------------------------------------

for user in ${lista
  • }; do

   ile=`find / -size +${wielkosc}c -user ${user} |wc -l`
   echo \\"${user} ma ${ile} plików o rozmiarze większym niż ${wielkosc} bajtow.\\"
done

#>>>-----------------------------------------------------------------------------------------------------------
# Wynikiem tego polecenia będzie lista plików w systemie (szukamy od /) należących
# np. do użytkownika\\'justyna\\' i większych niż zadana ilosc bajtów.
# listę tę zliczamy za pomocą potoku do polecenia \\'wc -l\\' (ono liczy ilość linii)
# ------------------------------------------------------------------------------------------------------------

Offline Piotr Chmura

  • Administrator
  • Guru
  • *****
  • Wiadomości: 5060
    • Zobacz profil
if / for
« Odpowiedź #1 dnia: 2005-05-31, 11:29:48 »
 > #!/bin/bash
 > echo Skrypt nr.4;
 > echo $1;
 > wielkosc=$1;

echo \\"Skrypt nr.4\\"

te sredniki sa tu niepotrzebne...

dalej mi sie nie chcialo czytac :-)

najprosciej powpisuj sobie co jakis czas
echo costam
i zobacz na czym ci sie sypie...

Offline Grzegorz Świtkowski

  • Users
  • Guru
  • *****
  • Wiadomości: 516
    • Zobacz profil
if / for
« Odpowiedź #2 dnia: 2005-05-31, 12:44:21 »
> najprosciej powpisuj sobie co jakis czas
 > echo costam
 > i zobacz na czym ci sie sypie...

Ewentualnie w pierwszej linijce #!/bin/bash -x

Co do ewidentnych bykow syntaktycznych, to dodalbym jeszcze brak fi przy pierwszym if\\'ie

Offline Brak brak

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 26
    • Zobacz profil
if / for
« Odpowiedź #3 dnia: 2005-05-31, 09:38:00 »
chce sprawdzic czy ang_x nie jest mniejsze niz zero, jak tak to 2*pi dodac do ang_x
nie wiem jak z tego petle zrobic:
...
ang_1= ....
ang_2=....
ang_3=....
ang_4=...

  ang= kat; problem ze on nie moze byc mniejszy niz 0, chcialem tak zrobic:
n=4
for i=1:n,
           if ang_n<0
                ang_n=ang_n+(2*pi)
           end
    end;  

to dziala recznie (bede miec oczekiwany rezultat)

jak zakodowac zeby ang_1,ang_2 itd. byl tam w if  jako ang_ n ? ....?


Offline Konrad Świć

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 46
    • Zobacz profil
if / for
« Odpowiedź #4 dnia: 2005-05-31, 09:59:14 »
2005-05-31 09:38:00 [pl]ice napisał:

> chce sprawdzic czy ang_x nie jest mniejsze niz zero, jak tak to 2*pi dodac do ang_x
 > nie wiem jak z tego petle zrobic:
 > ...
 > ang_1= ....
 > ang_2=....
 > ang_3=....
 > ang_4=...
 >
 >   ang= kat; problem ze on nie moze byc mniejszy niz 0, chcialem tak zrobic:
 > n=4
 > for i=1:n,
 >            if ang_n<0
 >                 ang_n=ang_n+(2*pi)
 >            end
 >     end;  
 >
 > to dziala recznie (bede miec oczekiwany rezultat)
 >
 > jak zakodowac zeby ang_1,ang_2 itd. byl tam w if  jako ang_ n ? ....?
 >
 >

http://www.republika.pl/dief/main.html

Offline Sebastian Kazimierski

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 26
    • Zobacz profil
if / for
« Odpowiedź #5 dnia: 2005-06-02, 21:17:52 »
2005-05-31 09:38:00 [pl]ice napisał:

> chce sprawdzic czy ang_x nie jest mniejsze niz zero, jak tak to 2*pi dodac do ang_x
 > nie wiem jak z tego petle zrobic:
 > ...
 > ang_1= ....
 ...
 >   ang= kat; problem ze on nie moze byc mniejszy niz 0, chcialem tak zrobic:
 > n=4
 > for i=1:n,
 >            if ang_n<0
 >                 ang_n=ang_n+(2*pi)
 >            end
 >     end;  
...
 > jak zakodowac zeby ang_1,ang_2 itd. byl tam w if  jako ang_ n ? ....?
*********************************************************************
Mam problem ze zrozumieniem Twojego pytania. Nie napisałeś w czym programujesz, może to by pomogło.
Domyślam się, że chodzi o zmienianie nazw zmiennych w kolejnych iteracjach pętli. Po mojemu to się nie da - przynajmniej ja nic o tym nie wiem. A czy w tym języku istnieją dobre kontenery? Wtedy mógłbyś dodać te zmienne do jednego kontenera (np. w Javie metodą *.add()) i np. stosując iterator przemieszczać się po kolejnych obiektach z kontenera i wykonywać pożądane iteracje. Ale chyba nie idzie Ci o Javę? Może następnym razem warto nadmienić w czym kodujesz?

Offline Paweł Kobyliński

  • Users
  • Użytkownik
  • **
  • Wiadomości: 50
    • Zobacz profil
if / for
« Odpowiedź #6 dnia: 2005-06-18, 18:28:16 »
Witam, mam pewien pomysl ale nie wiem czy akurat w twoim przypadku mozesz tak zrobic, mianowicie moglbys zrobic ze zmiennych ang_x tablice ang
  • , wtedy zmiana indeksu tablicy w petli nie sprawialaby zadnych problemow, ale powtarzam nie zawsze mozna tak zrobic( chociaz prawie).

Kobcio

Offline Paweł Kobyliński

  • Users
  • Użytkownik
  • **
  • Wiadomości: 50
    • Zobacz profil
if / for
« Odpowiedź #7 dnia: 2005-06-18, 18:31:22 »
PS. Dodaje jeszcze ( tak dla Khaza) ,ze moj pomysl odnosi sie do jezykow z grupy C (tzn. Ansi C, C++ ,C# itp) oraz z grupy Pascala.
Kobcio