#bash
#bash
Вопрос:
Я хочу изменить последний бит IP-адреса.
IP=10.10.10.10
echo $ip |cut -d"." -f1-3
Отобразится « 10.10.10
»
Я хочу включить « .0
«
Комментарии:
1. Изменение последнего бита приведет к его изменению на
.11
(ORing или XORing a1
)2. Извините за путаницу, я должен был упомянуть последнее значение, я думаю.
3. @RajGowda Стандартным термином для частей адреса IPv4 является » октет » (поскольку он состоит из 8 бит).
Ответ №1:
Попробуйте:
$ ip=10.10.10.10
$ echo "${ip%.*}.0"
10.10.10.0
-
${ip%.*}
удаляет последнюю точку и цифры после нее. -
.0
добавляет.0
в конец строки. -
Этот подход использует только оболочку, что делает его быстрее, чем методы, требующие конвейера.
-
Лучше всего использовать нижний или смешанный регистр для ваших переменных. Система использует все переменные верхнего уровня, и вы не хотите случайно перезаписать одну из них.
Комментарии:
1. @RajGowda Пожалуйста, поставьте зеленую галочку рядом с ответом, чтобы будущие посетители знали, что этот ответ сработал для вашего варианта использования.
Ответ №2:
XOR на 1 (Bash 4 для расширения параметра):
ipv4_address="${ipv4_address%.*}.$(( ${ipv4_address##*.} ^ 1 ))"
Ответ №3:
Это сделает это в bash:
ip="10.10.10.10"
x=`echo $ip|cut -d "." -f1-3`
echo "$x.0"
Комментарии:
1. Это и глючно, и неэффективно по сравнению с ответом John1024. Re: «ошибка», см. BashPitfalls # 14 ; если бы у вас было
IFS=.
, например,echo $ip
было бы изменение всех.
s на пробелы. Re: «неэффективно», имейте в виду, что все подстановки команд и конвейеры требуютfork()
отключения подпроцессов, а затем для запускаcut
требуетсяexec
совершенно другой исполняемый файл в пространстве памяти.