csh/sh for-Schleife - wie?
bin ich zu schreiben versucht, eine for-Schleife, die ausgeführt wird, 2 Skripte auf FreeBSD. Ist mir egal, wenn es geschrieben ist in sh oder csh. Ich will etwas wie:
for($i=11; $i<=24; $i++)
{
exec(tar xzf 'myfile-1.0.' . $i);
//detect an error was returned by the script
if ('./patch.sh')
{
echo "Patching to $i failed\n";
}
}
Weiß jemand, wie dies zu tun bitte?
Dank
- Warum sind Sie mit csh, die für scripting - das ist NICHT das, was es gedacht war. Verwenden der bash, ksh oder sogar sh statt.
- keine Wahl. es ist die einzige shell, die auf freebsd, die ich verwenden kann. es sei denn, ich benutze Kh, in dem Fall bin ich auf der Suche für eine sh-Lösung.
- FreeBSD nicht sh???
- wer weiß? Wenn es hat, ein sh-Skript tun würde.
Du musst angemeldet sein, um einen Kommentar abzugeben.
csh Schleifen tut gut, das problem ist, dass Sie mit exec ersetzt das aktuelle Programm (die shell ist) durch eine andere im gleichen Prozess. Da haben andere geliefert sh-Versionen, hier ist eine csh-one:
Nicht sicher über die
./patch.sh
testen Sie für seine Existenz oder läuft es? Bei mir läuft es hier und testen das Ergebnis - true bedeutet, dass es wieder null. Alternativ:i
??#!/bin/csh -f
. Die-f
sagt der shell, nicht um die Quelle Ihrer Autostart-Dateien.cshrc
und.login
- das macht das script schneller ausgeführt und vermeidet Abhängigkeiten. (Dies gilt nur für csh/tcsh; sh und bash haben eine-f
option, aber es ist ganz anders.)Den typischen Weg, dies zu tun in sh ist:
Beachten Sie, dass
seq
ist nicht standard. Je nach der Verfügbarkeit von Werkzeugen, können Sie versuchen:oder
oder
Habe ich ein paar änderungen vorgenommen: ich Abbrechen, wenn der Teer schlägt fehl, und nicht emittieren eine Fehlermeldung aus, da tar sollte emittieren die Fehlermeldung anstelle des Skripts.
Wow! Kein BASH. Und wohl auch keine Kornshell:
Geschrieben in reinem Bourne-shell, wie es Gott beabsichtigt hat.
Hinweis: Sie müssen verwenden Sie die
expr
Befehl fügen Sie 1 bis$i
. Bourne-shell nicht rechnen. Die backticks bedeuten, den Befehl auszuführen und legen Sie die STANDARDAUSGABE von Befehl in$i
.Kornshell und BASH machen dies viel einfacher, denn Sie können tun Mathe und noch mehr komplexe for-Schleifen.
Ich denke, Sie sollten nur mit bash. Ich habe es nicht hier, also kann es nicht testen, aber so etwas wie dies funktionieren sollte:
EDIT: lese Gerade die Kommentare und fand heraus, dass es kein bash FreeBSD-Standardinstallation. Also das kann überhaupt nicht funktionieren - ich bin mir nicht sicher über die Unterschiede zwischen der (t)csh und bash.
Gut, was ich nur habe ist Folgendes.
Last sh-shell und dann for-Schleife funktioniert wie unter linux.