Como usar o valor de retorno de um comando Bash como "ifconfig" para ser usado como argumento para uma instrução if no script Bash

Como usar o valor de retorno de um comando Bash como "ifconfig" para ser usado como argumento para uma instrução if no script Bash

Sou relativamente novo em scripts Bash, mas estou muito familiarizado com Python e muitos comandos Bash. Fiquei me perguntando se é possível usar um comando como ifconfig eno1e usar a saída como uma condição a ser usada em uma ifinstrução. Basicamente, se você emitir:

 ifconfig eno1

e você obtém um IP ativo, existe alguma maneira de salvar a saída disso em uma variável como 1/0 ou verdadeiro/falso, para ser usado no ifexemplo de instrução a seguir (assumindo ifoutputque seja o nome da variável):

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

 then 
         echo connection is active! 
 fi

Pensei em possivelmente chamar um script Python que fizesse essencialmente a mesma coisa, mas estava pensando que encontraria o mesmo problema; não sendo possível obter um valor de retorno individual do script Python para ser usado na ifinstrução. Por favor, informe e vá com calma comigo - como eu disse, sou relativamente novo em scripts Bash! Já tenho métodos para fazer isso estritamente usando Python, mas estou tentando aprender mais sobre scripts Bash. Desde já, obrigado!

Responder1

ifconfigretornará um valor numérico de 8 bits quando for concluído (como qualquer processo *nix que saia corretamente).

Normalmente, zero ( 0) é usado para indicar sucesso e outro valor é usado para indicar falha. Este código de retorno está disponível como $?.

ifconfigtambém produzirá para stdout, por exemplo:

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)

Se você está tentando determinar se ifconfig eth0foi bem-sucedido (ou seja: as permissões dependem da existência da interface), você pode fazer o seguinte:

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

A saída de Hiding ifconfigpode ser obtida anexando um > /dev/null:

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

Você perguntou sobre como imprimir o código de retorno, e isso é uma pegadinha para iniciantes...

Você pode simplesmente fazer isso:

ifconfig eth0
echo $?

Mas depois de chamar on echo, o código de retorno ( $?) será echoo código de retorno de ', não ifconfigde '... Para lidar com isso, basta atribuí-lo a uma variável temporária:

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

Nota: [é um comando integrado que pode avaliar expressões, os colchetes ( [/ ]) não fazem parte da ifsintaxe:

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

Se você está realmente tentandoobter o endereço IP de uma interface, convém usar um pipeline, como um dos seguintes (há muitas maneiras de obter o mesmo 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/ .*$//'

informação relacionada