Witam,
Mam nastepujacy problem, pisze prosty skrypt w bash-u do wsadowego sciagania plikow z anonimowego ftp przy pomocy programu ftp zasadniczo wszystko dziala ale jest jeden problem Jako paramtery do skryptu podaje sie wyrazenia regularne opisujace pliki do sciagniecia awk ma wyciagnac odpowiednie nazwy plikow i podac je jako polecenie dla programu ftp.
Na poczatku przygotowuje sobie polecenia dla programu ftp do wylistowania katalogu:

zawartosc=`echo -e "open $host\nuser anonymous $juzer\ncd \"$katalog\"\ndir\nbye" | ftp -n`

Zmienna $host zawiera adres serwera podany przez uzytkownika, $juzer zawiera jego email (podawany jako haslo), $katalog zawiera sciezke pliku na serwerze. Zmienna $zawartosc zawiera wypis polecenia dir
potem w petli zczytuje kolejne wyrazenia regularne jaki podal uzytkownik:

while [ $# -ne 0 ];do
regexp="$1"
pobierz=`echo "$zawartosc" | awk ' $1~/^-/{plik=$9;i=10;while ( i <= NF ){plik=(plik " " $i);i++;}print plik;}'`
dopobrania=`echo "$pobierz" | awk -v rp="$regexp" ' $0~rp {print "get \"" $0 "\" ";}'`
#kod wysylajacy odpowiednio przygotowane pliki do programu ftp
shift 1
done

uzywam petli while i polecenie shift bo uzytkownik moze podac dowolna ilosc wyrazen regularnych jak paramtery do mojego skryptu pierwszy kod awk ktory wstawia obrobiona zawartosc do zmiennej pobierz jest odpowiedzialny za wyeliminowanie z listy plikow do pobrania katalogów i dowiązań symbolicznych oraz to ze jezeli w nazwie pliku jest spacja to zeby przekazana zostala kazda czesc jego nazwy
drugi raz wywolujac awk chce aby z listy plikow przechowywyanej w pobierz za pomoca wyrazen regularnych zostaly wyselekcjonowane odpowiednie pliki i przeslane zostalo przygotowane polecenie dla programu ftp
efektem dzialania tej petli jest to iz zmeinna $dopobrania zawiera np.:
get "nazwa plik1.txt"
get "nazwa pliku2.txt"
get "nazwa pliku3.txt"
...............................
get "nazwa plikuN.txt"
(rozszerzenie jest nie istotne dodalem je dla czytelnosci tutaj)
Wiec jaki jest problem?
Mianowicie przy przekazywaniu wyrazen regularnych:

  1. gdy podaje parametry do skryptu :
./nazwa_skryptu adres.hosta.ftp "sciezka/do katalogu/" plik\* dru\*

nie sciaga pliku o nazwie plik_pierwszy.txt
tylko od razu drugi_plik.txt
Jezeli podam tylko jedno wyrazenie regularne mianowicie plik* to sciaga
plik_pierwszy.txt
jednak samo podanie w tym wypadku paramteru * nie powoduje sciagniecia wszystkich plikow
2)gdy zmienie :

dopobrania=`echo "$pobierz" | awk -v rp="$regexp" ' $0~rp {print "get \"" $0 "\" ";}'`

na:

dopobrania=`echo "$pobierz" | awk -v rp="$regexp" ' rp {print "get \"" $0 "\" ";}'`

sciaga bez opamietania wszystkie pliki bezwzgledu na wyrazenie regularne
3) proba umieszczenia zmiennej rp miedzy / / konczy sie bledem

Czy ktos moglby mi wytlumaczyc co robie zle? na pewno jest to cos zwiazane z przekazywaniem wyrazenia regularnego.
Z gory dziekuje za odpowiedz i czas poswiecony na jej udzielenie
Pozdrawiam
Andrzej