Bash Skript: [[: not found Fehler

D

Diablo665

Grünschnabel
Hallo zusammen!

Ich bin gerade an einem kleinen privaten Projekt am Werkeln, das sich um Wetterdatenmgmt dreht. Dazu verwende ich einen Wetterdatenempfänger (USB-WDE1), welcher an meinem Raspberry Pi (mit Respian) hängt und von verschiedenen Sensoren Daten bekommt. Um diese Daten langfristig zu speichern und mit diesen auch Grafiken erstellen zu können, verwende ich rrdtools, eine Round Robin Datenbank. Bis dahin läuft auch alles wunderbar ... Zum Auslesen und Speichern der Daten vom Empfänger in die .rrd Datenbank habe ich ein kleines Skipt entdeckt, welches genau diese Schritte ausführt bzw. ausführen sollte.

Und jetzt zu meinem Problem:
Beim Ausführen des bash Skripts bekomme ich folgende Fehlermeldung:
Code:
/root/scripts/weather_script_01: 8: /root/scripts/weather_script_01: [[: not found

Der Code dazu sieht wie folgt aus:
Code:
#!/bin/bash
# Receive remote weather data from USB-WDE1 and store it into database

# Loop forever to read data from USB-WDE1
socat /dev/ttyUSB0,b19200 STDOUT | \
while read line
do
    if [[ "${line%%;*}" == '$1' ]] ; then
        # format data
        tmp=`echo "${line#?1;1;}" | tr ';,' ':.'`
        data=`echo "N${tmp%%0}" | sed 's/::/:U:/g' | sed 's/::/:U:/g'`
        data=${data%%:}
        # update rrd
        rrdtool update /root/scripts/weather.rrd $data
    fi
done

Der Empfänger liefert folgende Daten:
Code:
$1;1;;25,8;26,0;25,9;;;;;;59;57;62;;;;;;18,6;81;0,0;32;0;0

Jede Zeile stellt einen kompletten Datensatz dar, der aus 25 durch Semikolon getrennten Feldern besteht. Die ersten drei Felder sind unveränderlich, dann folgen die Temperaturmeßwerte (°C) von acht Sensoren und dann die Feuchtewerte dieser acht Sensoren. Danach kommen Temperatur, Luftfeuchte, Windgeschwindigkeit, Niederschlag und Regensensor eines Kombisensors. Das letzte Feld mit dem unveränderlichen Wert 0 steht für das Ende des Datensatzes.


Ich hoffe, es kann mir jemand auf die Sprünge helfen!

Thx,
Manuel
 
Moin,

Code:
if [[ "${line%%;*}" == '$1' ]] ; then

wie kommst du da auf die zwei Klammenr, da sollte nur eine stehen.

mfg
HEadCrash
 
Hallo Manuel,

vermutlich hast Du das Skript mit 'sh /root/scripts/weather_script_01' ausgefuehrt und nicht mittels '/root/scripts/weather_script_01' oder 'bash /root/scripts/weather_script_01'
Die doppelten eckigen Klammern sind eine Erweiterung von bash, und wenn Du /bin/sh aufrufst, ist dies, selbst wenn es ein link auf bash ist, meist eben 'sh-konform', daran aendert auch die erste Zeile '#!/bin/bash' nichts.
 
Moin,

Code:
if [[ "${line%%;*}" == '$1' ]] ; then

wie kommst du da auf die zwei Klammenr, da sollte nur eine stehen.

mfg
HEadCrash

Thx für deine Antwort! In gewisser Weise hattest du recht! bei sh gibt es in der Syntax die beiden [[ nicht, unter bash anscheinend schon. hatte ich leider auch nicht gewusst!
 
'bash /root/scripts/weather_script_01'

Besten Dank, das wars! Wie ich oben schon geschrieben habe, waren mir die Syntaxunterschiede zwischen sh und bash nicht bewusst. Wenn ich das Script ausführbar machen würde, dann würde es wahrscheinlich auch anders funzen!

Riesen THX und BG,
Manuel
 

Ähnliche Themen

Wie komme ich an den Inhalt des Inhalts einer Variable?

NagiosGrapher 1.7.1 funktioniert nicht

Windows clients können nicht mehr auf lange laufendes System zugreifen

Rollei Mini Wifi Camcorder

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Zurück
Oben