HWSW Informatikai Kerekasztal: Bash programozás - HWSW Informatikai Kerekasztal

Ugrás a tartalomhoz

Mellékleteink: HUP | Gamekapocs

  • (2 Oldal)
  • +
  • 1
  • 2
  • Nem indíthatsz témát.
  • A téma zárva.

Bash programozás

#1 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 09:56

Nem nagyon találtam itt ilyen témát, hosszabb távon vélhetően hasznos is lehet, hiszen többé-kevésbé nem is függ a disztribúciótól.

Kezdeném is a sort, napi mentéshez időzített szkriptet készítek. Többfélét is, de van egy terület, ahol kicsit elakadtam. Bár nem teljesen ilyen a helyzet, de hogy értsétek, valami olyasmit szeretnék, hogy van "n" darab userem egy linuxos gépen, mindnekinek van könyvtára, adatokkal a /home alatt. Azt szeretném, hogy legyen valami olyan szkriptem, ami benyalja a könyvtárakat és egyesével feldolgozza (tömöríti) azt.

Azaz pl. van két user, melyek home könyvtárai:
/home/jozsi
/home/pisti

Cél az lenne, ha nekimegy a szkript, akkor generáljon le egy jozsi.tgz és egy pisti.tgz fájlt. Ez a része nem gond, de szeretném, hogy minden alkönyvtárról egy külön tömörített állomány készüljön. Igazából több user van, illetve későbbiekben ha felveszek egy usert, nem akarok minden archiváló szkriptet módosítani, ezért csak a legutolsó opció az, hogy a szkriptben minden egyes usert "felsorolok", azaz manuálsan adom meg a könyvtárak és a fájlok neveit.

Keresnék az interneten is, természetesen, na de ezt az igényt hogyan "fogalmazzam meg" a google-nek :think: :rolleyes:
Adjon az Isten, szebb jövőt!

#2 Felhasználó inaktív   mocsi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 6.848
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 14:00

#!/bin/bash

dadate=`date +%y%m%d`
cd /home
for i in `ls`; do
tar cvf $i"_"$dadate.tgz
done

unset i
unset dadate

Szerkesztette: mocsi 2008. 01. 10. 14:14 -kor

Where you come from... is gone.
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!

#3 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:12

Idézet: mocsi - Dátum: 2008. jan. 10., csütörtök - 14:00

#!/bin/bash

dadate=`date +%y%m%d`
cd /home
for i in `ls`; do
tar cvf $i"_"$dadate.tgz
done

unset i
unset dadate

Köszi!

Egyelőre nem megy, az "aposztrófok" javítása után az aktuális dátum megállapítását még változtatnom kellett kicsit, ilyen lett most:

#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in 's'; do
tar -cvf $i"_"$dadate.tgz
done

unset i
unset dadate


Eredménye:
#./test.sh
080110
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
#

Az első sorában a "080110" az echo eredménye, addig jó a dolog. Tar-ra anyázik, baromi régen pogramoztam, akkor sem túl hatékonyan, de úgy tűnik, a tar-nak nincs megadva a "mit", csak az hogy "mibe". Ezt jól gondolom :think:
Adjon az Isten, szebb jövőt!

#4 Felhasználó inaktív   bogdan 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 18.631
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:18

az aposztrofokat nem "javitani", hanem utananezni kene, hogy mit jelent a visszafele aposztrof! ;) hm.. ahogy nezem nem is ertem, hogy hogy mehet aposztrofok nelkul amit irtal!

a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!
a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#5 Felhasználó inaktív   mocsi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 6.848
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:24

Idézet: Mono - Dátum: 2008. jan. 10., csütörtök - 15:12

Köszi!

Egyelőre nem megy, az "aposztrófok" javítása után az aktuális dátum megállapítását még változtatnom kellett kicsit, ilyen lett most:

#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in 's'; do
tar -cvf $i"_"$dadate.tgz
done

unset i
unset dadate


Eredménye:
#./test.sh
080110
tar: Cowardly refusing to create an empty archive
Try `tar --help' or `tar --usage' for more information.
#

Az első sorában a "080110" az echo eredménye, addig jó a dolog. Tar-ra anyázik, baromi régen pogramoztam, akkor sem túl hatékonyan, de úgy tűnik, a tar-nak nincs megadva a "mit", csak az hogy "mibe". Ezt jól gondolom :think:

Ohh, ja
#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in `ls`; do
tar -cvf $i"_$dadate.tgz" $i
done

unset i
unset dadate

Where you come from... is gone.
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!

