awk 構文エラー 予期しない新しい行または文字列の終わり

awk 構文エラー 予期しない新しい行または文字列の終わり

これ /usr/sbin/conntrack -L |grep $1 | grep ESTAB |grep 'dport=80' | awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80");}"

この出力を提供します
awk: cmd. line:2: {system(/usr/sbin/conntrack awk: cmd. line:2: ^ unexpected newline or end of string

これをデバッグする必要があります。

答え1

あなたのawkスクリプト:

awk "{system("/usr/sbin/conntrack -D --orig-src $1 --orig-dst" substr($6,5) "-p tcp --orig-port-src " substr($7,7)" --orig-port-dst 80")}"

このスクリプトには引用の問題があります。

スクリプトは二重引用符で囲まれており、二重引用符も使用されます。内部二重引用符が原因で問題が発生する可能性があります。

解決策はスクリプトを一重引用符で囲むことです(シェルが解釈されないように、スクリプトはawk常に一重引用符で囲む必要があります)。$0

awk '{system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'

grep実行中の最後の2つの呼び出しをスクリプトにawk簡単に移動することもできます。

awk '/ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80");}'

もう少し努力すれば、最初のものも手に入ります。

awk -v arg1="$1" 'match($0, arg1) && /ESTAB/ && /dport=80/ {system("/usr/sbin/conntrack -D --orig-src " $1 " --orig-dst " substr($6,5) " -p tcp --orig-port-src " substr($7,7) " --orig-port-dst 80")}'

答え2

$1ソースIPアドレス(スクリプトの最初のパラメータ)、元の宛先ポート80、およびstatusのconntrack TCPエントリを削除する場合は、次のようにしますESTABLISHED

conntrack -D -s "$1" -p tcp --dport 80 --state ESTABLISHED

すでに述べた問題に加えて、あなたの方法はdport=8080行を、またはdport=80次のように一致させます。返信する目的地。 inはスクリプトの最初の引数ではなく、拡張された行の最初のフィールドになります$1。また、正規表現演算子として(を使用してもすべての文字と一致しますが、そうではありません)。"--orig-src " $1awkgrep 10.1.1.410.1.1.4010.101.4.5grep -w.言葉特徴)。

アイテムを直接フィルタリングできない場合は、次のことをお勧めしますconntrack

conntrack -L | SRC=$1 awk '
  $1 == "tcp" && \
  $4 == "ESTABLISHED" && \
  $5 == "src=" ENVIRON["SRC"] && \
  $8 == "dport=80" {
    dst = substr($6, 5)
    sport = substr($7, 7)
    system("conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport)
  }'

または、sh削除する各項目に対してコマンド(1つだけを除くconntrack)を実行しないでください。

conntrack -L | SRC=$1 awk '
  $1 == "tcp" && \
  $4 == "ESTABLISHED" && \
  $5 == "src=" ENVIRON["SRC"] && \
  $8 == "dport=80" {
    dst = substr($6, 5)
    sport = substr($7, 7)
    print "conntrack -D -s \"$SRC\" -d "dst" --dport 80 --sport "sport
  }' | sh

関連情報