Chemie Bash Script ('if' Fehler)

Schönen Abend =),
in Chemie (ja, ich bin Schüler) ist mir die Idee gekommen, ein Script zu schreiben, das als Input verschiedene Nichtmetalle bekommt und dann die LEWIS-Formel ausrechnet.
Mal wieder eine schöne Aufgabe zum Nachdenken.
Bis jetzt sieht das Script so aus(gekürzte Version, die nur bestimmte Fälle berechnen kann):
Code:
echo -n "Wie viele Atome gibt es?"
read atoms
for i in {1..${atoms}..1}
do
    echo -n "Atomabkürzung: "
    read atomname${i}
done
for a in {1..${atoms}..1}
do
    if [ ${a} == 1 ]
      then
        atom=${atomname1}
    fi
    if [ ${a} == 2 ]
      then
        atom=${atomname2}
    fi
    if [ ${a} == 3 ]
      then
        atom=${atomname3}
    fi
    if [ $atom == H ]
      then
        anzahl${a}=1
    elif [ $atom == O ]
      then
        anzahl${a}=2
    fi
done
anzahlhoeckst=${anzahl1}
atomhoeckst=1
if [ ${anzahl2} -gt ${anzahlhoeckst} ]
  then
     anzahlhoeckst=${anzahl2}
fi
if [ ${anzahl3} -gt ${anzahlhoeckst} ]
  then
     anzahlhoeckst=${anzahl3}
fi
ben23=$((${anzahl2} + ${anzahl3}))
if [ ${ben23} == ${anzahl1} ]
then
    if [ ${anzahl2} == 1 ]
    then
        bind2='-'
    else
        bind2='='
    fi
    if [ ${anzahl3} == 1 ]
    then
        bind3='-'
    else
        bind3='='
    fi
    echo ${atomname2}${bind2}${atomname1}${bind3}${atomname3}
fi
Man muss als Atomzahl 3 eingeben und das erste eingegebene Atom muss das sein, was in der LEWIS-Formel in der Mitte steht.
Wenn man die Bash Datei ausführt werden 6 Fehler ausgegeben:
Code:
Wie viele Atome gibt es?3
Atomabkürzung: ./chemie.sh: Zeile 6: read: `atomname{1..3..1}': Ist kein gültiger Bezeichner.
./chemie.sh: Zeile 22: [: ==: Einstelliger (unärer) Operator erwartet.
./chemie.sh: Zeile 25: [: ==: Einstelliger (unärer) Operator erwartet.
./chemie.sh: Zeile 40: + : Syntax Fehler: Operator erwartet. (Fehlerverursachendes Zeichen ist »+ «).
./chemie.sh: Zeile 43: [: ==: Einstelliger (unärer) Operator erwartet.
./chemie.sh: Zeile 49: [: ==: Einstelliger (unärer) Operator erwartet.
==
Mein Problem:
Ich verstehe die Fehlermeldungen nicht :rolleyes:.
1. '==' ist doch ein gültiger Operator.
2. Soweit ich weiss, ist '+' ein Rechenzeichen
3. Wieso wird in der Schleife für 'i' '{1..3..1}' eingesetzt?

Danke für eure Hilfe ;)
 
Hallo,
Schau dir am besten nochmal an, wie man diverse Sachen in bass umsetzt. Jede Sprache kocht da eine leicht andere Suppe, z.B. Bash-Skripting-Guide fur Anfanger › Shell › Wiki › ubuntuusers.de

Zu den Fragen:
1. Benutze bei deinen Ints doch, einfach -eq als Vergleichsoperator. Bei Strings ist deine Methode ok.
2. $((x + y))
3. Schau dir mal bitte an, wie man in bash Arrays erstellt und damit arbeitet. Ich glaube da liegt dein Problem.
 
Zuletzt bearbeitet:
Zurück
Oben