Forum I Roku Informatyki UW

Skrypt

Go down

Skrypt

Post by pawel14 on Thu Oct 13, 2011 3:49 pm

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):
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

View user profile

Back to top Go down

Re: Skrypt

Post by juho on Sat Oct 15, 2011 4:19 pm

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:
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
avatar
juho

Liczba postów : 177
Join date : 2010-10-13
Age : 27
Skąd : Krępiec / Lublin

View user profile http://juho-the-panda.xt.pl

Back to top Go down

Re: Skrypt

Post by pawel14 on Sun Oct 16, 2011 12:26 pm

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

View user profile

Back to top Go down

Re: Skrypt

Post by juho on Sun Oct 16, 2011 2:00 pm

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
avatar
juho

Liczba postów : 177
Join date : 2010-10-13
Age : 27
Skąd : Krępiec / Lublin

View user profile http://juho-the-panda.xt.pl

Back to top Go down

Re: Skrypt

Post by pawel14 on Sun Oct 16, 2011 3:07 pm

Ok, zgadza się. Jeśli skrypt wywołuję poprzez
Code:
 ./skrypt
bash skrypt
to tak się dzieje. Pamiętaj jednak, że przy wywołaniu
Code:
 . skrypt
skrypt wykonywany jest w tym samym interpreterze. Wtedy już nie powrócisz do katalogu bieżącego. Może tego nie sprecyzowałem, ale o taką właśnie sytuację mi chodziło.

pawel14

Liczba postów : 118
Join date : 2010-10-12

View user profile

Back to top Go down

Re: Skrypt

Post by juho on Sun Oct 16, 2011 4:28 pm

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
avatar
juho

Liczba postów : 177
Join date : 2010-10-13
Age : 27
Skąd : Krępiec / Lublin

View user profile http://juho-the-panda.xt.pl

Back to top Go down

Re: Skrypt

Post by Heniek on Mon Oct 24, 2011 9:10 pm

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

Heniek

Liczba postów : 329
Join date : 2010-10-12

View user profile

Back to top Go down

Re: Skrypt

Post by Gricha on Mon Oct 24, 2011 10:20 pm

Raczej druga opcja Smile
avatar
Gricha

Liczba postów : 425
Join date : 2010-10-12
Age : 27
Skąd : Myszków

View user profile

Back to top Go down

Re: Skrypt

Post by Heniek on Mon Oct 24, 2011 10:52 pm

Ok, teraz pytanie wnioskujesz na podstawie tego co twoj prowadzący mówił?

Heniek

Liczba postów : 329
Join date : 2010-10-12

View user profile

Back to top Go down

Re: Skrypt

Post by Gricha on Tue Oct 25, 2011 12:13 am

Wnioskuje na podstawie tego, że to wszystko jedno, więc po co sobie utrudniać życie
avatar
Gricha

Liczba postów : 425
Join date : 2010-10-12
Age : 27
Skąd : Myszków

View user profile

Back to top Go down

Re: Skrypt

Post by Sponsored content


Sponsored content


Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum