Não trabalhe em loop no bash

1

Eu escrevi script no bash. Tem toda a lista de interfaces. E em loop tem comparado com variável. Mas isso não funciona bem. Meu script:

#!/bin/bash

search='ls -1 /sys/class/net | grep -v lo'
echo $search

eth=eno1
echo $eth

for i in $search; do
if [ $i == $eth ]; then
echo "You choose is: $i"
else
echo "not found"
fi
done

Em resultado eu tive:

dummy0 eno1 enp4s0 virbr0 virbr0-nic
eno1
not found
You choose is: eno1
not found
not found
not found

Está tudo bem. Eu quero, para obter uma mensagem "Você escolhe é: eno1". Se $ eth não contém em "/ sys / class / net", eu quero receber a mensagem "não encontrado". Onde eu tenho engano? Por favor ajude. Obrigado.

    
por Piduna Valeriu 15.11.2016 / 12:24

1 resposta

1

substitua o loop inteiro por uma declaração if:

if [[ "$eth" =~ "$search" ]];then
    echo "You choose is: $eth"
else
    echo "not found"
fi

E todo o script de uma forma muito compacta:

#!/bin/bash
eth=eno1
if [ -d /sys/class/net/$eth ];then
    echo "You choose is: $eth"
else
    echo "not found"
fi
    
por 15.11.2016 / 12:28