LINUX.ORG.RU

shell + битовые операции.


0

0

У меня есть ip адрес - например 192.168.93.15. Мне надо его привести к hex-виду - т. е. получить c0a85d0f, затем применить AND маску - например 000f0fff и получить 00080d0f, затем применить OR маску - например 0000a010 и получить в результате 8ad1f.

И надо это сделать в шеле - например через awk - я взглянул в man awk - он вроде поддерживает битовые операции.

anonymous

#!/bin/bash

ip="192.168.93.15"
and_msk="0x000f0fff"
or_msk="0x0000a010"

hex_ip=`printf "0x%2.2x%2.2x%2.2x%2.2x" \`echo $ip | sed 's/\./\ /g'\``
printf "$hex_ip\n"
printf "0x%8.8x\n" $(($hex_ip & $and_msk))
printf "0x%8.8x\n" $(($hex_ip & $and_msk | $or_msk))

legk
()
Ответ на: комментарий от legk

а вообще интересно, как это сделать в стандартном шелле.. И expr оказывается не умеет побитовые операции..

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

>Я имел в виду сделать в bash-е

Не нужны: hex вид, sed, awk, cut.

addr() {
  local IFS=. a=0 i
  for i in $1 ; do 
    a=$((a*256+i))
  done
  echo $a
}
echo $(($(addr 192.168.93.15) & $(addr 0.15.15.255))) 
и т.д.

DonkeyHot ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.