ForumShell skript HILFE
Bananenbieger – Dienstag, 28. Juli 2020 12:57 Uhr

Guten Tag,
ich habe eine Übungsaufgabe für meine baldige Klausur bekommen , leider komme ich nicht ganz dahinter wie die shell folgendes skript verarbeitet:
 
fot i in $1
do
let k=($i-$2)-$3
echo $k
done
a) das Skript wird wie folgt aufgerufen: bash /myscript.sh “1 2 3” 10 7 6
als ich das in die Konsole eingegeben habe kam dann 10 20 30 heraus. WIe kommt die shell darauf?? Bzw wie werden strings als eingabe verarbeitet? Habe schon ewig recheriert aber ich finde nichts dazu.
b) Das Skript wird nun wie folgt ausgegeben : bash ./myskript.sh 1 2 3 ” 4 5 6″ tragen sie ein wie oft die Schleife durchlaufen wird.
Hab hier einen Schleifendurchlauf rausbekommen. Wieso nur einer?
c) Das Skript wird nun wie folgt geändert und aufgerufen:
for i in $1
do
let k=($i * $2) -$+$3
echo $k > $1
done
bash./myscript.sh “0 4 7 2 1″2 9 12 5
Tragen siein der folgenden Tabelle ein, welöche Dateien von dem SSkript erzeugt werden und den INhalt der jeweiligen Datei, verwenden sie nur si viele Zeilen der Tabelle wie Dateien erzeugt werden:
Nach eingabe kommt dann raus:
Name der Datei:             Inhalt der ersten Datei
0                                     0
1                                     2
2                                    4
4                                    8
7                                    14
 
Bitte kann mir jemand sagen wie die shell diese aufgaben löst bzw was die syntax dahinter ist. Vielen  Dank im Vorraus !
 

2 Antworten
Jörg – Mittwoch, 29. Juli 2020 00:29 Uhr

Hallo,
sorry, aber da sind ein paar Ungereimtheiten. Aber zuerst die Fragen, die man beantworten kann:
for i in $1   (ich nehme an, dass fot für for steht..?)
do
 let k=($i-$2)-$3
 echo $k
done
 
Das script wird mit den Parametern “1 2 3″ 10 7 6 aufgerufen. Das bedeutet:
$1 = “1 2 3”
$2 = 10
$3 = 7
$4 = 6
Nun wird eine Schleife für alle Elemente aus $1 durchlaufen. Das bedeutet, es gibt insgesamt drei Durchläufe (erst hat i den Wert 1, im zweiten Durchlauf hat i den Wert 2 und im dritten Durchlauf den Wert 3). Für jeden Durchlauf wird der Wert von k ermittelt. Dieser ergibt sich aus: k=($i – $2)-$3. Also im ersten Durchlauf: k=(1-10)-7 -> k=-16. Im zweiten Durchlauf: k=(2-10)-7 -> k=-15 und im dritten Durchlauf: k=(3-10)-7 -> k=-14. 
Die Lösung mit den Werten 10 20 und 30 kann ich so erst mal nicht nachvollziehen, denn die bash unterstützt 64 Bit Integer mit Vorzeichenbit.
In Frage b wird ein Durchlauf erfolgen, denn $1 hat den Wert “1”. 
Frage c kann man so nicht beantworten, denn in der Formel fehlt ein Verweis auf einen Index (k=($i * 2) -$+$3. Bei dem “-$” fehlt ein Index. Außerdem nehme ich an, dass “echo $k > $1” eher “echo $k > $i” bedeuten soll, womit für jeden Wert von i je eine Datei mit der Ausgabe der Rechenoperation erfolgen würde (wo jedoch ein Index fehlt).
Ich hoffe, das hilft trotzdem erst einmal weiter.
Viele Grüße
 
Jörg

Moto – Montag, 31. August 2020 09:33 Uhr

Hallo Jörg,

mir war gar nicht bewußt, daß man durch Anführungszeichen einem Parameter mehrere Werte auf einmal übergeben kann.

Naja, wieder was gelernt…

Vielen Dank
LG Moto

Bananenbieger – Mittwoch, 29. Juli 2020 17:30 Uhr

Hallo Jörg, viele Dank für die schnelle Antwort. Du hast recht es soll for heissen und $i anstatt $1. Ok danke jetzt weiss ich auch das \”1 2 3\” als eine Variable gelesen wird und es ergibt alles nun SInn. Tausend Dank und viele Grüße