Apa arti ^ $ dan ^ #?

17

Saya tidak mengerti BADIPS=$(egrep -v "^#|^$" $tDB). Bisakah Anda menjelaskannya? kode lengkap:

#!/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
QChí Nguyễn
sumber
1
alternatif grep grep '^[^#]'regex ini harus mengharapkan setidaknya satu char di awal tetapi seharusnya tidak menjadi#
Avinash Raj

Jawaban:

31

^adalah ekspresi reguler karakter khusus yang digunakan untuk menandai awal baris, dan $menandai akhir baris. Mereka terbiasa menambatkan ekspresi pada titik-titik ini. Begitu ^#juga setiap baris yang dimulai dengan #, dan ^$merupakan baris kosong (karena tidak ada apa pun antara awal dan akhir).

-vin grepmeniadakan pertandingan, jadi perintah ini mencari baris yang tidak dikomentari (tidak dimulai dengan #), atau kosong.

muru
sumber
15

egrep mencari file yang cocok dengan suatu pola.

Opsi -v (atau --invert-match) dari egrep membalikkan indra pencocokan, untuk memilih jalur yang tidak cocok.

"^#|^$"mengevaluasi menjadi baris kosong atau baris yang dimulai dengan # yang merupakan baris komentar, yang keduanya tidak dieksekusi oleh bash. Membalikkan pertandingan akan mengevaluasi baris yang bukan baris kosong atau baris komentar.

$tDB adalah variabel yang menyimpan nilai file zona lokal.

Menyatukan semuanya IP buruk (IP yang akan diblokir) disimpan dalam BADIPS yang menyimpan nilai IP buruk yang diperoleh dari daftar file zona lokal.

karel
sumber