GNU/Linux >> Belajar Linux >  >> Linux

Shell Scripting Part4 – Input, Output, dan Redirection

Di posting sebelumnya, kami berbicara tentang parameter dan opsi secara rinci. Hari ini, kita akan berbicara tentang sesuatu yang penting dalam skrip shell, yaitu Input, Output, dan Redirection.

Anda dapat menampilkan output dari skrip shell dengan dua cara:

  • Menampilkan keluaran di layar.
  • Kirim keluaran ke file.

Descriptor file standar

Semuanya adalah file di Linux, dan itu termasuk input dan output.

Setiap proses dapat membuka sembilan deskriptor file secara bersamaan. Deskriptor file 0, 1, 2 disimpan untuk penggunaan bash shell.

0             STDIN.

1             STDOUT.

2             STDERR.

Anda dapat menggunakan deskriptor file di atas untuk mengontrol input dan output.

Anda harus sepenuhnya memahami ketiganya karena mereka seperti tulang punggung skrip shell Anda. Jadi kami akan menjelaskan semuanya secara detail.

STDIN

STDIN adalah singkatan dari input standar, yang merupakan keyboard secara default.

Anda dapat mengganti STDIN, yang merupakan keyboard dan menggantinya dengan file menggunakan simbol pengalihan input (<), yang mengirimkan data sebagai pengetikan keyboard. Tidak ada sihir!!

Saat Anda mengetik perintah cat tanpa apa-apa, ia menerima input dari STDIN. Setiap baris yang Anda ketik, perintah cat akan mencetak baris tersebut ke layar.

STDOUT

STDOUT adalah singkatan dari output standar, yang merupakan layar secara default.

Anda dapat mengarahkan output ke file menggunakan simbol>>.

Jika kami memiliki file yang berisi data, Anda dapat menambahkan data ke dalamnya menggunakan simbol seperti ini:

pwd >> myfile

Output yang dihasilkan oleh pwd ditambahkan ke myfile tanpa menghapus konten yang ada.

Perintah berikut mencoba mengarahkan output ke file menggunakan simbol>.

ls –l xfile > myfile

Saya tidak memiliki file bernama xfile di PC saya, dan itu menghasilkan kesalahan yang dikirim ke STDERR.

STDERR

Shell mengirimkan kesalahan ke layar secara default.

Jika Anda perlu mengarahkan kesalahan ke file log alih-alih mengirimkannya ke layar, Anda dapat mengalihkan kesalahan menggunakan simbol pengalihan.

Kesalahan pengalihan

Kita dapat mengarahkan kesalahan dengan menempatkan deskriptor file yang 2 sebelum simbol pengalihan seperti ini:

ls -l xfile 2>myfile
cat ./myfile

Seperti yang Anda lihat, kesalahan sekarang ada di file dan tidak ada di layar.

Mengarahkan kesalahan dan keluaran normal

Untuk mengarahkan kesalahan dan output normal, Anda harus mendahului masing-masing dengan deskriptor file yang tepat seperti ini:

ls –l myfile xfile anotherfile 2> errorcontent 1> correctcontent

Hasil perintah ls dikirim ke file konten yang benar menggunakan 1> simbol. Dan pesan kesalahan dikirim ke file errorcontent menggunakan 2> simbol.

Anda dapat mengalihkan keluaran dan kesalahan normal ke file yang sama menggunakan &> simbol seperti ini:

ls –l myfile xfile anotherfile &> content

di sini, kami mengarahkan kesalahan dan output normal ke file bernama konten.

Pengalihan keluaran

Ada dua cara untuk pengalihan output:

  • Pengalihan sementara.
  • Pengalihan permanen.

Pengalihan sementara

Untuk pengalihan sementara, Anda dapat menggunakan simbol>&2 seperti ini:

#!/bin/bash

echo "Error message" >&2

echo "Normal message"

Jadi jika kita menjalankannya, kita akan melihat kedua baris tercetak secara normal karena, seperti yang kita ketahui, kesalahan masuk ke layar secara default.

Anda dapat mengarahkan kesalahan ke file seperti ini:

./myscript 2> myfile

Skrip Shell Luar Biasa! Output normal dikirim ke layar, sedangkan pesan echo yang memiliki simbol>&2 mengirimkan error ke file.

Pengalihan permanen

Jika Anda memiliki banyak data yang perlu dialihkan, Anda dapat memiliki pengalihan permanen menggunakan perintah exec seperti ini:

#!/bin/bash

exec 1>outfile

echo "Permanent redirection"

echo "from a shell to a file."

echo "without redirecting every line"

Jika kita melihat file bernama outfile, kita akan melihat output dari baris echo.

Kita redirect STDOUT di awal, bagaimana kalau di tengah script seperti ini:

#!/bin/bash

exec 2>myerror

echo "Script Begining ..."

echo "Redirecting Output"

exec 1>myfile

echo "Output goes to the myfile"

echo "Output goes to myerror file" >&2

Perintah exec mengarahkan semua kesalahan ke file myerror, dan kami mengirim output standar ke layar.

