簡體   English   中英

需要將結果寫入變量

[英]Need to write result to variable

我需要將此continues輸出的結果寫入文件,但不要使用此命令顯示結果:

tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g' 

僅使用此命令輸出結果(不帶“ sed”):

tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}'

而且,是否可以進行任何循環來存儲和顯示3個變量?

echo "${requested-ip} | ${client-id} | ${hostname}"

腳本是:

tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g' | while read b; do
requested-ip=`echo $b | head -1`
cliend-id=`echo $b | tail -2 | head -1`
hostname=`echo $b | tail -2 | tail -1`
echo "${requested-ip} | ${client-id} | ${hostname}"
done

與此沒有任何輸出。 不明白,因為添加了while和sed無法運行它

這是沒有管道grepawk的完整輸出:

[root@PIDORA ~]# tcpdump -lni eth0 -vvv -s 0 port bootps
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:49:36.019930 IP (tos 0x0, ttl 255, id 22335, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.bootpc > 255.255.255.255.bootps: [udp sum ok] BOOTP/DHCP, Request from 98:9e:63:57:9d:1e, length 300, xid 0xfefa864b, Flags [none] (0x0000)
      Client-Ethernet-Address 98:9e:63:57:8d:1e
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: Request
        Parameter-Request Option 55, length 7: 
          Subnet-Mask, Classless-Static-Route, Default-Gateway, Domain-Name-Server
          Domain-Name, Option 119, Option 252
        MSZ Option 57, length 2: 1500
        Client-ID Option 61, length 7: ether 98:9e:63:57:8d:1e
        Requested-IP Option 50, length 4: 10.0.1.16
        Lease-Time Option 51, length 4: 7776000
        Hostname Option 12, length 7: "iGPhone"
        END Option 255, length 0
        PAD Option 0, length 0, occurs 13

這是我的輸出。 如果把這個我得到一些結果:

[root@PIDORA tmp]# tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
98:9e:63:57:8d:1e
10.0.1.16
"iGPhone"

但是,如果我添加了解析器“ | sed's /” /// g'”,則看不到任何內容:

[root@PIDORA tmp]# tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g'
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

最后我把for和結果是一樣的。 沒有結果。

[root@PIDORA tmp]# for b in $( tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' | awk '{print $NF}' | sed 's/"//g'); do
>   echo $b
> done

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes

在發布完整的tcpdump輸出后,我編輯了答案。

請注意,初始腳本中存在幾個問題:

  • 您的GNU / Bash變量名稱中不能包含“-”
  • 你寫cliend-ID(用“d”在客戶端),以及客戶端ID在另一條線

這是滿足您需求的一種工作方式:

#!/bin/bash

for rawInfo in $( tcpdump -lni eth0 -vvv -s 0 port bootps | grep --line-buffered -E -i 'requested-ip|client-id|hostname' |sort | awk '{print $NF}' | sed 's/"//g;s/$/,/' |tr -d '\n' ); do
  requestedip=$( echo "$rawInfo" |awk -F ',' '{print $1}' )
  hostname=$( echo "$rawInfo" |awk -F ',' '{print $2}' )
  clientid=$( echo "$rawInfo" |awk -F ',' '{print $3}' )
  echo "$requestedip | $clientid | $hostname"
done

注意:如果可以在其中一個值中添加','(不應...),則應使用另一個分隔符。

讓我知道您是否需要其他說明。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM