2017-10-05 80 views
1

输出我在bash写了一个脚本,用于从传感器读取XML文件的值, 我的旧脚本的工作就像一个魅力,但现在我需要给脚本通过服务器的IP论据。庆典挂起处理的变量

这里的问题: 我的脚本只能到某一点,比挂起,什么都不做

该脚本用于像下面的例子(?):

./script.sh -temp 20 10 192.168.0.4

(-temp用于读取温度值,20表示警报,如果警报落在警报下面,10警告如果警报落在警报下面,192.168.0.4是IP警告>http://192.168.0.4/details.xml))

- 将在combine_host()来解决

我甚至增加了一些回声,以输出在某些步骤中进行调试每个需要的值。 它就停通过

case "$1" in 
     -temp) 
     echo $host 
       pre_testing=$(wget -O - -o /dev/null $host | sed -n 's:.* <Temperature Units="Centigrade">\(.*\)</Temperature>.*:\1:p') 
     echo $pre_testing 

所以回声$主机正在运行并输出正确的地址,但回声$ pre_testing永远不会运行,因为它上面

功能我真的不知道为什么挂起,只是测试了这么多想认为像输出到其他变量,反斜杠等 但似乎没有工作

有人有一个想法吗?

,是的,剧本是工作和做它的工作,所以我真的不希望重写很多;)

这里是我的德语注释的全部代码

#! /bin/bash 

#Syntax: 
#script.sh -x1 x2 x3 x4 
#-x1 = Wert 
#x2 = unter x Warnung 
#x3 = unter x kritisch 
#x4 = IP des Sensor-Servers 
#folgende Werte sind abfragbar: 
#-health 
#-temp 
#-humidity 
#-baromb 
#-light 


#Adresse des WiFi-Sensor-Servers 
http="http://" 
pre_host=$4 
details="/details.xml" 
combine_host() { echo $http$pre_host$details; } 
host="$(combine_host)" 

echo $host 

#Argumente abfragen und Daten laden 
case "$1" in 
     -health) 
       testing=$(wget -O - -o /dev/null $host | sed -n 's:.* <Health>\(.*\)</Health>.*:\1:p') 
      ;; 
     -temp) 
     echo $host 
       pre_testing=$(wget -O - -o /dev/null $host | sed -n 's:.* <Temperature Units="Centigrade">\(.*\)</Temperature>.*:\1:p') 
     echo $pre_testing 
      testing=$(echo $pre_testing | sed -r "s/([^\.]*)\..*/\1/") 
     echo $testing 
      ;; 
     -humidity) 
       pre_testing=$(wget -O - -o /dev/null $host | sed -n 's:.*<Humidity Units="PercentRelativeHumidity">\(.*\)</Humidity>.*:\1:p') 
       testing=$(echo $pre_testing | sed -r "s/([^\.]*)\..*/\1/") 
      ;; 
     -baromb) 
       pre_testing=$(wget -O - -o /dev/null $host | sed -n 's:.*<BarometricPressureMb Units="Millibars">\(.*\)</BarometricPressureMb>.*:\1:p') 
       testing=$(echo $pre_testing | sed -r "s/([^\.]*)\..*/\1/") 
      ;; 
     -light) 
       testing=$(wget -O - -o /dev/null $host | sed -n 's:.*<Light Units="Lux">\(.*\)</Light>.*:\1:p') 
      ;; 
     -*) echo "Falsches Argument!" 
      ;; 
    *) echo "kein Argument vorhanden!" 
      ;; 
esac 


#Werte prüfen und ausgeben 
if [ $# -ne "3" ]; 
     then 
     status=3 
     statustxt=UNKNOWN 
     echo "Fehler in der Anfrage!" 
     exit 3 
elif [ "$testing" -gt "$3" ]; 
     then 
     status=2 
     statustxt=CRITICAL 
     echo "$status - Sofort Handeln! - Wert_$1 $testing;$2;$3; $statustxt  | '$1'=$testing;$2;$3;;" 
     exit 2 
elif [ "$testing" -gt "$2" ]; 
     then 
     status=1 
     statustxt=WARNING 
     echo "$status - Bald Handeln! - Wert_$1 $testing;$2;$3; $statustxt |  '$1'=$testing;$2;$3;;" 
     exit 1 
else 
     status=0 
     statustxt=OK 
     echo "$status - Alles OK! - Wert_$1 $testing;$2;$3; $statustxt |  '$1'=$testing;$2;$3;;" 
     exit 0 
fi 

done 
+0

也就是说奇怪,因为之前我改变了IP啄它的工作就像一个魅力 – MrPoPoPolski

+0

“O”被写入文件,但“-O - ”被写入stdout和“O”是写日志输出别的地方,在我的情况到/ dev/null的 – MrPoPoPolski

+0

现在我只能用'pre_testing = $(-O的wget - O - $主机)回声$ pre_testing' 即使这样不起作用 – MrPoPoPolski

回答

0

灿”看不到的问题... 也许你正在使用错误的参数调用它? 什么的wget -O - -o /dev/null $host输出?

PS:GrüsseAUS明镜瑞士:)

+0

是的,我在我的论点中有一个错字;) P.S. Grüßeaus Norddeutschland;) – MrPoPoPolski