我想添加一条ip路由,以防它不存在。为此,我执行以下操作:
set -e
output=$(ip route | cut -d" " -f1 | grep $ip_range)
if [ -z "$output" ]; then
ip route add $ip_range dev br-int
fi
然而,正如我所知,如果grep找不到任何东西,它会以状态1退出,因为set -e而结束了脚本。我考虑过使用:
set +e
在执行grep的行之前的(注意在set -e和执行grep的行之间有代码,但为了简单起见我删除了它)。但是,我认为这有点难看。还有另一种方式吗?
答案 0 :(得分:2)
删除set -e
并使用grep -q
:
if ! ip route | cut -d " " -f1 | grep -q "$ip_range"; then
ip route add $ip_range dev br-int
fi
ip_route
可能会失败,因此您可以使用:
set -o pipefail
if ! ip route | cut -d " " -f1 | grep -q "$ip_range"; then
ip route add $ip_range dev br-int
fi
答案 1 :(得分:1)
只需使用最终返回0的命令。
$ output=$(ip route | cut -d" " -f1 | grep $ip_range ; exit 0) ; echo $?
0
答案 2 :(得分:0)
您可以使用$(ip route | cut -d" " -f1 | (grep $ip_range || true))
。这是在子shell中运行grep
并使用||
(或)运行命令,如果grep存在非零,在本例中为true
,以便整个子shell返回零。
答案 3 :(得分:0)
grep
和cut
的更好替代方法是在awk
使用awk
,因为0
将返回output=$(ip route | awk -v ip_range="${ip_range}" '$1==ip_range{print $1}')
,无论是否打印过某些内容:
Sybase.AdoNet4.AseClient.dll