Aritmética na variável contendo endereço IP

3

Eu tenho variável

network="198.168.1.x"  # for ex. 198.168.1.254

Eu quero criar novas variáveis:

next_serv="198.168.1.(x-1)"  # for ex. 198.168.1.253
max_host="198.168.1.(x-2)"   # for ex. 198.168.1.252

Como fazer isso?

    
por micholeodon 28.11.2015 / 23:27

3 respostas

4

A maneira mais fácil é dividir o valor no "." marcadores e fazer a aritmética, juntando o resultado novamente.

Com o awk (que lida com delimitadores e assim por diante):

this_serv=192.168.1.100
next_serv=$(echo $this_serv | awk -F. '{printf "%d.%d.%d.%d", $1,$2,$3,$4-1}')
    
por 28.11.2015 / 23:34
5
network="198.168.1.254"
IFS="." read -r a b c d <<< "$network"
next_serv="$a.$b.$c.$(($d-1))"
echo "$next_serv"

Saída:

198.168.1.253
    
por 28.11.2015 / 23:34
0

Usando a expansão de parâmetros:

$ network="198.168.1.254"                      
$ next_serv="${network%.*}.$((${network##*.} - 1))"
$ max_host="${network%.*}.$((${network##*.} - 2))"

$ echo "$next_serv"
198.168.1.253
$ echo "$max_host" 
198.168.1.252
    
por 29.11.2015 / 03:44

Tags