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: .

관련 정보