skript techniken - "if [ ..." - bedingung
![](https://seccdn.libravatar.org/avatar/db3188533ac5c5021707ace25bcb401c.jpg?s=120&d=mm&r=g)
hallo liste, als anfänger im bereich shellskripten habe ich ein paar fragen zum vorgehen beim erstellen eines shellskriptes, das einfach, wenn ich online bin alle halbe stunde meine ganzen postfächer abklappert. ich möchte nicht irgendein gui-tool wie k- oder xbiff verwenden, weil ich oft auch nur an der konsole arbeite. also: wie muß die "if [ ..." - bedingung ausschauen, die testet ob ich online bin? aus der manpage zu if wurde ich nicht recht schlau, da fehlen mir ein paar beispiele. besteht wenn eine ppp-verbindung besteht eine art lock-file? wenn ja, wo finde ich dieses? - ich möchte nicht, daß das script immer läuft und alle halbe stunde fetchmail aufruft (verständlich, oder?), sondern es wird in die ip-up.local eingetragen werden. vielen dank im voraus markus -- may you always grok in fullness ( http://w3.one.net/~wap/wapGrok.html ) -- from/von/de >mfeilner@f-linux.com< Markus Feilner --------------------------- Linux, Webdesign, Erlangerstr. 2 --------------------------- IT-Consulting 93059 Regensburg ----- 0941/706523--------mobil: 0170/3027092
![](https://seccdn.libravatar.org/avatar/a6ab069fab1a1217de6ccf73178c84c2.jpg?s=120&d=mm&r=g)
On Sun, 15 Jul 2001, Markus Feilner wrote:
hallo liste, als anfänger im bereich shellskripten habe ich ein paar fragen zum vorgehen beim erstellen eines shellskriptes, das einfach, wenn ich online bin alle halbe stunde meine ganzen postfächer abklappert. Warum so kompliziert? fetchmail kennt den Parameter -d <seconds>. Einfach in die ip-up eintragen, und dann werden die Mails alle <seconds> abgeholt. In up-down dann fetchmail -quit eintragen, dass beendet fetchmail wieder.
gruß Lars
![](https://seccdn.libravatar.org/avatar/c65f0a9d70486d425ffd4799ddb379fc.jpg?s=120&d=mm&r=g)
Hallo Markus, * Markus Feilner schrieb am 15.Jul.2001:
wie muß die "if [ ..." - bedingung ausschauen, die testet ob ich online bin? aus der manpage zu if wurde ich nicht recht schlau, da fehlen mir ein paar beispiele.
Erst mal zu if. Leider kommt da was durcheinander. Das [ ist kein Teil der Syntax, sondern ein Befehl. Da könnte auch was anderes stehn, etwa ls oder rm. Die Syntax zu if lautet: if Befehlskette then Befehle, die ausgeführt werden, wenn wahr. else Befehle, die ausgeführt werden, wenn nicht wahr. fi Hinter dem if steht ein oder mehrer Befehle, die auch noch pipes bilden können mit || oder && verkettet sein können usw. Aber sagen wir der Einfachheit halber, da steht nur ein Befehl. Jeder Befehl hat einen Rückgabewert. Ist dieser 0, so gilt das als wahr. Jeder Wert ungleich 0 gilt als falsch. Es könnte hier ein grep stehen. Ein grep gibt eine 0 zurück, wenn etwas gefunden wurde, und eine 1 wenn nichts gefunden wurde, sowie eine 2 bei einem Syntaxfehler. grep wäre somit ein Sinnvoller Kandidat. Das würde etwa so aussehen: if grep -s Wort /Pfad/Datei then echo In /Pfad/Datei gibt es das Wort Wort. else echo In /Pfad/Datei steht niergends das Wort Wort. fi Die Option -s ist dafür da, daß keine Ausgabe gemacht wird, die Interessiert nicht, sondern nur, ob es was gibt oder nicht. Es gibt noch ein paar andere Befehle, die als Bedingung in einer if-Verzweigung Sinn machen. Aber der Befehl, der am aller-allermeisten benutzt wird ist test. Siehe hierzu man test. Da test so häufig vorkommt, gibt es dazu auch einen anderen Namen, nämlich [. Die eckige Klammer ist somit kein Syntaxbestandteil der bash, so wie es die runde, oder geschweifte Klammer ist, sondern es ist ein Befehl, der auch einen anderen Namen hat, nämlich test. Unter diesen Namen gibt es dazu auch eine Manpage. Einziger Unterschied zwichen test und [ ist, daß [ als Abschluß noch ein ] erwartet, was bei test nicht stehen darf. Du kanst somit anstelle von [ ... ] auch test ... schreiben. test bzw. [ ... ] hat keine Ausgabe irgendwelcher Art, außer Fehlerausgabe bei einem Syntaxfehler, sondern nur einen Rückgabewert. Und deshalb ist es bei einer if-verzweigung so beliebt. Ich schreibe das so ausführlich, weil man das verstanden haben muß, um die bash zu verstehen. test bzw. [ ... ] kann man auch außerhalb einer if-Verzweigung oder einer while-Schleife verwenden, aber dann muß man sich den Rückgabewert mittels echo $? selber ansehen.
besteht wenn eine ppp-verbindung besteht eine art lock-file? wenn ja, wo finde ich dieses? - ich möchte nicht, daß das script immer läuft und alle halbe stunde fetchmail aufruft (verständlich, oder?), sondern es wird in die ip-up.local eingetragen werden.
/etc/ppp/ip-up wird immer dann ausgeführt, nachdem eine Verbindung zustande kommt. Die SuSE-Vorgabe von /etc/ppp/ip-up ruft /etc/ppp/ip-up.local auf falls es existiert und ausführbar ist. Den lezteren Test wird übrigens mittels test gemacht. Allerdings nicht mittels eines if, sondern mit einem && Wie dem auch sei. /etc/ppp/ip-up.local wird nur aufgerufen, wenn gerade eine Verbindung zustande gekommen ist. Bernd -- ROTFL = Rolling On The Floor, Laughing = Auf dem Boden wälzen, lachend. SCNR = Sorry, Could Not Resist = Sorry, Ich konte nicht wiederstehen. AFAIK = As Far As I Know = So weit ich weis|BTW = By The Way = Nebenbei bemerkt IMHO = In My Humble Opinion = meiner bescheidenen Meinung nach |Zufallssig. 9
![](https://seccdn.libravatar.org/avatar/1a1fdd4c61344a41238e1f95e9cfeece.jpg?s=120&d=mm&r=g)
On Monday, 16. July 2001 00:33, Bernd Brodesser wrote:
* Markus Feilner schrieb am 15.Jul.2001: [...]
besteht wenn eine ppp-verbindung besteht eine art lock-file? wenn ja, wo finde ich dieses? - ich möchte nicht, daß das script immer läuft und alle halbe stunde fetchmail aufruft (verständlich, oder?), sondern es wird in die ip-up.local eingetragen werden.
/etc/ppp/ip-up wird immer dann ausgeführt, nachdem eine Verbindung zustande kommt. Die SuSE-Vorgabe von /etc/ppp/ip-up ruft /etc/ppp/ip-up.local auf falls es existiert und ausführbar ist. Den lezteren Test wird übrigens mittels test gemacht. Allerdings nicht mittels eines if, sondern mit einem &&
Wenn ein Lockfile aus irgendwelchen Gründen erwünscht ist, könnte man es aus /etc/ppp/ip-up.local heraus anlegen lassen: ---------8<------------ MY_IP=$4 # vom ISP zugewiesene dynamische # IP für ppp0 LOCKFILE=`mktemp/var/lock/drin-das-war-ja-einfach-XXXXXX.tmp` echo $MY_IP >$LOCKFILE ---------8<------------ Natürlich muss das Lockfile dann aus ip-down.local wieder entfernt werden. Ich persönlich überprüfe meinen Online-Status lieber mit der (zurechtgestutzten) Ausgabe von /sbin/ifconfig. Gruß, Stephan -- Stephan Hakuli | mailto: stephan@hakuli.de | * GnuPG/PGP-Key * | callto: 01 71 - 651 89 43 | available, please | surfto: http://www.hakuli.de | visit my homepage
participants (4)
-
B.Brodesser@t-online.de
-
Lars Mucha
-
Markus Feilner
-
Stephan Hakuli