我对 Bash 脚本还比较陌生,但我对 Python 和许多 Bash 命令非常熟悉。我想知道是否可以使用诸如ifconfig eno1
并使用输出作为语句中使用的条件的命令if
。基本上,如果您发出:
ifconfig eno1
并且您获得了一个活动 IP,是否有办法将其输出保存到变量中作为 1/0 或 true/false,以便在以下if
语句示例中使用(假设ifoutput
是变量名):
if [ "$ifoutput" == "$True"]
then
echo connection is active!
fi
我考虑过调用一个本质上做同样事情的 Python 脚本,但是我想我会遇到同样的问题;无法从 Python 脚本中获取单个返回值以用于语句if
。请给我建议,请对我宽容一点——正如我所说,我对 Bash 脚本还比较陌生!我已经有使用 Python 严格执行此操作的方法,但是我正在尝试学习更多关于 Bash 脚本的知识。提前谢谢!
答案1
ifconfig
完成时将返回一个 8 位数字值(就像任何干净退出的 *nix 进程一样)。
通常使用零 ( 0
) 表示成功,使用其他值表示失败。此返回代码可用为$?
。
ifconfig
也会输出到stdout
,例如:
eth0 Link encap:Ethernet HWaddr 02:42:ac:14:00:02
inet addr:172.20.0.2 Bcast:172.20.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20430143 errors:0 dropped:0 overruns:0 frame:0
TX packets:20966475 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:46532669457 (46.5 GB) TX bytes:44114090048 (44.1 GB)
如果您尝试确定是否ifconfig eth0
成功(即:权限取决于接口是否存在),那么您可以执行以下操作之一:
ifconfig eth0
if [ $? -eq 0 ]; then
echo yay
fi
if ifconfig eth0; then
echo yay
fi
ifconfig eth0 && echo yay
ifconfig
可以通过附加以下内容来隐藏的输出> /dev/null
:
if ifconfig eth0 > /dev/null; then
echo yay
fi
您询问有关打印返回代码的问题,这对初学者来说是一个难题......
你可以简单地这样做:
ifconfig eth0
echo $?
但是在调用之后echo
,返回码($?
)将是echo
的返回码,而不是ifconfig
的......为了解决这个问题,只需将其分配给一个临时变量:
ifconfig eth0
RET=$?
echo ${RET}
if [ ${RET} -eq 0 ]; then
echo yay
fi
注意:[
是可以评估表达式的内置命令,方括号([
/ ]
)实际上不是if
语法的一部分:
$ help [
[: [ arg... ]
Evaluate conditional expression.
This is a synonym for the "test" builtin, but the last argument must
be a literal `]', to match the opening `['.
如果你真的想获取接口的 IP 地址,那么您可能需要使用管道,如下所示之一(有很多方法可以实现相同的结果):
ifconfig eth0 | grep -Eom1 'inet addr:([0-9]{1,3}\.){3}[0-9]{1,3}' | cut -d: -f2
ifconfig eth0 | sed -re '/inet addr:/!d;s/^[^:]+://;s/ .*$//'