Kezdőlap › Fórumok › Programozás › Bash script
- This topic has 437 hozzászólás, 56 résztvevő, and was last updated 13 years, 11 months telt el by Goosfrabaa. 
- 
		SzerzőBejegyzés
- 
		
			
				
2006-10-24-17:56 #2053299Közben találtam egy megoldást, ami egyelőre működik: Code:function beolvas () #a konkrét beolvasó algoritmus
 {
 for ((i=1;i<=xxx;i++))
 do
 read
 sor[$i]="$REPLY"
 done
 }
 # File parameter mode
 if [ $# == 1 ]
 then
 cat "$1" | beolvas
 fi
 # Filter mode
 if [ $# == 0 ]
 then
 beolvas
 fi2006-10-24-19:23 #2053300retaliator44 wrote:Közben találtam egy megoldást, ami egyelőre működik:Code:function beolvas () #a konkrét beolvasó algoritmus
 {
 for ((i=1;i<=xxx;i++))
 do
 read
 sor[$i]="$REPLY"
 done
 }
 # File parameter mode
 if [ $# == 1 ]
 then
 cat "$1" | beolvas
 fi
 # Filter mode
 if [ $# == 0 ]
 then
 beolvas
 fiAham, hasonló elven működik, mint az enyém, csak ez nem egy temp fileba, hanem egy tömbbe teszi bele az adatokat. Hogy mikor melyiket kényelmesebb kezelni, azt nyilván az adott feladat dönti el. 
 A for ciklus elég „ronda” :), akkor már használható lenne a „true” ciklusfeltételként.Illetve, akkor mondok én is mégegyet 🙂 
 Ha csak egy paraméter van (pontosabban vagy kap egy filet paraméterként vagy nem), akkor működik ez is:
 cat „$@” | ….
 Ilyenkor vagy a param.ként kapott file tartalmát küldi tovább a pipeon vagy pedig azt ami az stdin-re jön.
 De ha több paramétert kell kezelni, akkor ez már nem jó!!2006-10-24-19:35 #2053301cat „$@” | …. Ez tetszik 🙂 2006-10-26-11:14 #2053302Sziasztok! 
 Így tanulás közben csináltam egy kis szkriptet ami 3 dolgot tud megjeleníteni nekem a kéernyőre:
 1.) A mai napi sikeres SSH bejelentkezesek log-jai egy usernek.
 2.) A mai napi sikeres SSH bejelentkezesek log-jai osszesen.
 3.) A mai napi sikertelen SSH bejelentkezesek log-jai.
 http://users.atw.hu/freeutil/ssh_info.sh
 Itt az egész.
 A gondom az, hogy néha csak az oda tartozó log sorok darabszámát írja ki, de a logokat nem.
 Második vagy 3. próbálkozásra működik, de azért legtöbbször elsőre.Van tippetek miért? 2006-10-26-17:53 #2053303Nekem lenne egy nagyon banális problémám… Code:(Hibakezelés az elején)function beolvas() #két soros file 
 {
 for ((i=1;i<=2;i++))
 do
 read
 sor[$i]="$REPLY"
 echo "${sor[i]}"
 done
 }# File parameter mode 
 if [ $# == 1 ]
 then
 cat "$1" | beolvas
 echo 1 param
 fi
 # Filter mode
 if [ $# == 0 ]
 then
 beolvas
 echo 0 param
 fi
 echo "Na megvan-e még: ${sor[1]}"
 exit 0File paraméter esetén nem találja már, szűrő módban igen. Miért és hogy lehetne kijavítani? 2006-10-26-18:31 #2053304retaliator44 wrote:Nekem lenne egy nagyon banális problémám…Code:(Hibakezelés az elején)function beolvas() #két soros file 
 {
 for ((i=1;i<=2;i++))
 do
 read
 sor[$i]="$REPLY"
 echo "${sor[i]}"
 done
 }# File parameter mode 
 if [ $# == 1 ]
 then
 cat "$1" | beolvas
 echo 1 param
 fi
 # Filter mode
 if [ $# == 0 ]
 then
 beolvas
 echo 0 param
 fi
 echo "Na megvan-e még: ${sor[1]}"
 exit 0File paraméter esetén nem találja már, szűrő módban igen. Miért és hogy lehetne kijavítani? Nálam működik 🙂 
 A gond azzal lehet, hogy az elején nem adtad meg a futtató shellt
 #!/bin/bash
 Ezt az első sorba.
 Megj.: nálam ment enélkül is, de ez lehet rendszerbeállítás függő.
 A gond abból eredhet, hogy a $# == 0 összehasonlítást csak a bash tudja, régebbi shellek, mint például az sh, még csak a $# -eq 0 formát fogadják el.Remélem ez megoldja a problémát 2006-10-26-18:38 #2053305De megadtam, csak az elejét lenyírtam most a scriptnek hogy ne legyen túl hosszú a beillesztett kód… Nnnya. Szóval a file: Kétsoros 
 File
 Na jó legyen még egyÉs komplette amit az előbb ideírtam azt betettem egy scriptbe, elején a bash definícióval. 
 Erre a kimenet:Code:shadowlord@armageddon:~$ cat file|./a
 Kétsoros
 File
 0 param
 Na megvan-e még: Kétsoros
 shadowlord@armageddon:~$ ./a file
 Kétsoros
 File
 1 param
 Na megvan-e még:
 shadowlord@armageddon:~$2006-10-26-20:25 #2053306Jaaa, félreértettelek először. 
 A probléma a | miatt van, ugyanis, a pipe két oldalán lévő „vmi” egyszerre indul el, azaz két külön shell-ben, így amikor függvény létrehozza a sor változót, az frankón műxik, de ugye minden változó lokális arra a shellre, ahol inicializálták.
 (Próbáld ki, hogy a másik elágazásnál cat | beolvas -t írsz, és lám ott se fog menni 🙂 )
 Elvileg a változó exportálásával ezt meg lehetne oldani, a baj az, azzal együtt sem megy.Utánaolvastam egy kicsit, és 3.0-ás bash-ban még nem lehetett megcsinálni a tömb exportálást… Hát.. izé… 
 Jobb ötletem nincs, mint az, amit már ajánlottam:Code:if [ $# -eq 0 ]
 then FNEV=”/tmp/$USER.$$”
 cat > „$FNEV”
 else FNEV=”$1″
 fi
 ….
 rm „/tmp/$USER.$$” 2>/dev/null2006-10-26-20:30 #2053307budacsik wrote:Sziasztok!
 Így tanulás közben csináltam egy kis szkriptet ami 3 dolgot tud megjeleníteni nekem a kéernyőre:
 1.) A mai napi sikeres SSH bejelentkezesek log-jai egy usernek.
 2.) A mai napi sikeres SSH bejelentkezesek log-jai osszesen.
 3.) A mai napi sikertelen SSH bejelentkezesek log-jai.
 http://users.atw.hu/freeutil/ssh_info.sh
 Itt az egész.
 A gondom az, hogy néha csak az oda tartozó log sorok darabszámát írja ki, de a logokat nem.
 Második vagy 3. próbálkozásra működik, de azért legtöbbször elsőre.Van tippetek miért? Érdekes. 
 Nem lehet h vmi zárolás van a dologban?
 Ha jól sejtem, amikor vmelyik alkalmazás épp írna abba a log fileba, akkor azt lock-olja a többiek elől. (Mondjuk ettől még olvasni éppen lehetne, de lehet h konzisztencia okokból az sem megengedett). Ezért lehet az, hogy néha nem működik rendesen.
 Már csak az a kérdés, hogy ha nem lehet olvasni sem, akkor a sorok darabszámát hogy írja ki??2006-10-27-13:41 #2053308MyCroft wrote:Jobb ötletem nincs, mint az, amit már ajánlottam:Nekem azért lenne egy :rolleyes:: 
 Ki kell cserélni ezt itt: cat „$1″|beolvas
 Erre: beolvas<"$1"
 És így működik. :cool1: Csak nem értem, miért nem ugyanazt csinálják, logikusan ekvivalensnek kéne lenniük…
- 
		SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.

legutóbbi hsz