Bash-Skript: zeilenweises Lesen und zusätzlich wenn eof wieder von vorne beginnen

03/09/2008 - 09:45 von Martin Tauscher | Report spam
Hallo zusammen,

ich bin gerade dabei, mich ein wenig in die Bash-Programmierung
einzuarbeiten. Bisher habe ich nur mit Batch-Files unter Windows was
gemacht.
Da die Linux-Embedded-Geràte bei mir nun doch zunehmen, dachte ich ich
sollte mich mal ein wenig mit Batch für Linux beschàftigen.

Darum hab ich mal folgendes Script zusammengebastelt. Ich weiß aber
nicht, warum es nicht funktioniert:

//code an
#!/bin/ash

Durchlauf=1
proxyline=1

# Schleife bricht ab, wenn Durchlauf <= 20
while [ $Durchlauf -lt 20 ] ; do
echo "Durchlauf hat jetzt den Wert $Durchlauf"

lastProxy=$(wc -l <proxylist.txt)

if ["$proxyline" -lt "$lastProxy"]; then
http_proxy='http://'$(sed -ne "${proxyline}p" proxylist.txt);
proxyline=$(($proxyline+1));
echo "$http_proxy"
echo $proxyline
echo $lastProxy
echo 111
else
proxyline=1
http_proxy='http://'$(sed -ne "${proxyline}p" proxylist.txt);
proxyline=$(($proxyline+1));
echo "$http_proxy"
echo $proxyline
echo $lastProxy
echo 222
fi

Durchlauf=$(($Durchlauf+1))
done
//code off

Zur Erkàrung:

Ich habe eine Datei proxylist.txt. Darin stehen lauter ip-Adressen in
dieser Form:
111.111.111.111:9999
222.222.222.222:8888


Ich benötige nun eine Funktion, die mir eine bestimmte Zeile ausliest
und daraus diese Form macht:
http://111.111.111.111:9999
Das ganze soll in die Variable http_proxy geschrieben werden.

Beim nàchsten Durchlauf soll nun nicht mehr die 1. Zeile benutzt
werden, sondern die nàchste. Sprich als Ergebnis soll
http://222.222.222.222:8888
in der Variablen http_proxy stehen.

Zusàtzlich soll auch noch überprüft werden, ob die letzte Zeile in der
proxylist.txt erreicht wurde. Wenn ja, dann soll beim nàchsten
Durchlauf wieder mit Zeile 1 begonnen werden.

Die While-Schleife ist erst einmal nur zum Testen gedacht, welche den
Code eben eine bestimmte Anzahl oft ausführt. Genauso dienen die
ganzen echos dazu, die Werte darzustellen.
Spàter, wenn alles funktioniert, soll der Teil in der While-Schleife
in ein bereits vorhandenes Skript als Funktion eingebaut werden.

Ich bin schon fast am verzweifeln, warum das Skript immer eine
Fehlermeldung wirft.
Ich habe mir schon überlegt, ob es vielleicht an sowas wie
ENABLEDELAYEDEXPANSION unter Batch liegt.

Ich hoffe ihr könnte mir helfen und mir sagen, was ich falsch mache
und wie es richtig lauten muss.

Viele Grüße
Martin
 

Lesen sie die antworten

#1 Heike C. Zimmerer
03/09/2008 - 10:53 | Warnen spam
Martin Tauscher writes:


if ["$proxyline" -lt "$lastProxy"]; then

Ich bin schon fast am verzweifeln, warum das Skript immer eine
Fehlermeldung wirft.
Ich habe mir schon überlegt, ob es vielleicht an sowas wie
ENABLEDELAYEDEXPANSION unter Batch liegt.



Es wàre praktisch gewesen, die Fehlermeldung hier zu zitieren. Die
dient ja nicht (wie so gern woanders) zur Abschreckung, sondern als
Hinweis für Dich und für die Mitleser.

Ich weiß nicht, ob sie die oben zitierte Zeile betrifft. Aber diese ist
jedenfalls falsch. '[' ist ein Kommando wie jedes andere auch und muss
deshalb von seinen Argumenten mit Leerzeichen abgetrennt werden. Das
abschließende ']' ist ein Argument wie jedes andere auch und muss
deshalb vom vorhergehenden ebenfalls getrennt werden.

Ähnliche fragen