Арифметика по переменной, содержащей ip-адрес

У меня переменная

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

Я хочу создать новые переменные:

 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 

Как это сделать?

3 Solutions collect form web for “Арифметика по переменной, содержащей ip-адрес”

Легкий способ состоит в том, чтобы разделить значение на «.». маркеров и выполнить арифметику, снова сведя результат.

С awk (который обрабатывает разделители и т. Д.):

 this_serv=192.168.1.100 next_serv=$(echo $this_serv | awk -F. '{printf "%d.%d.%d.%d", $1,$2,$3,$4-1}') 
 network="198.168.1.254" IFS="." read -rabcd <<< "$network" next_serv="$a.$b.$c.$(($d-1))" echo "$next_serv" 

Вывод:

 198.168.1.253

Использование расширения параметра:

 $ 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 
  • Как узнать содержимое файла XML с помощью Unix Sed / Awk?
  • Редактирование бинарных потоков, содержащих байты '\ x00'
  • Как правильно использовать кавычки в sed?
  • Определение средних значений, stdev, stderror и counts значений в списке
  • Необходимо взять четвертое слово строки и скопировать его в начало строки (sed awk)
  • Найти и заменить с помощью командной строки
  • sed для удаления ведущего 91, если число равно 12 цифрам
  • Удаление лишних пробелов, но не новая строка из csv-файлов
  • Как использовать sed для замены чисел с помощью parenthese?
  • Различия между sed #,%, / и |
  • Замена значений сущности XML положительным обратным знаком
  • Linux и Unix - лучшая ОС в мире.