我写了一个简单的脚本,可以从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。
我该如何解决?
答案 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}