HWSW Informatikai Kerekasztal: bash script kérdé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 script kérdés

#21 Felhasználó inaktív   szeder 

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

Elküldve: 2008. 09. 25. 18:40

Jajj, segítsetek (;

#!/bin/bash
t[0]=0
echo "t a loop előtt: '${t[@]}'"
( echo 1; echo 2; ) |while read i; do
        t[$i]=$i
        echo "t a loopban: '${t[@]}'"
done
echo "t a loop után: '${t[@]}'"

Azt írja ki, hogy:
t a loop előtt: '0'
t a loopban: '0 1'
t a loopban: '0 1 2'
t a loop után: '0'

Miért, ó, mondd miért nincs benne az 1 és a 2 a tömbben a loop után?  Mit tegyek, hogy benne legyenek?

szerk.:  Na, ha nem ilyen while-read-es a ciklus, hanem egyszerű for (for i in 1 2 ;do), akkor benne van a végén az 1 és a 2 a t-ben.  Viszont mindenféle peremfeltétel miatt szükség van a while-read-re...  Ötlet?

szerk. v2: Ez működik:
#!/bin/bash
t[0]=0
echo "t a loop előtt: '${t[@]}'"
{ echo 1; echo 2; } >asdf
while read i; do
        t[$i]=$i
        echo "t a loopban: '${t[@]}'"
done <asdf
echo "t a loop után: '${t[@]}'"

De hogy miért, illetve hogy a másik miért nem... :omg:

Szerkesztette: szeder 2008. 09. 25. 19:35 -kor


#22 Felhasználó inaktív   Fred10 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 1
  • Csatlakozott: --

Elküldve: 2008. 12. 03. 00:16

Sziasztok! Tudnátok segíteni?

Szeretnék megcsinálni egy olyan bash scriptet ami folyamatosan vizsgálja a gépet és ha netán használat közben valaki bejelentkezne akkor rögtön kiírná hogy kik vannak a gépen bejelentkezve.

azt tudom hogy a "w" parancs kéne. De azt nem tudom hogy oldjam meg hogy folyton vizsgálj a gépet és hogy hogyan döntessem el a scripttel hogy belépett-e valaki.

#23 Felhasználó inaktív   bogdan 

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

Elküldve: 2008. 12. 03. 01:08

a w kimenetet elmented egy file-ba, es azt vizsgalod, hogy ahhoz kepest valtozik-e... nagyjabol en igy kezdenek neki.
a forum ma:
"Ez van bazdmeg, ha nem tetszik, el lehet menni."

#24 Felhasználó inaktív   kroozo 

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

Elküldve: 2008. 12. 03. 13:16

Utana meg mindezt (diffestol) beirod a crontabba, aztan az majd kuldi a levelet :D
And as we wind on down the road
Our shadows taller than our soul.


“It is often said that before you die your life passes before your eyes. It is in fact true. It's called living.”

#25 Felhasználó inaktív   Superion 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 38
  • Csatlakozott: --

Elküldve: 2009. 02. 27. 19:11

Bashben hogyan lehet hexadecimálisan szerkeszteni egy fájlt? Van nekem egy fájlom amin belül néhány konkrét bájtot szeretnék rábírni arra, hogy egy bizonyos érték helyett mást vegyen fel (a fájltípus olyan, hogy működni fog, tehát nem csak vaktában lövöldözök a kérdéssel), de hexdump-pal egyelőre nem tudtam sokra menni.
Valami ötlet?

#26 Felhasználó inaktív   Dr. Szöszi 

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

Elküldve: 2009. 02. 27. 19:26

Idézet: Superion - Dátum: 2009. febr. 27., péntek - 19:11

Bashben hogyan lehet hexadecimálisan szerkeszteni egy fájlt? Van nekem egy fájlom amin belül néhány konkrét bájtot szeretnék rábírni arra, hogy egy bizonyos érték helyett mást vegyen fel (a fájltípus olyan, hogy működni fog, tehát nem csak vaktában lövöldözök a kérdéssel), de hexdump-pal egyelőre nem tudtam sokra menni.
Valami ötlet?

Ha megvan a file, amiben ki akarsz cserélni néhány byte-ot, akkor cseréld ki a néhány byte-ot. Nem kell misztifikálni a hexadecimikát.
És igen, mivel a fórum nem hoz pénzt, így nem csoportosítunk át kellő erőforrást ahhoz, hogy az itt felmerült igényeket, bugokat miazmást megfelelően kezelni tudjuk.

#27 Felhasználó inaktív   Superion 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 38
  • Csatlakozott: --

Elküldve: 2009. 02. 27. 19:41

A probléma ezzel csak annyi, hogy az adott bájtokat nem csak egyféleképpen kéne kicserélnem, hanem kéne 255 darab fájl, amikben a bájtok 1-től 255-ig veszik fel az értékeket. Ez, tekintve hogy van egy alap fájlom amiből kiindulok, 254 módosítás, összesen 64 helyen, vagyis 16 256 bájtot kéne átírnom.
Ha egyszerű lenne, nem kérdeztem volna semmit ;)

