grep 路由表 & 执行命令

grep 路由表 & 执行命令

我正在尝试在我的 Linux 机器上制作一个脚本,它将 grep 查找路由表中的特定路由,并根据查找结果执行命令。这是我到目前为止所拥有的,但它不起作用:

#!/bin/bash
LOGFILE=/root/check/logfile.log
LOGTIME=`date "+%Y-%m-%d %H:%M:%S"`
route -n | grep -v grep | grep 192.168.38.2 > /dev/null
if grep -q 192.168.38.2 >/dev/null
then
     echo "$LOGTIME : 192.168.38.2: Does not exist - OK.." >> $LOGFILE 2>&1
else
    echo "$LOGTIME : 192.168.38.2 : Exist - Updating routing table." >> $LOGFILE 2>&1 | echo "$LOGTIME : 192.168.38.2 : Exist - Updating routing table."
    ip route delete 192.168.34.0/24 via 192.168.38.2
    ip route add 192.168.34.0/24 via 192.168.38.5 dev tun0
fi

答案1

您的脚本存在几个问题。

要使用 grep 执行简单的通过/失败检查,请考虑以下习语:

fail=$(route -n | grep -q '192.168.38.2'; echo $?)

然后像这样测试命令的结果:

if [ "$fail" -ne 0 ]; then
    # Handle failure
else
    # Handle success
fi

这个习语可以简化为:

if [ $(route -n | grep -q '192.168.38.2'; echo $?) ] then
    ...

或者

route -n | grep -q '192.168.38.2'
if [ "$?" ]; then
    ...

但是,我建议花时间了解您正在运行的命令,而不是仅仅复制您不理解的内容(例如grep -v grep)。

相关内容