GNU/Linux >> Znalost Linux >  >> Linux

Bash skriptování:Jak číst data z textových souborů

Na Linuxu (a obecně v systémech podobných Unixu) se mi líbí, že konfigurace a vlastnosti jsou obsaženy v textových souborech. To umožňuje správci se správnými oprávněními prozkoumat soubory a v případě potřeby provést změny. Textové soubory jsou také jednoduchými a pohodlnými zdroji dat pro typické operace správce systému. V určitých situacích můžete jako výstup použít textové soubory sdílet i s běžnými uživateli. Příklady obou případů uvádím v tomto článku.

Poznámka :Zápis do stdout a čtení z stdin použití potrubí je jako použití virtuálního textového souboru. V mnoha případech děláte mít textový soubor, ale v jiných jednoduše použijete výstup nějakého předchozího příkazu, jako by to byl textový soubor.

[ Mohlo by se vám také líbit: Mých 8 oblíbených praktických příkazů pro Linux ]

Kdy byste tedy měli použít jednu nebo druhou metodu? V některých případech již textový soubor existuje, například /etc/hosts soubor, například. V ostatních případech nemusíte mít soubor fyzicky zapsaný, protože vás zajímá pouze výsledek (a datová struktura je opravdu jednoduchá). Různé scénáře mohou vyžadovat uložení informací do souboru z důvodů, jako je srozumitelnost, řešení problémů, auditování nebo schopnost analyzovat strukturu informací a další typy obsahu, který tam je.

Zkontrolujte dostupnost a překlad názvů u seznamu serverů

Předpokládejme, že máte seznam nových počítačů a potřebujete ověřit, že:

  1. Jsou dosažitelné z vašeho serveru
  2. Aby jim fungovalo rozlišení jmen
  3. Poslouchají na portu 22 (pro SSH)

Stav musíte také nahlásit projektovému týmu, který musíte odeslat ve formátu tabulky. Pokud pracujete s desítkami serverů a potřebujete tyto testy opakovat v různé dny, určitě je užitečné přemýšlet o automatizovaném způsobu, jak toho dosáhnout.

Vstupní soubor

Toto je tabulka, ze které jsem získal soubor CSV (hodnota oddělená čárkami) použitý v následujících příkladech.

A toto je soubor CSV:

ServerName,IP
m2.example.com,192.168.2.99
xtower.example.com,192.168.2.111
win2k16.example.com,192.168.101.41
control.example.com,192.168.101.200
node1.example.com,192.168.101.201
node2.example.com,192.168.101.202
node3.example.com,192.168.101.203
node4.example.com,192.168.101.204
node5.example.com,192.168.101.205

(Převod tabulky do/z CSV byl proveden ručně a tento článek se jím nebude zabývat.)

Skript

K testování serverů používám následující skript:

1     #!/bin/bash
2     
3     input_file=hosts.csv
4     output_file=hosts_tested.csv
5     
6     echo "ServerName,IP,PING,DNS,SSH" > "$output_file"
7     
8     tail -n +2 "$input_file" | while IFS=, read -r host ip _
9     do
10        if ping -c 3 "$ip" > /dev/null; then
11            ping_status="OK"
12        else
13            ping_status="FAIL"
14        fi
15    
16        if nslookup "$host" > /dev/null; then
17            dns_status="OK"
18        else
19            dns_status="FAIL"
20        fi
21    
22        if nc -z -w3 "$ip" 22 > /dev/null; then
23            ssh_status="OK"
24        else
25            ssh_status="FAIL"
26        fi
27    
28        echo "Host = $host IP = $ip" PING_STATUS = $ping_status DNS_STATUS = $dns_status SSH_STATUS = $ssh_status
29        echo "$host,$ip,$ping_status,$dns_status,$ssh_status" >> $output_file
30    done

Následující řádkové položky vysvětlují výše uvedené položky skriptu:

Řádek 6: Inicializujte výstupní soubor se záhlavím a třemi novými poli, které budou reprezentovat stav dosažitelnosti pomocí ping a rozlišení názvu

Řádek 8: Čtěte vstupní soubor řádek po řádku pomocí while smyčka, ignorující první řádek (záhlaví). Vytváří také proměnné pro hostitele a ip, přičemž hodnoty extrahuje pomocí oddělovače (čárky) a zbytek ignoruje.

Řádky 10 až 26: Spusťte pingnslookupnc příkazy, odesílání výstupu na null, protože nás zajímá pouze návratový stav z příkazů

Řádek 28: Odešlete výstup do stdout osobě spouštějící skript

Řádek 29: Odešlete data do výstupního souboru se třemi novými sloupci (ping_status, dns_status a ssh_status)

Otevřete výstupní soubor jako tabulku

Odešlete výstupní soubor na pracovní stanici, kde jej můžete otevřít ve své oblíbené tabulkové aplikaci. Pokud to posíláte netechnickým lidem, možná budete chtít uložit to ve výchozím formátu tabulky používaném ve společnosti, abyste jim usnadnili život.

[ Bezplatný cheat:Získejte seznam linuxových nástrojů a příkazů pro správu serverů a sítí. ] 

Sbalit

V tomto článku jsem použil některé běžné a jednoduché nástroje, které jsou k dispozici na všech systémech Linux, k automatizaci testu dostupnosti, rozlišení názvů a konektivity přes SSH. V některých projektech by tento typ ověření musel být proveden pro desítky serverů a mnohokrát opakován kvůli procesům změn, které zahrnují jiné týmy (například síť a firewall).

Principy lze rozšířit na další typy testů. Můžete například otestovat připojení pro jiný port. Pokud se testy stanou složitějšími, například spusťte příkaz na hostiteli, pokud je dostupný přes SSH , pak řešíte jiný typ problému, který vyžaduje jiný nástroj. A pro takovou situaci důrazně doporučuji, abyste se podívali na Ansible.


Linux
  1. Jak rozeznat binární soubory od textových souborů v linuxu

  2. Jak odstraním nové řádky z textového souboru?

  3. Spusťte textový soubor jako příkazy v Bash

  1. Jak přesunout 100 souborů ze složky obsahující tisíce?

  2. Vytvořit data pro čtení textu ze souboru?

  3. Jak extrahovat text z velkého souboru počínaje prvním výskytem řetězce?

  1. Jak číst proměnnou ze souboru?

  2. Jak načíst poslední řádek textového souboru do proměnné pomocí Bash?

  3. Jak zobrazit určité řádky z textového souboru v Linuxu?