#28 Felhasználó inaktív   Superion 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 38
  • Csatlakozott: --

Elküldve: 2009. 02. 28. 00:35

Kicsit utánanéztem a dolognak, és arra jutottam, hogy akár az is elég lenne ha tudnám, hogyan lehet egy scriptben a vi-t és annak beépített parancsait használni, lévén akkor meg tudnám nyitni a kérdéses fájl(oka)t, :%!xxd paranccsal át tudok váltani hexeditor módba, s&r, :wq (vagy ha kell, előtte visszaváltok rendes szerkesztőbe). Egy dolgot találtam ami elindíthatott volna, de csak hibaüzenetet kaptam a vi-tól, idézem az egész postot amiben volt
Although it's not commonly done, you can call vi within a script using the unix "here" document:

#!/bin/ksh

text="test"
vi myfile << MSG
o$(printf "%s" "$text") $(echo '\033'):wq
MSG
# end script

All the keystrokes after vi'ing the file go within the here document - open the line below line 1, enter the string with printf, press the escape key, write and quit. I don't care for it myself.

A ksh mappát alapból nem is találta meg, de végtére is nem meglepő. A többire hibaüziket adott ki.

#29 Felhasználó inaktív   szeder 

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

Elküldve: 2009. 02. 28. 11:08

Adott offsetnél lévő byte-ot ilyesmivel ki tudod cserélni:

dd if="$inputfile" of="$outputfile" bs=1 skip=0 seek=0 count=$(($offset-1))
echo "$newbyte">>"$outputfile"
dd if="$inputfile" of="$outputfile" bs=1 skip=$offset seek=$offset

Hogy hogyan teszel be egy tetszőleges byte-ot a newbyte változóba, illetve hogyan szervezed az egészet ciklusba (offset-et és newbyte-ot tömbből olvasni, count az aktuális és a következő offset különbsége, stb.), azt rád bízom (;

#30 Felhasználó inaktív   Superion 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 38
  • Csatlakozott: --

Elküldve: 2009. 02. 28. 11:30

Igazából közben egy másik fórumon rávezettek a megoldásra:
cat oldfile | tr "\111\104\063" "\055\055\055"  > newfile

Ahol a számok 8as számrendszerben jelentik az adott cserélendő bájtokat (sorrendben 0x49 0x44 0x33 helyére 0x2d 0x2d 0x2d). Így secc-perc alatt megvolt a dolog.

#31 Felhasználó inaktív   szeder 

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

Elküldve: 2009. 02. 28. 16:14

Ahm.  A korábbi leírásod alapján úgy értettem, hogy adott helyen lévő byte értékét kell megváltoztatni, nem pedig az összes adott értékű byte értékét megváltoztatni.
Egyébként cat felesleges, tr 'mit' 'mire' <oldfile >newfile

#32 Felhasználó inaktív   Superion 

  • Újonc
  • Pipa
  • Csoport: Alkalmi fórumtag
  • Hozzászólások: 38
  • Csatlakozott: --

Elküldve: 2009. 02. 28. 23:14

Valóban úgy is volt, hogy konkrét helyeken lévő bájtokat kellett átírni, de mivel az adott fájltípust tudom külső progival szerkeszteni, végsősoron egyszerű(bb) volt az összes ilyen bájtnak adni egy máshol elő nem forduló értéket, és azokat kicserélni.
A cat valóban felesleges, én meg csak kopiztam :p

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ó