如何使用 Bash 命令(例如“ifconfig”)的返回值作为 Bash 脚本中 if 语句的参数

如何使用 Bash 命令(例如“ifconfig”)的返回值作为 Bash 脚本中 if 语句的参数

我对 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/ .*$//'

相关内容