#6 Felhasználó inaktív   zZsOlTi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 5.821
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:25

Idézet: Mono - Dátum: 2008. jan. 10., csütörtök - 15:12

...de úgy tűnik, a tar-nak nincs megadva a "mit", csak az hogy "mibe". Ezt jól gondolom :think:

Igen, kell oda mégegy $i.

Én ezt akartam javasolni, ez mondjuk nem dátumoz:

for i in `ls`; do tar -cvf $i.tgz $i;done


A te verziód így kéne:
#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in 'ls'; do
[B]tar -cvf $i"_"$dadate.tgz $i[/B]
done

unset i
unset dadate

-ZsOlTi-

#7 Felhasználó inaktív   mocsi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 6.848
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:25

Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:18

az aposztrofokat nem "javitani", hanem utananezni kene, hogy mit jelent a visszafele aposztrof! ;) hm.. ahogy nezem nem is ertem, hogy hogy mehet aposztrofok nelkul amit irtal!

a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!

pontosan, kifelejtettem a madosik parametert  thx  :respect:
Where you come from... is gone.
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!

#8 Felhasználó inaktív   mocsi 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 6.848
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:28

Idézet: zZsOlTi - Dátum: 2008. jan. 10., csütörtök - 15:25

Igen, kell oda mégegy $i.

Én ezt akartam javasolni, ez mondjuk nem dátumoz:

for i in `ls`; do tar -cvf $i.tgz $i;done


A te verziód így kéne:
#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in 'ls'; do
[B]tar -cvf $i"_"$dadate.tgz $i[/B]
done

unset i
unset dadate

Itt is  :respect: . A tied konzol zsokeilag szebb :cool: , de a datumot azert raktam bele, mert valami napi mentesrol volt szo.

Szerkesztette: mocsi 2008. 01. 10. 15:29 -kor

Where you come from... is gone.
Where you thought you were going to... were never there.
Where you are ain't no good, unless you get away from there!

#9 Felhasználó inaktív   bogdan 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 18.631
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:31

miert mondana ellent egymasnak a ketto? ez egy sor, es datumoz:

for i in `ls`; do tar -cvf $i-`date +%y%m%d`.tgz $i;done
a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#10 Felhasználó inaktív   szeder 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 3.009
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:36

1. ha jozsi/ és jozsi.tgz ugyanabba a könyvtárba kerülnek, akkor mindkét megoldás csinál majd egy jozsi.tgz.tgz-t is.
2. mindkét megoldás elhasal azon, ha a tömörítendő könyvtárak nevében szóköz van (ami felhasználói nevek esetén nem túl valószínű, de ha egyszer netán másra is kellene használni a scriptet...)

szerk.: mostmár mindhárom (;

Szerkesztette: szeder 2008. 01. 10. 15:36 -kor


#11 Felhasználó inaktív   bogdan 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 18.631
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:41

1) termeszetesen nem a celkonyvtarban allva, vagy a tar celjakent nem a celkonyvtarat megnevezve kene kiadni
2) en zsh-hoz vagyok szokva, igy foreach-el kezdenem csinalni, nem `ls`-el, ott nem jon elo ilyen hiba.
a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#12 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:43

Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:18

az aposztrofokat nem "javitani", hanem utananezni kene, hogy mit jelent a visszafele aposztrof! ;) hm.. ahogy nezem nem is ertem, hogy hogy mehet aposztrofok nelkul amit irtal!

a tar-nal jol latod a hibat: a vegere meg egy $i-t kell bigyeszteni!

Köszönöm a segítséget

Most így néz ki:
#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home
for i in 's'; do
tar -cvf $i"_"$dadate.tgz $i
done

unset i
unset dadate


Eredménye egy s_080110.tar fájl a /home könyvtárban, mérete 0, hibaüzenet, melyet kaptam a szkript futtatásakor:
# ./test.sh
080110
tar: s: Cannot stat: Nincs ilyen fájl vagy könyvtár
tar: Error exit delayed from previous errors
#


Az aposztrófokkal nagyjából tisztában vagyok, viszont számomra úgy tűnt, nem a mgefelelő került oda a copy-paste eredményeként. Magyar billentyűzetet használok mindenhol, mert csak :) , azon a <Shift>+<1> eredményeként létrejött "fajtát" tartom megfelelőnek - helytelenül :think:
Adjon az Isten, szebb jövőt!

#13 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:50

Aktuális változatom ez, melyet a /root könyvtárból adok ki:
#!/bin/bash

