Shell-Script

Ping 主機,檢查是否存活,並通過 shell 腳本將結果發送到文件

  • April 16, 2019

為了清除我的自定義hosts文件並刪除 Windows 上的死域,我從 ping 主機domains.txt,如果收到回复,我將該主機添加到result.txt

@echo off

>result.txt (
   for /f %%i in (domain.txt) do ping -n 1 %%i >nul && echo 127.0.0.1 %%i
)

誰能幫助我通過 Linux shell 腳本實現相同的功能?

Funceble https://github.com/funilrys/funceble是我今天推薦使用的最佳工具。

$ ./funceble -f domain.txt

Domain                                      Status      Expiration Date   Source     Analyse Date        
------------------------------------------- ----------- ----------------- ---------- --------------------
google.com                                  ACTIVE      14-sep-2020       WHOIS      Tue Sep 25, 06:30:43 
stackexchange.com                           ACTIVE      12-jun-2018       WHOIS      Tue Sep 25, 06:30:44 
zhnixomknxkm.com                            INACTIVE    Unknown           NSLOOKUP   Tue Sep 25, 06:30:45 
kvfjjyrlsphr.info                           INACTIVE    Unknown           NSLOOKUP   Tue Sep 25, 06:30:46 
adblockplus.org                             ACTIVE      09-jun-2018       WHOIS      Tue Sep 25, 06:30:47

Status      Percentage   Numbers
----------- ------------ -------------
ACTIVE      60%          3
INACTIVE    40%          2
INVALID     0%           0

如果你正在使用bash,你可以試試這個簡短的腳本:

#!/bin/bash
while IFS= read -r host; do
   [[ $(ping -c4 "$host") ]] 2>/dev/null && echo "$host" >> /path/to/result.txt
done < /path/to/domains.txt

在這裡,我假設其中的主機domains.txt是換行符分隔的。

編輯:

這是修改後的腳本,ping詳細(摘要)並假設目錄/path/to/directory/包含文件domains-01.txtdomains-02.txt

#!/bin/bash
for file in /path/to/directory/domains-*.txt; do
   while IFS= read -r host; do
       ping -qc4 "$host" && echo "$host" >> /where/to/save/result.txt
   done < "$file"
done

如果您想要暫停-恢復行為,請查看SIGTSTP/SIGSTOPSIGCONT可以使用類似命令發出的信號kill,例如,如果程序的 PID 為 2773,則:

暫停:kill -TSTP 2773,恢復:kill -CONT 2773

引用自:https://unix.stackexchange.com/questions/197162