簡體   English   中英

如何將命令 output 復制到 bash 變量中

[英]how to copy command output in to a bash variable

我正在制作一個需要知道 Linux 服務器的 web 接口的 bash 腳本。

我知道我可以使用命令IP aipconfig來歸檔接口

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:3c:20:ec brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic noprefixroute 
       valid_lft 80057sec preferred_lft 80057sec
    inet6 fe80::7888:1c1e:859a:5c75/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

在這個例子中,接口是enp0s3

當然,在每台服務器中,界面都會有所不同,那我該怎么辦呢?

有什么方法可以自動復制這些數據並將其設置為腳本上的變量?

謝謝!

所以經過大量研究,我找到了解決方案

我將使用此命令復制界面

ip a | grep -o -P '(?<=2: ).*(?=:)'

您想知道服務器的“Web 界面”。 我假設您的意思是Web 服務器正在運行的接口。 假設這是一個標准的 web 服務器,使用 HTTP 和 HTTPS 協議的標准端口。 所以你需要知道的第一件事是:是否有任何東西在任何tcp 接口上的這些端口上監聽? 為此,您需要netstat命令:

netstat -na

然后,您可以使用sedgrep過濾此 output 以查找特定模式。 例如:

netstat -na | sed -ne 's/^tcp[6 ]*[0-9]* *[0-9]* *\([0-9.:]*\):\(\(80\|443\)\) .*LISTEN *$/\1 \2/p'

sed正則表達式看起來很復雜,但確實還不錯(如果您願意,我可以提供解釋)。 它應該給你 output 類似於:

0.0.0.0 443
0.0.0.0 80

對於0.0.0.0表示所有接口。 You then have the IP address(es) of all interfaces that are listening for HTTP or HTTP requests, which you can match to the output of the ip or ifconfig commands.

暫無
暫無

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

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