dadate=$(date +%y%m%d)
echo $dadate
cd /home/
for i in 'ls'; do
tar -cvf /root/$i"_"$dadate.tar $i
done

unset i
unset dadate


A root-ban létrejön egy üres, ls_080110.tar fájl, hibaüzenet:
./test.sh
080110
tar: ls: Cannot stat: Nincs ilyen fájl vagy könyvtár
tar: Error exit delayed from previous errors

Adjon az Isten, szebb jövőt!

#14 Felhasználó inaktív   bogdan 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 18.631
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:50

mondom, hogy utana kene nezni! ;)
http://www.inf.u-sze...dek/oprend.html
jegyzet 68. oldala!

Shift-1 az biza egy MASIK aposztrof a 3(!) kozul.

tehat nem 'ls', hanem `ls`! nagyon mas!

Szerkesztette: bogdan 2008. 01. 10. 15:51 -kor

a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#15 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 15:55

Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:50

mondom, hogy utana kene nezni! ;)
http://www.inf.u-sze...dek/oprend.html
jegyzet 68. oldala!

Shift-1 az biza egy MASIK aposztrof a 3(!) kozul.

tehat nem 'ls', hanem `ls`! nagyon mas!

Jogos!
Innen kimásolva a "nagyon más" aposztrófot, tökéletesen megy! ;)

Ezer köszönet mindenkinek! :respect:
Adjon az Isten, szebb jövőt!

#16 Felhasználó inaktív   bogdan 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 18.631
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 16:00

azert a jegyzetet is elolvasod?
a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#17 Felhasználó inaktív   Mono 

  • Őstag
  • PipaPipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 16.750
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 16:03

Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 16:00

azert a jegyzetet is elolvasod?

Mindenképpen, le is mentettem!
Adjon az Isten, szebb jövőt!

#18 Felhasználó inaktív   szeder 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 3.009
  • Csatlakozott: --

Elküldve: 2008. 01. 10. 16:48

Idézet: bogdan - Dátum: 2008. jan. 10., csütörtök - 15:41

2) en zsh-hoz vagyok szokva, igy foreach-el kezdenem csinalni, nem `ls`-el, ott nem jon elo ilyen hiba.

Megfelelően beállított IFS-ral bash alatt se gond, de az alapbeállítás az, hogy szóközök is szeparálnak.

#19 Felhasználó inaktív   Danika123 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 2.180
  • Csatlakozott: --

Elküldve: 2008. 10. 23. 13:48

Hali, segítene valaki megírni a házimat?

Feladat:
Keressuk meg a filerendszerben (csak a home directory-ban) a file duplikatumokat
(meret, nev es tartalom alapjan ellenorizzuk, hogy valoban duplikatum-e)
es helyettesitsuk oket egy symlinkkel. Hogy melyik maradjon meg es melyik legyen
a symlink azt a felhasznalotol kerdezzuk meg (ld. a bash read parancsat).


ha valaki segítene, nagyon megköszönném neki :) sokat jelentene nekem :)

Szerkesztette: Danika123 2008. 10. 23. 13:49 -kor

<Gigabyte G31-S2L><E5200@3666mhz><2*2gb@889><HD4770><X-fi Xtreme gamer>

#20 Felhasználó inaktív   letix 

  • Senior tag
  • PipaPipaPipaPipa
  • Csoport: Fórumtag
  • Hozzászólások: 2.127
  • Csatlakozott: --

Elküldve: 2008. 10. 31. 09:00

Idézet: Danika123 - Dátum: 2008. okt. 23., csütörtök - 14:48

Hali, segítene valaki megírni a házimat?

Feladat:
Keressuk meg a filerendszerben (csak a home directory-ban) a file duplikatumokat
(meret, nev es tartalom alapjan ellenorizzuk, hogy valoban duplikatum-e)
es helyettesitsuk oket egy symlinkkel. Hogy melyik maradjon meg es melyik legyen
a symlink azt a felhasznalotol kerdezzuk meg (ld. a bash read parancsat).


ha valaki segítene, nagyon megköszönném neki :) sokat jelentene nekem :)

Megírni senki nem fogja helyetted, az biztos.

Szerintem kezdj neki, és konkrét probléma esetén biztos mindenki segítőkész(ebb) lesz.


udv
letix

Téma megosztása:


  • (2 Oldal)
  • +
  • 1
  • 2
  • Nem indíthatsz témát.
  • A téma zárva.

1 felhasználó olvassa ezt a témát.
0 felhasználó, 1 vendég, 0 anonim felhasználó