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 eno1
y usar la salida como condición para usar en una if
declaració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 if
ejemplo de declaración (suponiendo ifoutput
que 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 if
declaració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
ifconfig
devolverá un valor numérico de 8 bits cuando se complete (como cualquier proceso *nix que finalice limpiamente).
Normalmente 0
se utiliza cero ( ) para indicar éxito y otro valor para indicar fracaso. Este código de retorno está disponible como $?
.
ifconfig
tambié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 eth0
tuvo é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
ifconfig
Se 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á echo
el código de retorno de 's, no ifconfig
el 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 if
sintaxis:
$ 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/ .*$//'