GNU/Linux >> Belajar Linux >  >> Linux

Skrip Bash:Cara membaca data dari file teks

Sesuatu yang saya suka di Linux (dan di sistem mirip Unix pada umumnya) adalah konfigurasi dan properti yang terkandung dalam file teks. Ini memungkinkan administrator dengan izin yang tepat untuk memeriksa file dan membuat perubahan jika diperlukan. File teks juga merupakan sumber data yang sederhana dan nyaman untuk operasi khas sysadmin. Dalam situasi tertentu, Anda dapat menggunakan file teks sebagai output untuk dibagikan dengan pengguna biasa juga. Saya membahas contoh kedua kasus dalam artikel ini.

Catatan :Menulis ke stdout dan membaca dari stdin menggunakan pipa seperti menggunakan file teks virtual. Dalam banyak kasus, Anda melakukannya memiliki file teks, tetapi di tempat lain, Anda cukup menggunakan output dari beberapa perintah sebelumnya seolah-olah itu adalah file teks.

[ Anda mungkin juga menikmati: 8 perintah Linux praktis favorit saya ]

Jadi, kapan Anda harus menggunakan satu metode atau yang lain? Nah, dalam beberapa kasus, file teks sudah ada, seperti /etc/hosts berkas, misalnya. Dalam kasus lain, Anda tidak perlu memiliki file yang ditulis secara fisik karena Anda hanya tertarik pada hasilnya (dan struktur datanya sangat sederhana). Skenario yang berbeda mungkin mengharuskan Anda menyimpan informasi ke file karena alasan seperti kejelasan, pemecahan masalah, pengauditan, atau kemampuan menganalisis struktur informasi dan jenis konten lain yang ada di sana.

Periksa jangkauan dan resolusi nama untuk daftar server

Misalkan Anda memiliki daftar mesin baru dan perlu memverifikasi bahwa mesin tersebut:

  1. Dapat dijangkau dari server Anda
  2. Membuat resolusi nama berfungsi untuk mereka
  3. Mendengarkan di port 22 (untuk SSH)

Anda juga perlu melaporkan status ke tim proyek yang harus Anda kirimkan dalam format spreadsheet. Jika Anda bekerja dengan lusinan server dan Anda perlu mengulangi pengujian ini pada hari yang berbeda, sangat berguna untuk memikirkan cara otomatis untuk melakukannya.

File masukan

Ini adalah spreadsheet tempat saya mendapatkan file CSV (comma-separated value) yang digunakan dalam contoh berikut.

Dan ini adalah file CSVnya:

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

(Mengonversi spreadsheet ke/dari CSV dilakukan secara manual dan tidak akan dibahas dalam artikel ini.)

Skrip

Berikut skrip yang saya gunakan untuk menguji server:

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

Item baris berikut menjelaskan entri skrip di atas:

Baris 6: Inisialisasi file keluaran dengan header dan tiga bidang baru untuk menunjukkan status keterjangkauan melalui ping dan resolusi nama

Baris 8: Baca file input baris demi baris menggunakan while loop, mengabaikan baris pertama (header). Itu juga membuat variabel untuk host dan ip, mengekstrak nilai menggunakan pemisah (koma) dan mengabaikan sisanya.

Baris 10 hingga 26: Jalankan pingnslookup , dan nc perintah, mengirimkan output ke null karena kami hanya tertarik pada status pengembalian dari perintah

Baris 28: Kirim output ke stdout untuk orang yang menjalankan skrip

Baris 29: Kirim data ke file output dengan tiga kolom baru (ping_status, dns_status, dan ssh_status)

Buka file keluaran sebagai spreadsheet

Kirim file output ke workstation di mana Anda dapat membukanya di aplikasi spreadsheet favorit Anda. Jika Anda mengirimkan ini ke orang non-teknis, Anda mungkin ingin menyimpannya dalam format spreadsheet default yang digunakan di perusahaan untuk mempermudah hidup mereka.

[ Lembar contekan gratis:Dapatkan daftar utilitas dan perintah Linux untuk mengelola server dan jaringan. ] 

Menutup

Dalam artikel ini, saya menerapkan beberapa alat umum dan sederhana yang tersedia di semua sistem Linux untuk mengotomatiskan pengujian keterjangkauan, resolusi nama, dan konektivitas melalui SSH. Di beberapa proyek, validasi jenis ini harus dilakukan untuk lusinan server dan diulang beberapa kali karena proses perubahan yang melibatkan tim lain (Jaringan dan Firewall, misalnya).

Prinsip-prinsipnya dapat diperluas ke jenis tes lainnya. Misalnya, Anda dapat menguji konektivitas untuk port yang berbeda. Jika pengujian menjadi lebih kompleks, seperti menjalankan perintah di host jika dapat dijangkau melalui SSH , maka Anda sedang menghadapi jenis masalah yang berbeda, yang memerlukan alat yang berbeda. Dan untuk situasi seperti itu, saya sangat menyarankan Anda melihat Ansible.


Linux
  1. Bagaimana Cara Memindahkan 100 File Dari Folder Yang Berisi Ribuan?

  2. Bagaimana Cara Membaca Variabel Dari File?

  3. Bagaimana membedakan biner dari file teks di linux

  1. Jalankan file teks sebagai perintah di Bash

  2. Bagaimana cara membaca baris terakhir file teks menjadi variabel menggunakan Bash?

  3. Bagaimana cara mengekstrak teks dari file besar, mulai dari kemunculan pertama string?

  1. Cara Menambahkan Nomor Baris Ke File Teks Di Linux

  2. Bagaimana mencegah dan memulihkan dari penghapusan file yang tidak disengaja di Linux

  3. Buat Data Pembacaan Teks Dari File?