Kezdőlap › Fórumok › SOS! Bajban vagyok › bash script változó for ciklusban, nem müködik helyesen
- This topic has 9 hozzászólás, 5 résztvevő, and was last updated 19 years telt el by
lada2105.
-
SzerzőBejegyzés
-
2006-06-22-14:08 #2064176
Szempontodbol megoldas:
cp -R forras$i cel$i(Egyebkent biztos vagy benne, hogy hdd-t akarsz masolni, es nem particiot?)
2006-06-22-14:14 #2064177Goosfrabaa 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.
2006-06-22-14:57 #2064178Sokat 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/hdcforras1=/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.2006-06-22-16:44 #2064179Kö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 cel3Nekem 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 vegeredmenyerolnah, 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) 🙂2006-06-22-17:27 #2064180Hi
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:$celdone
2006-06-22-17:54 #2064181szerintem menni fog
pl:
export korte=béka
export alma=korte
echo ${!alma}ha jól értem ez hiányzott
tmp=”forras$i”
echo ${!tmp}2006-06-22-18:48 #2064182ds 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! 🙂2006-06-23-17:32 #2064183lada2105 wrote:Egyébként megkérdezhetem hol leltél rá a megoldásra?persze,
man bash2006-06-23-20:13 #2064184Már én is megtaláltam. 🙂
Azé’ köszi!
Csak a lustaság… tudod 🙂2009-12-04-19:58 #1883626Sziasztok!
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/hdcforras1=/mnt/hdd
forras2=/mnt/hde
forras3=/mnt/hdffor 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...) doneA 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$iakkor ezt adja vissza, hogy $cel1, csak nem az értékét…
Szóval van valakinek ötlete?
Elöre is köszönet érte! -
SzerzőBejegyzés
- Be kell jelentkezni a hozzászóláshoz.
legutóbbi hsz