2016-12-30 40 views
0

我對Bash的使用經驗很少,但這是我正在嘗試完成的。如何搜索文本文件中的字符串並根據結果執行特定操作

我有兩個不同的文本文件,其中有一堆服務器名稱。在安裝任何Windows更新並重新啓動它們之前,我需要禁用所有的nagios主機/服務警報。

host=/Users/bob/WSUS/wsus_test.txt 
password="my_password" 

while read -r host 
do 
    curl -vs -o /dev/null -d "cmd_mod=2&cmd_typ=25&host=$host&btnSubmit=Commit" "https://nagios.fqdn.here/nagios/cgi-bin/cmd.cgi" -u "bob:$password" -k 
done <wsus_test.txt>> /Users/bob/WSUS/diable_test.log 2>&1 

這是我目前代碼的簡化形式,它按預期工作,但是,我們在一堆地區有服務器。每個服務器名稱前面加上一個基於地區的3字母代碼(即LAX,NYC等)。其次,我們在每個地區都有一臺nagios服務器,因此我需要上面的代碼根據傳入的服務器名稱連接到正確的區域nagios服務器。

我試着將4臺測試服務器添加到文本文件中,加入這樣一行:

if grep lax1 /Users/bob/WSUS/wsus_text.txt; then 
     <same command as above but with the regional nagios server name> 
    fi 

如預期並沒有什麼實際上是禁用/通過API調用啓用這不起作用。再次,我已經做了很少的Bash,所以任何指針將不勝感激。

+1

能否請您粘貼wsus_text.txt幾樣行? – codeforester

+0

哦,它只是FQDN,所以它就像lax1-fs01.company.priv,lax1-ts01.company.priv,nyc1-dc01.company.priv等等。在每一行上分開FQDN。 –

回答

1

從主機名提取區域,並用它在Nagios的網址,例如:

while read -r host; do 
    region=$(cut -f1 -d- <<< "$host") 
    curl -vs -o /dev/null -d "cmd_mod=2&cmd_typ=25&host=$host&btnSubmit=Commit" "https://nagios-$region.fqdn.here/nagios/cgi-bin/cmd.cgi" -u "bob:$password" -k 
done <wsus_test.txt>> /Users/bob/WSUS/diable_test.log 2>&1 
+0

ahhh是有道理的。看起來這應該工作。當我確認它有效時,我會對它進行測試並將其標記爲答案。再次感謝。 –

+1

這工作得很好!謝謝! –

+0

看着日誌,這似乎工作,但是當我運行它對多個服務器的一些工作,有些不。在我的日誌文件中,我看到一條消息,說「*連接#0到主機保持不變」,但我從來沒有看到連接關閉消息。我原本以爲這可能是從一臺服務器跳到另一臺服務器時出現的問題,但我做了一個測試,測試的主機名駐留在同一個nagios服務器上,並且我得到了相同的行爲。有任何想法嗎? –

相關問題