^ $ और ^ # का क्या मतलब है?


17

मुझे समझ नहीं आ रहा है BADIPS=$(egrep -v "^#|^$" $tDB)। क्या आप इसे समझा सकते हैं? पूरा कोड:

#!/bin/bash
# Purpose: Block all traffic from AFGHANISTAN (af) and CHINA (CN). Use ISO code. #
# See url for more info - http://www.cyberciti.biz/faq/?p=3402
# Author: nixCraft <www.cyberciti.biz> under GPL v.2.0+
# -------------------------------------------------------------------------------
ISO="af cn" 

### Set PATH ###
IPT=/sbin/iptables
WGET=/usr/bin/wget
EGREP=/bin/egrep

### No editing below ###
SPAMLIST="countrydrop"
ZONEROOT="/root/iptables"
DLROOT="http://www.ipdeny.com/ipblocks/data/countries"

cleanOldRules(){
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT
}

# create a dir
[ ! -d $ZONEROOT ] && /bin/mkdir -p $ZONEROOT

# clean old rules
cleanOldRules

# create a new iptables list
$IPT -N $SPAMLIST

for c  in $ISO
do 
    # local zone file
    tDB=$ZONEROOT/$c.zone

    # get fresh zone file
    $WGET -O $tDB $DLROOT/$c.zone

    # country specific log message
    SPAMDROPMSG="$c Country Drop"

    # get 
    BADIPS=$(egrep -v "^#|^$" $tDB)
    for ipblock in $BADIPS
    do
       $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG"
       $IPT -A $SPAMLIST -s $ipblock -j DROP
    done
done

# Drop everything 
$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST

# call your other iptable script
# /path/to/other/iptables.sh

exit 0

1
वैकल्पिक grep grep '^[^#]'इस रेगेक्स को शुरू में कम से कम एक चार की उम्मीद करनी चाहिए, लेकिन यह एक नहीं होना चाहिए#
अविनाश राज

जवाबों:


31

^एक नियमित अभिव्यक्ति विशेष चरित्र है जिसका उपयोग लाइन की शुरुआत को चिह्नित करने के लिए किया जाता है, और लाइन $के अंत को चिह्नित करता है। वे लंगर कर रहे हैं इन बिंदुओं पर अभिव्यक्ति । तो ^#किसी भी लाइन के साथ शुरू हो रहा है #, और ^$एक खाली लाइन है (क्योंकि शुरू और अंत के बीच कुछ भी नहीं है)।

-vgrepमैच को उपेक्षित करता है, इसलिए यह कमांड उन पंक्तियों की तलाश में है, जिन पर टिप्पणी नहीं की गई है (साथ शुरू नहीं #), या खाली।


15

egrep एक पैटर्न से मेल खाती फ़ाइलों के लिए खोज।

-v (या--invert-match egrep उलट का) विकल्प मिलान की भावना, न खाने वाले लाइनों का चयन करने के लिए।

"^#|^$"या तो एक रिक्त रेखा या एक पंक्ति का मूल्यांकन करता है, जो कि # के साथ शुरू होती है जो एक टिप्पणी लाइन है, जिसमें से किसी को भी बैश द्वारा निष्पादित नहीं किया जाता है। मैच का इनवर्टर उन रेखाओं का मूल्यांकन करता है जो या तो रिक्त लाइनें या टिप्पणी लाइनें नहीं हैं।

$tDB एक वैरिएबल है जो स्थानीय ज़ोन फ़ाइल का मान संग्रहीत करता है।

यह सब एक साथ खराब आईपी (ब्लॉक किए जाने वाले आईपी) को BADIPS में संग्रहीत किया जाता है जो खराब ज़ोन के मूल्यों को स्थानीय ज़ोन फ़ाइलों की सूची से प्राप्त करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.