MyCroft

Hozzászólások

10 bejegyzés megtekintése - 11-20 / 59
  • Szerző
    Bejegyzés
  • Hozzászólás: Bash script #2053321
    MyCroft
    Felhasználó
      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.”

      Hozzászólás: Bash script #2053318
      MyCroft
      Felhasználó
        retaliator44 wrote:
        Bash Reference Manual wrote:
        An array is created automatically if any variable is assigned to using the syntax
        name[subscript]=value

        The 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

        Hozzászólás: Bash script #2053307
        MyCroft
        Felhasználó
          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??

          Hozzászólás: Bash script #2053306
          MyCroft
          Felhasználó

            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/null
            Hozzászólás: Bash script #2053304
            MyCroft
            Felhasználó
              retaliator44 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 0

              File 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

              Hozzászólás: Reguláris kifejezések #2075662
              MyCroft
              Felhasználó

                Bash 3-tól kezdve igy meg lehet csinálni amit szeretnél:

                Code:
                if [[ ! $VALTOZO =~ reg.exp ]]
                then …
                else …
                fi
                Hozzászólás: Bash script #2053300
                MyCroft
                Felhasználó
                  retaliator44 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
                  fi

                  Aham, 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ó!!

                  Hozzászólás: Bash script #2053298
                  MyCroft
                  Felhasználó
                    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 :S

                    Hozzászólás: Bash script #2053297
                    MyCroft
                    Felhasználó
                      retaliator44 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.

                      Hozzászólás: Bash script #2053294
                      MyCroft
                      Felhasználó

                        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.

                      10 bejegyzés megtekintése - 11-20 / 59