2009-04-16 2 views
0

работа с Cygwin и написание сценария, чтобы показать мой мой текущий адрес IP-минус 2. По какой-то причине он дает мне ошибку follwing: «) синтаксическая ошибка: недопустимый арифметический оператор (маркер ошибки»недействителен арифметический оператор

это сценарий, я использую.

$ cat test3.sh 
#!/bin/bash 
# 
function IPADDRESS { 
    v=$4 
    echo $1.$2.$3.$((v-2)) 
} 
ADDRESS=$(ipconfig | grep Address | cut -f2 -d :) 
# echo $ADDRESS 
IPADDRESS ${ADDRESS//\./ } 

любая помощь или предложение apprieciated!

ответ

4

Вы на самом деле есть несколько проблем с этим сценарием. главным является то, что IPCONFIG будет выводить «\ r "в конце строки, которая наполняет calcu ляционной.

Другое, что вы не разрешаете использовать несколько сетевых адаптеров, следовательно, мое дополнение "head -1". Вам нужно будет выбрать, какой сетевой адаптер вы хотите немного более разумно.

И, наконец, я удалил ведущее пространство (фактически все пробелы) с фронта IP-адреса.

следующие работы для меня:

#!/bin/bash 
#set -x 

function IPADDRESS { 
    ((v = $4 - 2)) 
    echo $1.$2.$3.$v 
} 
ADDRESS=$(ipconfig | grep Address | head -1 | cut -f2 -d: | sed 's/[ \r]//g') 
echo $ADDRESS 
IPADDRESS $ADDRESS 

Выведение:

192.168.91.7 
192.168.91.5 

На самом деле, моя версия выведет следующее:

192.168.91.1 
192.168.91.-1 

так что вам нужно следить за что.

Я не чужой, чтобы выдумать вывод, чтобы произвести впечатление/управление заданиями :-).

ПОЛЕЗНЫЕ SNIPPET:

"set -x" в верхней части сценария (когда не-комментировал) идеально подходит для поиска такого рода ошибок. Он выводит каждую строку после всех замещений, но перед выполнением, чтобы вы могли точно видеть, что происходит.

0

Я пробовал пару различных комбинаций. Следующие работали для меня. Множество -x действительно помогло. Еще раз спасибо.

#!/bin/bash 
#set -x 
function IPADDRESS { 
    v=$4 
echo $1.$2.$3.$((v-2)) 
} 
ADDRESS=$(ipconfig | grep Address | head -1 | cut -f2 -d: | sed 's/[ \r]//g') 
IPADDRESS ${ADDRESS//\./} 
Смежные вопросы