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, 6 months telt el by
Goosfrabaa.
-
SzerzőBejegyzés
-
2006-10-24-17:56 #2053299
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
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