Cómo utilizar el valor de retorno de un comando Bash como "ifconfig" para usarlo como argumento para una declaración if en un script Bash

Cómo utilizar el valor de retorno de un comando Bash como "ifconfig" para usarlo como argumento para una declaración if en un script Bash

Soy relativamente nuevo en las secuencias de comandos Bash, pero estoy muy familiarizado con Python y muchos comandos Bash. Me preguntaba si es posible usar un comando como ifconfig eno1y usar la salida como condición para usar en una ifdeclaración. Básicamente, si emite:

 ifconfig eno1

y obtienes una IP activa, ¿hay alguna forma de guardar la salida de esa en una variable como 1/0 o verdadero/falso, para usarla en el siguiente ifejemplo de declaración (suponiendo ifoutputque sea el nombre de la variable):

 if [ "$ifoutput" == "$True"]

 then 
         echo connection is active! 
 fi

Pensé en posiblemente llamar a un script de Python que haga esencialmente lo mismo, sin embargo, estaba pensando que me encontraría con el mismo problema; No hay forma de obtener un valor de retorno individual del script de Python para usarlo en la ifdeclaración. Por favor, avíseme y sea amable conmigo. Como dije, soy relativamente nuevo en las secuencias de comandos Bash. Ya tengo métodos para hacer esto usando Python estrictamente, sin embargo, estoy tratando de aprender más sobre las secuencias de comandos Bash. ¡Gracias de antemano!

Respuesta1

ifconfigdevolverá un valor numérico de 8 bits cuando se complete (como cualquier proceso *nix que finalice limpiamente).

Normalmente 0se utiliza cero ( ) para indicar éxito y otro valor para indicar fracaso. Este código de retorno está disponible como $?.

ifconfigtambién generará salida a stdout, por ejemplo:

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)

Si está intentando determinar si ifconfig eth0tuvo éxito (es decir, según los permisos, la interfaz existe), puede realizar una de las siguientes acciones:

ifconfig eth0
if [ $? -eq 0 ]; then
  echo yay
fi
if ifconfig eth0; then
  echo yay
fi
ifconfig eth0 && echo yay

ifconfigSe puede ocultar la salida de agregando > /dev/null:

if ifconfig eth0 > /dev/null; then
  echo yay
fi

Preguntaste acerca de imprimir el código de retorno y esto es un problema para principiantes...

Simplemente puedes hacer esto:

ifconfig eth0
echo $?

Pero después de llamar a echo, el código de retorno ( $?) será echoel código de retorno de 's, no ifconfigel de'... Para lidiar con eso, simplemente asígnalo a una variable temporal:

ifconfig eth0
RET=$?
echo ${RET}
if [ ${RET} -eq 0 ]; then
  echo yay
fi

Nota: [es un comando integrado que puede evaluar expresiones; las llaves cuadradas ( [/ ]) en realidad no forman parte de la ifsintaxis:

$ 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 `['.

Si realmente estás intentandoobtener la dirección IP de una interfaz, entonces es posible que desees utilizar una canalización, como una de las siguientes (hay muchas formas de lograr el mismo resultado):

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

información relacionada