Üdv!
Az alábbi programkóddal azt akarom elérni, hogy a tömb elemeit irja ki
i="0"
until test $i -eq 4
do
let i=$i+1
echo $ {tomb[$i]}
done
Az echo-nál baj van mert nem értékeli ki ,csak behelyettesíti a számot(1-4 ig ) de a tárolt értéket nem iratja ki!
- 231 megtekintés
Hozzászólások
Szóköz van a dollárjel és a kapcsos zárójel között.
- A hozzászóláshoz be kell jelentkezni
Ha nem hagyok szóközt, akkor se jó!
- A hozzászóláshoz be kell jelentkezni
Mit jelent az, hogy "nem jó"? Ha arra gondolsz, hogy az első elemet nem írja ki, az azért van, mert az inkrementálás előbb van, mint a kiíratás. Vagy cseréld meg, vagy indítsd a ciklusváltozót -1
-ről.
- A hozzászóláshoz be kell jelentkezni
a tomb=( 1 2 3 4 5 6 7 8 9)
Így néz ki a tömb!
Ezt létrehozom parancssorból.
Ezeket az elemeket kellene kiiratni scripttel, de csak a tomb sorszámát írja ki! (nem az 1 2 3 4 5 6 7 8 9 -et)
- A hozzászóláshoz be kell jelentkezni
Bevágtam Konsole-ba:
root@Csabi:~
# tomb=( 1 2 3 4 5 6 7 8 9)
root@Csabi:~
# i="0"
root@Csabi:~
# until test $i -eq 4
> do
> let i=$i+1
> echo ${tomb[$i]}
> done
2
3
4
5
Ha a echo $ {tomb[$i]}
helyett echo ${tomb[$i]}
van, akkor működik ez.
- A hozzászóláshoz be kell jelentkezni
Scriptből nem fut!
- A hozzászóláshoz be kell jelentkezni
#!/bin/bash
tomb=( 1 2 3 4 5 6 7 8 9)
i="0"
until test $i -eq 4
do
let i=$i+1
echo ${tomb[$i]}
done
root@Csabi:/tmp
# chmod +x izeszkript
root@Csabi:/tmp
# ./izeszkript
2
3
4
5
Fut az.
- A hozzászóláshoz be kell jelentkezni
mi volna ha a tömbben a b c d lenne és azzal fogalmaznád meg h mit is akarsz?
Gábriel Ákos
- A hozzászóláshoz be kell jelentkezni
Mi az okod a do until loopra?
for i in seq 4; do echo "${tomb[${i}]}"; done
Vagy ha nem bánod, hogy nem sh, hanem bash
for ((i=0; i < 4; i++)); do echo "${tomb[$i]}"; done
- A hozzászóláshoz be kell jelentkezni
Ha parancssorból hozod létre a változót, majd egy scripttel akarod feldolgozni, akkor azért észre kellene venni, hogy a script már egy másik shellben hajtódik végre. Márpedig ha nem exportálod a változót, akkor abban az alshellben nem is lesz ilyen változó, ezért ad rossz eredményt a kódod. (Amúgy valóban a szóköz nélküli ${tombvaltozo[$i]} formával hivatkozz a kívánt elemre!) Tekintettel arra, hogy a tömbváltozó exportja az messze van a hordozható kódtól, én azt tudnám javasolni, hogy ne is próbálkozz ilyesmivel, helyette:
a) magában a scriptben hozd létre a tömbváltozót
tomb=( 1 2 3 4 5 )
ekkor persze konstansul ezeket az értékeket tudod csak baszkurálni
b) a scriptedet ne a megszokott módon (pl: ./scriptem) formában, hanem a . nevű parancs segítségével futtasd:
. ./scriptem
formában (ekkor ugyanabban a shellben fut, tehát eléri az eredeti shellben létrehozott lokális változókat)
c) a scriptnek paraméterként add át azokat az értékeket amiket majd a tömbbe akarsz rakniés a tömbváltozó feltöltését a paraméterekből intézd, valahogy így :
tomb=( "$@" )
így simán lehet újabb és újabb paraméterekkel hívva tesztelni a scriptedet, hogy jól csináltad.
- A hozzászóláshoz be kell jelentkezni