算术运算符无效

时间:2009-04-16 01:58:35

标签: math cygwin

使用cygwin并编写脚本来显示我当前的ip地址减去2.由于某种原因,它给了我以下错误:“)语法错误:无效算术运算符(错误标记为”

这是我正在使用的脚本。

$ 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//\./ }

任何帮助或建议都是适用的!

2 个答案:

答案 0 :(得分:4)

你真的遇到了一些问题。主要的一点是ipconfig将在行尾输出“\ r”字符,这会影响计算。

另一个原因是您不允许使用多个NIC,因此添加了"head -1"。您需要更智能地选择想要的NIC。

最后,我从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"(未注释时)非常适合查找这些类型的错误。它在所有替换之后但在执行之前输出每一行,以便您可以确切地看到正在发生的事情。

答案 1 :(得分: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//\./}