bash script változó for ciklusban, nem müködik helyesen

Kezdőlap Fórumok SOS! Bajban vagyok bash script változó for ciklusban, nem müködik helyesen

10 bejegyzés megtekintése - 1-10 / 10
  • Szerző
    Bejegyzés
  • #2064176
    Goosfrabaa
    Felhasználó

      Szempontodbol megoldas:
      cp -R forras$i cel$i

      (Egyebkent biztos vagy benne, hogy hdd-t akarsz masolni, es nem particiot?)

      #2064177
      lada2105
      Felhasználó
        Goosfrabaa wrote:
        Szempontodbol megoldas:
        cp -R forras$i cel$i

        (Egyebkent biztos vagy benne, hogy hdd-t akarsz masolni, es nem particiot?)

        Szerintem ez nekem nem jó! 🙂
        hol kapom vissza a forras$i-re a /mnt/hdd értéket?

        Egyébként meg köszi, particiót szeretnék másolni (sajna ez a nevük, és nincs szám a végén 🙁 ). Csak most épp ebbe a scriptrészletbe így irtam be az adatokat.

        #2064178
        Goosfrabaa
        Felhasználó

          Sokat segitene, ha pontosan tudnam mit is akarsz.
          A szkript reszletbol ugy ertettem, hogy egy  particiot akarsz masikra masolni.
          A szkripted (az elnevezesi hibat leszamitva, de azt az elobb megirtad) jo volt,
          csak a valtozast irtam le neked; vagyis a do es done kozti reszt.

          Amugy azt javaslom, hogy ilyesmiket mindig ugy tesztelj, hogy egyszeru
          echo parancssal helyettesitsd a konret cp-t:
          [hr][/hr]
          cel1=/mnt/hda
          cel2=/mnt/hdb
          cel3=/mnt/hdc

          forras1=/mnt/hdd
          forras2=/mnt/hde
          forras3=/mnt/hdf
          for i in `seq 1 3`
          do
              echo forras$i cel$i
          done
          [hr][/hr]
          Szerintem ez azt csinalja amit szerettel volna (bar nem vagyok gondolatolvaso)  🙂
          Szoval csak le kell cserelned az echo-t cp -R-re.

          Es ha meg tehetek javaslatot:
          Nincs szukseg a seq parancsra sem. Helyette nyugodtan hasznald a
          for i in 1 2 3 alakot.

          #2064179
          lada2105
          Felhasználó

            Köszi! De még mindig nem az igazi! 🙂

            A seq parancsra azér van szükségem, mert 1-8-ig tartana a sor és lusta vagyok kiírni 🙂

            Egyébként meg nem is másolgattam volna cp-vel órák hosszat nagy fájlokat, ezért szoktam én is echo-t írni az ilyen helyekre 🙂
            Föleg mivel cp helyett ráadásul scp-t kell használnom 🙂

            Ha kipróbálod, akkor az alábbi általad is már módosított script ezt a kimenetet adja:
            forras1 cel1
            forras2 cel2
            forras3 cel3

            Nekem nem ez kellene, hanem ez:
            /mnt/hdd /mnt/hda
            /mnt/hde /mnt/hdb
            /mnt/hdf /mnt/hdc
            remélem így érthetöbb.

            A teljesség és a hiányótlás miatt akkor leírom céljaimat.
            Szóval van egy ehhez igen sokban hasonló script.
            A cél egy másik gép másik particiója.
            A forrás a locális gép particiója.
            Mindezen particiókból 8 darab van. 8 itt és 8 ott.
            Azt szeretném (bár biztos elég bárgyú megoldás, de itt ez szükséges), hogy tömörítés nélkül csak a könyvárak alatt lévö fájlokat átmásolná a script mondjuk minden vasárnap, vagy amikor a gép ráér.

            Szóval valahogy így nézne ki valójában:

            Code:
            forras1=/mnt/hdd
            forras2=/mnt/hde
            forras3=/mnt/hdf

            celszerver=”valaholmeszze:”
            cel1=/mnt/hda
            cel2=/mnt/hdb
            cel3=/mnt/hdc

            for i in `seq 1 8`
            do
              #log elkeszites az elinditasrol
              scp -r $forras$i $celszerver:$cel$1
               #itt jon egy kis hibaellenorzes, plusz a log a befejezesrol stb
            done
            #email kuldes az esteleges hibakrol, illetve a folyamat vegeredmenyerol

            nah, es ennek a scriptek a cegeredmenye az, hogy
            file not found és hasonlók 🙂
            de ha echo-ra cserélem a megfelelö részt, tehát
            echo $forras$i $celszerver:$cel$1
            akkor az a végeredmény, hogy
            1 valaholmessze:1
            2 valaholmessze:2
            3 valaholmessze:3
            ….

            Ha erre módosítom:
            echo forras$i $celszerver:cel$1
            akkor ez lesz a végeredmény:
            forras1 valaholmessze:cel1
            forras2 valaholmessze:cel2
            forras3 valaholmessze:cel3
            …..

            ahelyett, hogy ez lenne
            /mnt/hdd valaholmessze:/mnt/hda
            ….

            Remélem így már nincs sötét terület ezen probléma kapcsán, csak a megoldás mikéntje 🙂
            (ami persze nekem is – a változók miatt -, ami miatt végülis felraktam itt a kérdést) 🙂

            #2064180
            milfer
            Felhasználó

              Hi
              Ha jól értem te a változó nevét akarod megváltoztatni, ami szerintem nem fog sikerülni.

              Nem tudom a forrás és a cél partíciók midíg „párban” vannak ? Mert ha igen akkor én így csinálnám:

              celszerver=”valaholmessze:”

                for i in ‘seq 1 8’
                 do
                  case $i in
                  1) forras=/dev/hdd
                     cel=/dev/hda ;;
                  2) forras=/dev/hde
                    cel=/dev/hdb ;;
                  3)  ……
                   esac
              scp -r $forras $celszerver:$cel

              done

              #2064181
              ds
              Felhasználó

                szerintem menni fog
                pl:
                export korte=béka
                export alma=korte
                echo ${!alma}

                ha jól értem ez hiányzott
                tmp=”forras$i”
                echo ${!tmp}

                #2064182
                lada2105
                Felhasználó
                  ds wrote:
                  szerintem menni fog
                  pl:
                  export korte=béka
                  export alma=korte
                  echo ${!alma}

                  ha jól értem ez hiányzott
                  tmp=”forras$i”
                  echo ${!tmp}

                  Szuppppper!
                  Köszi!
                  :happy:

                  elég volt végülis ez a része, ahogy írtad:
                  tmp=”forras$i”
                  echo ${!tmp}

                  Ezer hála és köszönet!

                  Egyébként megkérdezhetem hol leltél rá a megoldásra?

                  Kedves milfer!
                  Végülis a case-el sem lenne rossz megoldás, csak azért választottam inkább ezt, mert ki tudja mikor kell a scriptet kicsit más környezetbe átültetni, és akkor talán nem kell az egész scriptet, csak a változókat átírni.
                  Azért köszi neked is!

                  Látom van még mit tanulnom…  :blush:
                  Köszönöm mégegyszer a segítséget!
                  További jó linuxolást és kellemesen hüs(ítö) napokat mindenkinek! 🙂

                  #2064183
                  ds
                  Felhasználó
                    lada2105 wrote:
                    Egyébként megkérdezhetem hol leltél rá a megoldásra?

                    persze,
                    man bash

                    #2064184
                    lada2105
                    Felhasználó

                      Már én is megtaláltam. 🙂
                      Azé’ köszi!
                      Csak a lustaság… tudod 🙂

                      #1883626
                      csaba
                      Felhasználó

                        Sziasztok!

                        Volna egy kis problémám, amit (viszonylag) sürgösen meg kellene oldanom, amire nem bírok rájönni és sajna a megoldást em találom sehol.  🙁

                        Az alábbi scripttel lenne bajom:
                        (persze ez csak egy részlet egy hosszú scriptböl, leegyszerüsítve)

                        Code:
                        cel1=/mnt/hda
                        cel2=/mnt/hdb
                        cel3=/mnt/hdc

                        forras1=/mnt/hdd
                        forras2=/mnt/hde
                        forras3=/mnt/hdf

                        for i in `seq 1 3`
                        do
                        cp -R $forras$i $cel$i    #<- ez az ami nem megy (jó, gondolom, nem így kell, de próbáltam már sokféle képpen...) done

                        A lényeg, hogy hogyan lehetne rávenni a bash-t, hogy a $forras1 valtozo erteket adja vissza, mert ha cp-s sort átírom így:

                        Code:
                        cp -R ‘$’forras$i ‘$’cel$i

                        akkor ezt adja vissza, hogy $cel1, csak nem az értékét…

                        Szóval van valakinek ötlete?
                        Elöre is köszönet érte!

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