.sh Shell Script Loopen?

Pixelcoffee

Mitglied
Thread Starter
Dabei seit
16.03.2019
Beiträge
45
Reaktionspunkte
7
Hallo!
Ich sitze momentan an einer .sh Shell Datei.
Ich bin fast fertig, nur würde ich sie gerne loopen, und zwar so, dass man als User im Terminal wenn man die Bash Datei öffnet, selbst eingeben und definieren kann, wie oft dieser Zyklus stattfindet. Mein Code sieht aktuell wie folgt aus:

Bash:
#!/bin/sh

read -p "Grösse der zu kopierenden Datei:" a

read -p "Anzahl der Write-Delete Zyklen:" b

mkfile -n "$a"m /Users/pixelcoffee/Documents/Test.txt

cp -R /Users/pixelcoffee/Documents/Test.txt /Users/pixelcoffee/Documents/

rm /Users/pixelcoffee/Documents/Test.txt

Wie kann ich hierbei definieren, dass die Zeilen 9-11 geloopt werden, und zwar nach der Anzahl der vom User im Terminal definierten Variable b?

Danke für eure Unterstützung!
 
einfache for schleife
for i in {1..b}
do
done

das kann man aber doch leicht selbst recherchieren.
 
die read vor der schleife, der rest zwischen do und done.
allerdings solltest du das mit den existierenden dateien behandeln und entweder automatisch überschreiben oder du musst halt jedes mal das überschreiben bestätigen.
 
hmm, probier mal {1..$b}.
ist ja eine varibale.
 
Es funktioniert nicht...

Entweder z.B.
Code:
for i in $(seq 1 $b)
do
    mkfile -n "$a"m /Users/pixelcoffee/Documents/Test.txt
    cp -R /Users/pixelcoffee/Documents/Test.txt /Users/pixelcoffee/Documents/
done
oder z.B.
Code:
for ((i=1;i<=b;i++))
do
    mkfile -n "$a"m /Users/pixelcoffee/Documents/Test.txt
    cp -R /Users/pixelcoffee/Documents/Test.txt /Users/pixelcoffee/Documents/

done

for i in {1..$b} geht nicht.
 
  • Gefällt mir
Reaktionen: Pixelcoffee
for ((i=1;i<=b;i++))
do
mkfile -n "$a"m /Users/pixelcoffee/Documents/Test.txt
cp -R /Users/pixelcoffee/Documents/Test.txt /Users/pixelcoffee/Documents/

done
[/CODE]

Das hat funktioniert! Danke!

Und wie kann ich den Prozess des Kopierens und Löschens der Datei im Terminal sichtbar machen? Sodass der User ein "Feedback" bekommt, mit nem Counter z.B.
"Zyklus 1 von 5" oder so z.B.
 
musst du halt ein entsprechendes echo in die schleife einbauen.
 
Also z.B.

Code:
for ((i=1;i<=b;i++))
do

echo Zyklus $i von $b

mkfile -n "$a"m /Users/pixelcoffee/Documents/Test.txt
cp -R /Users/pixelcoffee/Documents/Test.txt /Users/pixelcoffee/Documents/

done

?
 
fast, musst nur das was vom echo geschrieben werden soll in " " setzen.
eventuell noch ein \n für newline dazu.
 
Ich hab ja schon mal geschrieben, dass etwas Grundlagen dem TE vielleicht doch ganz gut tun würden, und es nicht umbedingt auf die Hauruckmethode zu erzwingen und dabei nur ein Viertel zu verstehen.

Ist nur meine Meinung.
 
  • Gefällt mir
Reaktionen: dg2rbf und warnochfrei
Immerhin wird mal einigermaßen klar dargestellt, mit welcher Shell das Ganze funktionieren soll. Ist ja auch nicht selbstverständlich.
 
  • Gefällt mir
Reaktionen: dg2rbf
<useless knowledge>
Bash:
for i in $(eval echo "{1..${b}}");
</useless knowledge>

Jaaa, ich hätte sagen sollen warum es nicht geht: Die Braceexpansion wird ausgeführt bevor die Variablen expandiert werden, deshalb geht es SO wie da oben nicht ;-). Das es mit eval geht war mir klar. Aber danke Dir trotzdem :). So einige Sachen hier im Forum waren mir ja durchaus schonmal neu, ..
Ich fands nur etwas traurig in dem Moment das der OP immer noch nicht weiter war als hier (https://www.macuser.de/threads/shell-fragen.851309/), und was soll ich Ihn dann mit solchen Details nerven. BASH/Shell ist da evlt. auch nicht das tollste zum Einstieg mit seinen ganzen Eigenheiten, und man kann nichtmals Gescheid "rechnen" ohne bc. Ich bin nicht sooo der Fan von Shell. Ich tendiere mittlerweile "Skript"-Sachen eher in Go oder Python zu machen sobald sie etwas anspruchsvoller sind. Hier jetzt natürlich nicht,... aber du weißt schon wie ich das meine ;)

Aber andererseits weiß ich auch als ich angefangen hab zu programmieren. Da habe ich auch schonmal Tage gebraucht um einige Konzepte zu verstehen und effektiv dann nur wenige Zeilen Code am Tag geschafft, die schließlich nichtmal richtig waren, ..
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: warnochfrei
Zurück
Oben Unten