如何在Bash中的算术表达式中使用字符串

时间:2019-07-18 16:20:15

标签: linux bash shell unix

我写了一个简单的脚本,可以从openstack中获取CDIR格式的IP。该行如下所示:

cidr="10.62.149.62/27"

我使用awk仅隔离IP,然后最后一次使用awk将“ 27”存储在名为POOL_SIZE的变量中。

#!/bin/bash
NETWORK=$1
POOL=$( openstack subnet show --insecure $NETWORK -f shell|grep -w "cidr"|awk -F '"' '{print $2}'|awk -F '/' '{print $2}')

现在,我希望能够从27中减去1以获得值26并存储到另一个变量中。

POOL_SIZE=$(( $POOL - 1 ))
echo $POOL_SIZE

但是,当我执行此脚本时,会得到以下输出:

- 1 ")syntax error: invalid arithmetic operator (error token is "

如果我回显$POOL,则会得到以下输出:

27

因此,我认为在“ 27”之后有一个字符,例如\r\n引起了问题。

因此,我希望能够去除那些多余的字符并从27中减去1。

我该如何解决?

1 个答案:

答案 0 :(得分:3)

拥有网络后,您可以使用以下地址删除地址

prefix_size=${cidr#*/}

并用{p>剥离openstack输出的所有尾随回车符

prefix_size=${prefix_size%$'\r'}

$'\r'是bash扩展,因此在其他受限制的POSIX shell中,您可以改用tr

prefix_size=$(echo "$prefix_size" | tr -d '\r')

或者,将回车符保存到变量一次,以备后用:

cr=$(printf '\r')
...
prefix_size=${prefix_size%$cr}