Linux Ubuntu-If命令似乎不提供else结果

Linux Ubuntu-If命令似乎不提供else结果,linux,ubuntu,Linux,Ubuntu,我不明白为什么我的if脚本不起作用。当我在Linux中连接到internet时,它会显示联机短语。当我没有互联网连接时,仍然显示在线短语,而不是离线短语 #!/bin/bash # system_page - A script to monitor various connections and produce # system information in HTML file ##### Constants TITLE="Monitor Information for $HOSTNAME"

我不明白为什么我的if脚本不起作用。当我在Linux中连接到internet时,它会显示联机短语。当我没有互联网连接时,仍然显示在线短语,而不是离线短语

#!/bin/bash
# system_page - A script to monitor various connections and produce
# system information in HTML file

##### Constants
TITLE="Monitor Information for $HOSTNAME"
RIGHT_NOW=$(date +"%x %r %Z")
TIME_STAMP="Updated on $RIGHT_NOW by $USER"
# clear the screen
clear

echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 >   /dev/null 2>&1



function net_info
{
if [ $? -eq 0 ]; then
echo "Online"
echo "<h2 style="background-color:#00FF00"><font size="6"> INTERNET IS CONNECTED</h2>"
else
echo "Offline"
echo "<h2 style="background-color:#FF0000"><font size="6"> INTERNET IS NOT CONNECTED</h2>"
fi
}
##### Main
cat <<- _EOF_
<html>
<head>
<title style="background-color:#0000FF">$TITLE</title>
</head>
<body>
<h1>$TITLE</h1>
<p>$TIME_STAMP</p>
$(net_info)  
</body>
</html>
_EOF_
#/bin/bash
#system_page-用于监视各种连接并生成
#HTML文件中的系统信息
#####常数
TITLE=“监控$HOSTNAME的信息”
现在右边=$(日期+%x%r%Z)
TIME\u STAMP=“立即由$USER更新$RIGHT\u”
#清除屏幕
清楚的
echo-e“GEThttp://google.com HTTP/1.0\n\n“| nc google.com 80>/dev/null 2>&1
功能网络信息
{
如果[$?-eq 0];则
回声“在线”
echo“互联网已连接”
其他的
回显“脱机”
echo“INTERNET未连接”
fi
}
#####主要

cat多亏了Jszameister的帮助,当我像那样在函数中移动行时,它就工作了

function net_info
{
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
echo "<h2 style="background-color:#00FF00"><font size="6"> INTERNET IS CONNECTED</h2>"
else
echo "Offline"
echo "<h2 style="background-color:#FF0000"><font size="6"> INTERNET IS NOT CONNECTED</h2>"
fi
}
功能网络信息
{
echo-e“GEThttp://google.com HTTP/1.0\n\n“| nc google.com 80>/dev/null 2>&1
如果[$?-eq 0];则
回声“在线”
echo“互联网已连接”
其他的
回显“脱机”
echo“INTERNET未连接”
fi
}

多亏了Jszameister的帮助,当我像那样在函数中移动行时,它就可以工作了

function net_info
{
echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Online"
echo "<h2 style="background-color:#00FF00"><font size="6"> INTERNET IS CONNECTED</h2>"
else
echo "Offline"
echo "<h2 style="background-color:#FF0000"><font size="6"> INTERNET IS NOT CONNECTED</h2>"
fi
}
功能网络信息
{
echo-e“GEThttp://google.com HTTP/1.0\n\n“| nc google.com 80>/dev/null 2>&1
如果[$?-eq 0];则
回声“在线”
echo“互联网已连接”
其他的
回显“脱机”
echo“INTERNET未连接”
fi
}

这是因为bash中几乎所有的东西都是命令,在执行检查之后,您定义了一个函数——它是成功的,因此状态代码为0。您应该在检查状态之前将检查移到函数中,或者将状态保存在变量中,然后在net_info函数中检查变量。非常感谢,它是有效的。这是因为bash中的几乎所有内容都是命令,在执行检查后,您定义了一个函数,该函数成功,因此状态代码为0。您应该在检查状态之前将检查移动到函数中,或者在变量中保存状态并在net_info函数中检查变量。非常感谢,它可以工作。