Как получить только IP-адрес из nmblookup для использования в скрипте Bash?

521
jonathanbell

Если я сделаю:

nmblookup myServerName 

Я получил:

192.168.6.106 myservername<00> 

Поскольку я хочу использовать IP-адрес, возвращаемый nmblookup myServerNameв скрипте Bash, я хотел бы знать, как лучше всего вернуть только IP-адрес, а не myservername<00>часть строки. Я просмотрел документацию по nmblookup, но не могу найти вариант, который бы мне помог.

1
Чтобы быть более точным: `nmblookup server | awk '/ ^ [0-9] + / ' ` Alex 7 лет назад 0

1 ответ на вопрос

2
Eugen Rieck

Возможно, вы захотите добавить некоторые более строгие проверки, включая проверку исправности, так как nmblookup может завершиться неудачей, если myServerName не работает:

RES=$(nmblookup myServerName 2>/dev/null) if test "$?" != "0"; then echo "nmblookup failed" # Do something exit 10 fi  IP1=$(echo "$RES" | sed 's/^\([0-9]*\)\..*/\1/') IP1=$(printf '%d' "$IP1" 2>/dev/null) test -z "$IP1" && IP1=256  IP2=$(echo "$RES" | sed "s/^$IP1\\.\\([0-9]*\\)\\..*/\\1/") IP2=$(printf '%d' "$IP2" 2>/dev/null) test -z "$IP2" && IP2=256  IP3=$(echo "$RES" | sed "s/^$IP1\\.$IP2\\.\\([0-9]*\\)\\..*/\\1/") IP3=$(printf '%d' "$IP3" 2>/dev/null) test -z "$IP3" && IP3=256  IP4=$(echo "$RES" | sed "s/^$IP1\\.$IP2\\.$IP3\\.\\([0-9]*\\).*/\\1/") IP4=$(printf '%d' "$IP4" 2>/dev/null) test -z "$IP4" && IP4=256  OK=1 test $IP1 -gt 255 && OK=0 test $IP2 -gt 255 && OK=0 test $IP3 -gt 255 && OK=0 test $IP4 -gt 255 && OK=0 if test "$OK" != "1"; then echo "nmblookup talking garbage" # Do something exit 11 fi 
Да спасибо! Это было моим следующим препятствием (поскольку я все еще изучаю Баш). Ваш ответ великолепен. Теперь, чтобы прочитать о `` `test```! Кажется удобным и сложным. http://ss64.com/bash/test.html jonathanbell 7 лет назад 0