Bash script

Kezdőlap Fórumok Programozás Bash script

10 bejegyzés megtekintése - 191-200 / 438
  • Szerző
    Bejegyzés
  • #2053369
    retaliator44
    Felhasználó

      Nagyjából megy mind a kettő, apróbb igazításokkal (a konkrét feladathoz).
      Köszönöm szépen.

      #2053370
      uzsolt
      Felhasználó

        Sőt, akár két egymásbaágyazott ciklust is csinálhatsz, úgy még elegánsabb 😉

        #2053371
        retaliator44
        Felhasználó

          A következő a problémám:
          csinálok egy tempdirt:
          TEMP=`mktemp -d /tmp/$USER.XXXXXXXX` (Azért így, mert most ez a szabványos)
          Aztán később van egy rész ahol egy ” 1 1 1 2 2 2 1 2 1 0 1 1 2 1 ” stílusú stringben seddel kicserélném a számokat a tempdirben szereplő filenevekre. Mondjuk az összes 1-est $TEMP/a.txt-re, az összes 2-est $TEMP/b.txt-re stb. Csak az a gond, hogy a bash behelyettesíti a $TEMPet, amiben néha előfordul 1-es meg 2-es, és mivel globálisan cserélek, ezért a sed a tempdir nevében levőket is lecseréli amit nem kéne… Ha /tmp/akarmi a tempdir, akkor megy, de most ez nem ajánlott.
          Tudnátok segíteni?

          Szerk.: seddel hogy lehet „/” karakterre cserélni? Még a „/” sem tetszik neki.

          #2053372
          uzsolt
          Felhasználó

            mktemp-es csere: muti, hogy csinálod, nem teljesen világos.

            / karakter cseréje: „s@/@csere@g”

            #2053373
            retaliator44
            Felhasználó

              És akkor @ karaktert hogy cserélek? Honnan tudja a sed, mi az elválasztó karakter?
              mktemp:
              $TEMP az valami ilyesmi: /tmp/username.1235625
              cucc=`echo „${t[*]}”|sed „s@1@$TEMP/file1@g”|sed „s@2@$TEMP/file2@g”|sed „s@0@$TEMP/file3@g”`

              Az a pötty egy [ meg egy * meg egy ] akar lenni csak valami másnak képzeli az smf…

              #2053374
              tothaa
              Felhasználó

                És hogy listázod a pl. 2006 december 9-én létrehozott fájlokat elegánsan?
                (monny’uk ez is megy: ls -l | grep 2006-12-09  –> de ha a fájlnév is ezt tartalmazza…)

                #2053375
                uzsolt
                Felhasználó

                  retaliator44 : az első karakter a parancs után (esetünkben az s után). Lehet pont, vessző, stb.

                  tothaa: használd ki, hogy az egyik (meghatározott) oszlop tartalmazza a dátumot (nem linuxon vagyok, így nem tudom megmondani, melyik). Utána ha más nem akkor egy reguláris kifejezéssel mehet.

                  #2053376
                  retaliator44
                  Felhasználó

                    „retaliator44 : az első karakter a parancs után (esetünkben az s után). Lehet pont, vessző, stb.”
                    Úristen. Ennyire egyszerű és nem jut eszembe… köszönöm.

                    #2053377
                    uzsolt
                    Felhasználó

                      Nem biztos, hogy minden karakter lehet, de a man biztos megmondja.

                      #2053378
                      supervazi
                      Felhasználó

                        Sziasztok!

                        Lehet hogy nem pont ebbe a topikba kellene írnom, de tulajdonképen a problémám ez:
                        bach script – változó a változóban

                        Szóval:

                        Van egy mysql adatbázis, benne egy tábla, egy „query” mezővel ami query-ket tartalmaz 😛 . Valami ehhez hasonlókat:

                        select count(*) from products where provider=$provider and avail=’0′;

                        Egy bash script kiolvassa a tartalmát és futtatnia kellene, a megfelelő változó átadásával. Valahogy így:

                        Code:
                        query=`echo „select query from querys where code=’1′;'” | mysql -N stats`
                        echo $query

                        Eddig minden ok, kiírja a megfelelő query-t így:

                        select count(*) from products where provider=$provider and avail=’0′;

                        Aztán:

                        Code:
                        for provider in ${providers[@]}; do
                            val=`echo -e $query | mysql -N stats`
                            echo „$provider, $val”
                        done

                        Most futtatni kellene a kapott query-t átadva neki a „provider” változót.
                        Sajnos ez nem történik meg, a query-t az eredeti formájában futtatja (vagyis „provider=$provider”-el ), anélkül, hogy behelyetesítené a változó értékét.

                        Hogy tudnám erre rávenni?

                        Előre is kösz.

                        vazi

                      10 bejegyzés megtekintése - 191-200 / 438
                      • Be kell jelentkezni a hozzászóláshoz.