Bash scripting para um laboratório

0

Fazendo uma aula escrevendo um script bash para diagnósticos.

o bit em que estou completamente preso é como capturar apenas uma linha específica e um segmento de texto nessa linha.

IE: se eu fizer um ifconfig

 [user@localhost ~]$ ifconfig
 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.88.140  netmask 255.255.255.0  broadcast 192.168.88.255
        inet6 fe80::fbaa:d42c:24db:dca7  prefixlen 64  scopeid 0x20
        ether 00:0c:29:bc:c1:4d  txqueuelen 1000  (Ethernet)

Gostaria que o bash capturasse a linha 2 da coluna 12 a 27 para o endereço ipv4 em uma $ string, e continuasse a fazer o mesmo para netmask, broadcast, mac address e ipv6 address / cidr ...
também faça o mesmo para obter quaisquer servidores de nomes no arquivo resolve.conf.

Eu, naturalmente, tenho que repetir isso para cada interface ...

A menos que alguém possa recomendar uma maneira melhor de fazer isso.

Eu também estou querendo saber se existe uma maneira que eu possa inserir uma $ string para o arquivo ifcfg-ens33 para mudar o endereço IP (e todo o resto) ou será melhor recriar completamente o arquivo?

eu acho que com essa informação eu deveria ser capaz de fazer o resto da prac com bastante facilidade

EDITAR: Eu posso ver que eu preciso fazer algo com campos, mas eu posso descobrir como fazer isso só fazer o campo 2 da linha 2 em $ ipv41

EDIT2: Eu vim com isso depois de mais ler. mas eu não consigo fazer a saída entrar nas variáveis até agora. tentou echo, printf, & gt ;, > & gt ;, > > >

#import settings from ip command
#discover interface type into string
/sbin/ip -o -4 addr show up primary scope global| awk '{print $2}' | echo > 
$if1

#discover interface ipaddress by interface type into strings
/sbin/ip -o -4 addr show $if1 | awk '{print $4}' | echo > $ipv4
/sbin/ip -o -4 addr show $if1 | awk '{print $6}' | echo > $bast
/sbin/ip -o -4 addr show $if1 | awk '{print $9}' | echo > $dhcp
/sbin/ip -o -6 addr show $if1 | awk '{print $4}' | echo > $ipv6

#print discovered info to screen
echo -e "---- Interface     = $if1"
echo -e "---- DHCP Enabled?   $dhcp"
echo -e "---- IPv4 Address  = $ipv4"
echo -e "---- Broadcast     = $bast"
    
por random australian 26.04.2018 / 04:42

2 respostas

1

Bem, há sempre head , tail e cut , mas isso pode ser mais fácil:

echo 'ifconfig wlo1' | 
{ read a b c d e inet f netmask g broadcast h inet6 i ; echo $inet $inet6 ; }

Saída:

192.168.1.120 fe80::b400:3b2e:a40a:9f19

Notas:

  • read nomeia e define as variáveis de uma só vez. As a b c d e etc. são variáveis fictícias usadas para absorver a ifconfig de saída indesejada.

  • Assim que o } é executado, as variáveis deixam de existir. Então coloque qualquer código que use essas variáveis antes do } .

por 26.04.2018 / 07:49
0

Tente isto:

ifconfig -a | tr -s ' ' | awk -F ' ' '{if (/^[a-z]/) printf  $1 " "} {if (/inet /) print " " $3" "$5" "$7} {if (/ether/) print " " $2"}'

Espero que você não esteja usando centos / rhel. compartilhe sua saída completa de ifconfig . o que me ajudará a dar o código exato

    
por 26.04.2018 / 08:29

Tags