grep ルーティングテーブルとコマンドの実行

grep ルーティングテーブルとコマンドの実行

ルーティングテーブルの特定のパスをgrepし、検索結果に基づいてコマンドを実行するスクリプトをLinuxシステムで作成しようとしています。これが私が今まで持っているものですが、うまくいきません。

#!/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

おすすめ記事