Skrypt
4 posters
Page 1 of 1
Skrypt
Napisałem taki skrypt do ćwiczenia nr 2 z pierwszych labów (trzeba wypisać wszystkie niepuste pliki zwykłe z katalogu podanego w argumentach, a jeśli nie ma argumentów to z katalogu bieżącego):
Bez problemu wypisywane są wszystkie pliki w katalogu, w którym wywołuję skrypt. Przy podaniu jakiegokolwiek argumentu nic się nie wypisuje, chociaż w katalogach są różne pliki: *.sh, *.txt, itd. Co tu jest źle?
- Code:
#!/bin/bash
if [ $# -eq 0 ]
then
for i in *
do
if [ -f $i -a -s $i ]
then echo $i
fi
done
else for f in $@
do
if [ -d $f ]
then
for j in `ls $f`
do
if [ -f $j -a -s $j ]
then echo $j
fi
done
else echo "Katalog nie istnieje"
fi
done
fi
Bez problemu wypisywane są wszystkie pliki w katalogu, w którym wywołuję skrypt. Przy podaniu jakiegokolwiek argumentu nic się nie wypisuje, chociaż w katalogach są różne pliki: *.sh, *.txt, itd. Co tu jest źle?
pawel14- Liczba postów : 118
Join date : 2010-10-12
Re: Skrypt
Powinieneś chyba przejść najpierw do tego katalogu za pomocą polecenia "cd", a później dopiero wypisywać jego pliki iterując for f in *.
Moje rozwiązanie:
Moje rozwiązanie:
- Code:
#!/bin/bash
ERR=0
if [ $# -eq 1 ]
then {
if [ -d $1 ]
then cd $1
else {
echo niepoprawny katalog
ERR=1
}
fi
}
fi
if [ $ERR -eq 0 ]
then {
for f in *
do
if [ -f $f ]
then echo $f
fi
done
}
fi
Re: Skrypt
Faktycznie, teraz działa. Dzięki. Jednak w związku z tym pojawiło się nowe pytanie. Jak po takiej zmianie powrócić do katalogu, w którym wywołaliśmy skrypt?
pawel14- Liczba postów : 118
Join date : 2010-10-12
Re: Skrypt
Po skończeniu działania skryptu katalog wróci do poprzedniego. To dlatego, że wszelkie zmiany typu deklaracja zmiennych, czy zmiana katalogu są trwałe tylko dla interpretera, który wykonuje ten skrypt (o ile nie zostaną w jakiś sposób wyeksportowane). Ciekawe jest to, że nawet gdybyś w instrukcji IF THEN nie użył nawiasów klamrowych { }, to zmiana katalogu w bloku THEN byłaby aktualna tylko wewnątrz bloku THEN, a później w skrypcie wszystko wróciłoby do początku.
Wszystko jest opisane w tym README:
http://www.mimuw.edu.pl/~mengel/SO/PUBLIC-SO/01_scripts/readme
Wszystko jest opisane w tym README:
http://www.mimuw.edu.pl/~mengel/SO/PUBLIC-SO/01_scripts/readme
Re: Skrypt
Ok, zgadza się. Jeśli skrypt wywołuję poprzez
- Code:
./skrypt
bash skrypt
- Code:
. skrypt
pawel14- Liczba postów : 118
Join date : 2010-10-12
Re: Skrypt
Faktycznie.. Można w takim razie zapamiętać sobie ścieżkę aktualnego katalogu w jakiejś zmiennej i później do niego wrócić przez "cd". Ścieżka ta znajduje się w zmiennej $PWD
Re: Skrypt
Mam pytanko odnośnie ćwiczenia z 3. labu:
Ten program wymaga stworzenia dwóch potomków jednego procesu i to te 'dzieci' maja się porozumiewać, czy moze chodzi o stworzenie syna i komunikacje miedzy procesem potomnym a macierzystym
Ten program wymaga stworzenia dwóch potomków jednego procesu i to te 'dzieci' maja się porozumiewać, czy moze chodzi o stworzenie syna i komunikacje miedzy procesem potomnym a macierzystym
Heniek- Liczba postów : 329
Join date : 2010-10-12
Re: Skrypt
Ok, teraz pytanie wnioskujesz na podstawie tego co twoj prowadzący mówił?
Heniek- Liczba postów : 329
Join date : 2010-10-12
Re: Skrypt
Wnioskuje na podstawie tego, że to wszystko jedno, więc po co sobie utrudniać życie
Gricha- Liczba postów : 425
Join date : 2010-10-12
Age : 32
Skąd : Myszków
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|