Kami menggunakan pernyataan exec 1>myfile untuk mengarahkan output ke file myfile, dan terakhir, kesalahan masuk ke file myerror menggunakan simbol>&2.

Mengalihkan masukan

Anda dapat mengarahkan input ke file alih-alih STDIN menggunakan perintah exec seperti ini:

exec 0< myfile

Perintah ini memberi tahu shell untuk mengambil input dari file bernama myfile alih-alih STDIN dan berikut adalah contohnya:

#!/bin/bash

exec 0<testfile

total=1

while read line; do

	echo "#$total: $line"

	total=$(($total + 1))

done

Pembuatan skrip shell itu mudah.

Anda tahu cara menggunakan perintah baca untuk mendapatkan input pengguna. Jika Anda mengarahkan STDIN ke file, perintah read akan mencoba membaca dari STDIN, yang menunjuk ke file.

Beberapa administrator sistem Linux menggunakan teknik ini untuk membaca file log untuk diproses, dan kami akan membahas lebih banyak cara untuk membaca log pada posting mendatang secara profesional.

Membuat pengalihan khusus

Anda tahu bahwa ada sembilan deskriptor file, Anda hanya menggunakan 3 di antaranya untuk input, output, dan error.

Enam deskriptor file yang tersisa tersedia untuk digunakan untuk pengalihan input dan output.

Kita dapat menggunakan perintah exec untuk menetapkan deskriptor file untuk output seperti ini:

#!/bin/bash

exec 3>myfile

echo "This line appears on the screen"

echo "This line stored on myfile" >&3

echo "This line appears on the screen"

Membuat deskriptor file input

Untuk mengarahkan ulang deskriptor file input lakukan hal berikut:

1-  Simpan STDIN ke deskriptor file lain.

2- Mengarahkannya ke file.

3- Kembalikan STDIN ke lokasi aslinya.

Lihat kode berikut untuk memahami langkah-langkah ini:

#!/bin/bash

exec 7<&0

exec 0<myfile

total=1

while read line; do

	echo "#$total: $line"

	total=$(($total + 1))

done

exec 0<&7

read -p "Finished? " res

case $res in

y) echo "Goodbye" ;;

n) echo "Sorry, this is the end." ;;

esac

Kami menyimpan STDIN ke deskriptor file 7, dan mengarahkan STDIN ke file.

STDIN dikembalikan ke lokasi aslinya setelah mengulangi baris file.

Perintah baca terakhir hanya untuk memastikan bahwa STDIN dikembalikan, dan Anda dapat menggunakan keyboard secara normal.

Tutup deskriptor file

Ketika skrip keluar, deskriptor file akan ditutup secara otomatis. Jika Anda ingin menutup sendiri deskriptor file, arahkan deskriptor file ke simbol ini &- itu akan ditutup.

#!/bin/bash

exec 3> myfile

echo "Testing ..." >&3

exec 3>&-

echo "Nothing works" >&3

Seperti yang Anda lihat, ini memberikan kesalahan deskriptor file yang buruk karena tidak ada lagi.

lsof Command

Perintah lsof digunakan untuk mencantumkan semua file yang dibuka pada sistem dan proses latar belakang.

Pada banyak sistem Linux seperti Fedora, perintah lsof terletak di bawah /usr/sbin.

Ini adalah beberapa opsi penting untuk perintah lsof:

-p:untuk ID proses.

-d:untuk deskriptor file.

Anda bisa mendapatkan PID proses menggunakan variabel $$.

Kita dapat menggunakan -a untuk menggabungkan hasil dari opsi -p dan opsi -d.

Sekarang, uji perintah dari skrip:

#!/bin/bash

exec 4> myfile1

exec 5> myfile2

exec 6< myfile3

lsof -a -p $$ -d 0,1,2,4,5,6

Skrip shell membuat deskriptor file 4 dan 5 untuk menulis dan 6 untuk membaca.

Menekan keluaran perintah

Terkadang Anda tidak ingin melihat output apa pun. Kami mengarahkan output ke lubang hitam, yaitu /dev/null .

Misalnya, kita dapat menekan kesalahan seperti ini:

ls -al badfile anotherfile 2> /dev/null

Anda dapat memotong file tanpa menghapusnya sepenuhnya menggunakan perintah yang sama.

cat /dev/null > myfile

Sekarang Anda memahami input, output, cara mengarahkan ulang, cara membuat deskriptor file, dan mengarahkan ulang ke sana.

Saya harap Anda menikmatinya. Terus kembali.

Terima kasih.


Linux
  1. Baca dan tulis data dari mana saja dengan pengalihan di terminal Linux

  2. Cara Mengarahkan Output ke File dan Stdout di Linux

  3. Deskriptor File &Skrip Shell?

  1. Pengalihan Io Dan Perintah Kepala?

  2. Output perintah dialihkan ke file dan terminal

  3. Salin dan timpa file dalam skrip shell

  1. Bekerja dengan Input Output dan Error Redirection di Linux

  2. Redirect Dan Output Pipa?

  3. Bagaimana Mendapatkan Input Dan Output Di Terminal Ke File Teks??