• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

brauche hilfe bei bash code [arrays]

pipebomb

Gelegenheitsspieler/in
Mitglied seit
10.06.2001
Beiträge
456
Reaktionspunkte
0
hi,

ich brauche für die studienarbeit in nem code n array. weiß aber nicht wie ich das machen soll. ich hab zwar schon in büchern und im internet gesucht aber hab leider keine lösung gefunden. der code lautet
INSDIR=~/work/programme/insfla/trunk/bin2
#INSDIR=~/work/programme/insfla_fast
MECHDIR=~/work/mechanismen/CH3OH

cp $MECHDIR/Thermo_CH3OH.therm THERMO
cp $MECHDIR/Molnew MOLNEW
cp $MECHDIR/Mec_CH3OH.mech MEC
cp Thermo-Particle.therm THERMLIQ

mkdir ./p_7bar
#Schleife über Druck
for Pin in 7.000E+00; do # 4.000E+01 4.500E+01; do
#Schleife über Gastemperatur
for Tin in 1.250E+03; do # 1.429E+03 1.667E+03 1.111E+03; do #
#Schleife über Tropfentemperatur
for Tdrop in 3.42E+02 ; do # 3.10E+02
#Schleife über Konzentration meth
for Cin in 0.90; do # 0.80 0.70 0.60 0.50 0.40
#Schleife über Konzentration h20
let H2Oin=1.00-$Cin

sed -e "s/_Pin_/$Pin/" -e "s/_Tin_/$Tin/" -e "s/_Tdrop_/$Tdrop/" -e "s/_Cin_/$Cin/" -e "s/_H2Oin_/$H2Oin/" Inp-Dropletmeth > INP
$INSDIR/insinp.x
$INSDIR/insrun.x
#$INSDIR/insrun_fast32.x
mv fort.89 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_tec
mv fort.87 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_gnu
mv fort.77 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_drop
mv fort.3 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_pro
mv fort.35 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_tign
mv fort.12 ./p_7bar/p${Pin}_Tg${Tin}_Td${Tdrop}_${Cin}_${H2Oin}_IniPro
done
done
done
done
rm THERMO
rm MOLNEW
rm MEC
rm INP
rm THERMLIQ
#rm fort.*
#################################################################################
exit 0
der code funktioniert so nur ist er halt ohne array gelöst. ich gebe hier nem programm werte für druck, temperatur und wasser sowie methanol konzentration vor. es handelt sich dabei um tropfen aus eben diesen 2 stoffen.
mit 2 stoffen geht es so wie oben in dem fett markierten gemacht, das man um die konzentration des 2. stoffes zu bekommen, einfach 1-die konzentration vom ersten macht. das problem ist, dass ich mit 3 stoffen rechnen will.
also ich will ein skript haben. des dann n array drin hat wo es dann nacheinander die einzelnen zeilen des arrays aufruft und in denen dann die 3 verschiedenen konzentrationen stehen. also zum beispiel:
0.2 0.6 0.2
0.3 0.5 0.2
0.4 0.5 0.1

mein problem war schon das feld zu definieren und danach muss dann halt zeile für zeile aufgerufen werden.
kann mir einer sagen wie des geht?
vorweg ich hab keine ahnung von bash programmieren. des is für meine studienarbeit und ich mache da modellierung bzw simulation und keine programmierung.

cya pipe
 
also ich lege dann mein array so an?
array=( 0.2 0.6 0.2, 0.3 0.5 0.2, 0.4 0.5 0.1 )
oder wie?
und wie genau ruf ich des dann auf bzw wie sag ich dem code jetzt was H2Oin und was Cin bzw der dritte kraftstoff ist?
wie lass ich die schleife dann durchlaufen?
also er soll automatisch alles nacheinander machen. mit for und do habe ich es ja vorher auch nur da war es halt kein array sondern einzelne werte.
sorry, bin da net wirklich fit in dem zeug
.
cya pipe
 
kann mir keiner helfen? ich hab mir vorhin überlegt das ich des array so wie oben oder ungefähr so anlege und dann einfach sag for Cin in hier dann die erste spalte und erste zeile vom array aufrufen danach dann die zweite zeile und 1. spalte usw.
des problem dabei ist, der wechselt mir da ja dann den wert von Cin aber den wert von H2Oin nicht und damit hab ich ne falsche konzentration.
also ich muss immer alle 3 werte gleichzeitig ändern und dann aufrufen.
kann mir keiner helfen :(

cya pipe
 
da ich selbst ein Programmierkrüppel bin, hier mal ne Hilfe die mir hilfreich erscheint :B

8.1. Declare simple bash array

#!/bin/bash
#Declare array with 4 elements
ARRAY=( 'Debian Linux' 'Redhat Linux' Ubuntu Linux )
# get number of elements in the array
ELEMENTS=${#ARRAY[@]}

das meinte der Dude mit "halt mit for-schleife iterieren (wobei hier incrementiert wird)^^

# echo each element in array
# for loop
for (( i=0;i<$ELEMENTS;i++)); do
echo ${ARRAY[${i}]}
done


8.2. Read file into bash array

#!/bin/bash
#Declare array
declare -a ARRAY
#Open file for reading to array
exec 10
let count=0

while read LINE <&10; do

ARRAY[$count]=$LINE
((count++))
done

echo Number of elements: ${#ARRAY[@]}
# echo array's content
echo ${ARRAY[@]}
# close file
exec 10>&-
 
thx, hier isses schon n bissel verständlicher. versteh ich des richtig, dass er hier verschiedene elemente hat und in den elementen stecken dann die werte der 3 spezies drin?
des problem ist, wie sag ich dem dann welche spezies welcher wert ist?
ich werd übers we noch drüber nachdenken und am montag mal paar leute an der uni fragen, wenn hier jemand soviel ahnung hat und des in paar sek den code tippen kann wär jedoch sau cool.
ich sitz da schon seit ner weile dran und hab keine passende lösung gefunden.

cya pipe
 
das sagst du ihm indem du sagst:
der name ist A die stelle zur speicherung des wertes "12345" ist 10 (er fängt bei 0 an zu zählen, also der 11te Wert)

$A[10]=12345;
$Arrayname[arraystelle]=Wert;
 
Zurück