Hozzászólások
-
SzerzőBejegyzés
-
uzsolt wrote:Szóval akkor van 3.2-es 🙂
A hiba szerintem ebből a tömbindexelésből származik, ui. ha a tömbindexeket számokkal kezeled, akkor kiírja azt, amit ki kell írnia.
Egyébként fontos, hogy betűkkel legyen indexelve?Én sem tudtam róla, hogy őszinte legyek, de a wikipedián találtam egy ilyet:
„Note: The latest version of bash, 3.2, doesn’t support associative arrays properly yet.”retaliator44 wrote:Bash Reference Manual wrote:An array is created automatically if any variable is assigned to using the syntax
name[subscript]=valueThe subscript is treated as an arithmetic expression that must evaluate to a number greater than or equal to zero
Vagy mégse?Hát ebből az idézetből, valóbna a „mégse” verzió következik. A 3.2-esről olvastam, hogy az még nem támogatja
budacsik 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??Jaaa, 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/nullretaliator44 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
Bash 3-tól kezdve igy meg lehet csinálni amit szeretnél:
Code:if [[ ! $VALTOZO =~ reg.exp ]]
then …
else …
firetaliator44 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ó!!retaliator44 wrote:Igen, progkör… egyébként pont ez a baj hogy a dátumnál mi van. Mert eddig ahány rendszer annyiféle dátum. Van ahol 2006-10-24 van ahol Oct 24 2006 és így tovább. Pláne ha az időt is neadjisten 10:00PM-nek írja akkor aztán káosz.Igen, a pandorán 2006-10-24 a forma, sztem azt vedd viszonyítási alapnak.
Más kérdés, hogy ha ez beadandóban lenne, akkor gáz van, mert a fi-n már más formátum van :Sretaliator44 wrote:(Tök más) Tudom hülye kérdés, de hogy kell szűrőt csinálni? Olyat ami fileból olvas vagy ha nem kap filet akkor standard inputról?Erre találsz egy általánosan alkalmazható példát itt:
http://people.inf.elte.hu/spala/unix_gyak/peldak/pelda1ISO
(esetleg http://people.inf.elte.hu/spala/unix_gyak/peldak/pelda1UTF – karakterkódolás csak a különbség)
Lehet máshogy is, ez egy lehetőség.Amennyiben ELTE Progmat/Proginfo és progkör tárgy, akkor valóban nem szeretjük zh-ban az AWK-t, illetve van egy szabály, hogy max mennyi pontot lehet awk-s megoldással szerezni.
Amúgy természetesen azzal a sed-del is meg lehet csinálni, csak a 2. csoportot jobban kell definiálni. Mivel dátumról van szó, ez nem jelenthet gondod. -
SzerzőBejegyzés
legutóbbi hsz