bash挂起处理变量的输出

bash挂起处理变量的输出,bash,nagios,freeze,Bash,Nagios,Freeze,我在bash中编写了一个脚本,用于从传感器读取XML文件的值, 我的旧脚本工作起来很有魅力,但现在我需要通过参数为脚本提供服务器的IP 问题是: 我的脚本只工作到某一点,然后挂起,什么也不做(?) 该脚本的使用方式与以下示例类似: ./script.sh-温度20 10 192.168.0.4 (-temp用于读取温度值,20表示下降到其下的警报,10表示下降到其下的强警报,192.168.0.4表示IP(将在combine_host()中解析为->) 我甚至在调试的某些步骤中添加了一些echo

我在bash中编写了一个脚本,用于从传感器读取XML文件的值, 我的旧脚本工作起来很有魅力,但现在我需要通过参数为脚本提供服务器的IP

问题是: 我的脚本只工作到某一点,然后挂起,什么也不做(?)

该脚本的使用方式与以下示例类似:

./script.sh-温度20 10 192.168.0.4

(-temp用于读取温度值,20表示下降到其下的警报,10表示下降到其下的强警报,192.168.0.4表示IP(将在combine_host()中解析为->)

我甚至在调试的某些步骤中添加了一些echo来输出所需的每个值。 它正好经过

    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
中的案例“$1”
-温度)
echo$host
预测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).:\1:p')
echo$pre_测试
因此echo$主机正在工作并输出正确的地址,但echo$pre_测试从未运行,因为它挂起在上面的函数中

我真的不知道为什么,只是测试了这么多,想把它输出到另一个变量,反斜杠,等等。 但似乎什么都不管用

有人有主意吗

是的,脚本正在运行,并且正在发挥作用,所以我真的不想重写太多;)

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

#! /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
#/bin/bash
#语法:
#script.sh-x1 x2 x3 x4
#-x1=Wert
#x2=unter x Warnung
#x3=unter x kritisch
#x4=IP des传感器服务器
#folgende Werte sind abfragbar:
#-健康
#-临时工
#-湿度
#-巴罗姆
#-轻的
#无线传感器服务器地址
http=“http://”
pre_主机=4美元
details=“/details.xml”
combine_host(){echo$http$pre_host$details;}
host=“$(合并\u主机)”
echo$host
#阿伯弗雷根和达顿·拉登的辩论
案件“$1”
-(健康)
测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).*:\1:p')
;;
-温度)
echo$host
预测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).:\1:p')
echo$pre_测试
测试=$(echo$pre|u testing | sed-r“s/([^\.]*)\..*/\1/)
回声测试
;;
-湿度)
预测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).:\1:p')
测试=$(echo$pre|u testing | sed-r“s/([^\.]*)\..*/\1/)
;;
-巴罗姆)
预测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).:\1:p')
测试=$(echo$pre|u testing | sed-r“s/([^\.]*)\..*/\1/)
;;
-(轻)
测试=$(wget-O--O/dev/null$host | sed-n's:.*\(.*\).*:\1:p')
;;
-*)呼应“法尔希的论点!”
;;
*)回声“kein Argument vorhanden!”
;;
以撒
#我们是普吕芬和奥斯盖本
如果[$#-ne“3”];
然后
状态=3
statustxt=未知
回声“安弗拉格的费勒!”
出口3
elif[“$测试”-gt“$3”];
然后
状态=2
statustxt=严重
echo“$status-Sofort Handeln!-Wert_$1$testing;$2;$3;$statustxt |'$1'=$testing;$2;$3;;”
出口2
elif[“$测试”-gt“$2”];
然后
状态=1
statustxt=警告
echo“$status-Bald Handeln!-Wert_$1$testing;$2;$3;$statustxt |'$1'=$testing;$2;$3;;”
出口1
其他的
状态=0
statustxt=OK
echo“$status-Alles OK!-Wert_$1$testing;$2;$3;$statustxt |'$1'=$testing;$2;$3;;”
出口0
fi
完成
看不到问题所在。。。 也许你用错误的论点来称呼它? wget-O--O/dev/null$host的输出是什么

PS:Grüsse aus der Schweiz:)

看不出问题所在。。。 也许你用错误的论点来称呼它? wget-O--O/dev/null$host的输出是什么


PS:Grüsse aus der Schweiz:)

这很奇怪,因为在我更改IP之前,它像一个符咒一样工作“-O”正在写入文件,而“-O-”正在写入标准输出,-O”用于在其他地方写入日志输出,在我的例子中是/dev/nullnow,我只使用
pre_testing=$(wget-O--O-$host)echo$pre_testing
即使这不起作用,我也必须将整个XML文件的输出存储到一个变量中,因为我在此文件夹中没有写入权限,但当您只执行
wget-O--O-$host
时,您能看到屏幕上连续显示的数据吗?或者不是?这很奇怪,因为在我更改IP之前,它像一个符咒一样工作“-O”正在写入文件,-O-”正在写入标准输出,-O”用于在其他地方写入日志输出,在我的例子中是/dev/nullnow,我只使用
pre_testing=$(wget-O--O-$host)echo$pre_testing
即使这不起作用,我也必须将整个XML文件的输出存储到一个变量中,因为我在此文件夹中没有写入权限,但当您只执行
wget-O--O-$host
时,您能看到屏幕上连续显示的数据吗?还是没有?是的,我的论点有一个输入错误;)P.S.Grüße aus Norddeutschland;)是的,我的论点有一个输入错误;)P.S.Grüße aus Norddeutschland;)