Skrip Bash: awal

Skrip Bash: awal
Skrip Bash Bagian 2: Loop
Skrip Bash, Bagian 3: Opsi dan Sakelar Baris Perintah
Skrip Bash Bagian 4: Input dan Output
Skrip Bash, Bagian 5: Sinyal, Tugas Latar Belakang, Manajemen Skrip
Bash Scripts, Bagian 6: Fungsi dan Pengembangan Perpustakaan
Skrip Bash, Bagian 7: sed dan Pemrosesan Kata
Skrip Bash, bagian 8: bahasa pemrosesan data awk
Skrip Bash Bagian 9: Ekspresi Reguler
Skrip Bash Bagian 10: Contoh Praktis
Skrip Bash, bagian 11: harapan dan otomatisasi utilitas interaktif

Hari ini kita akan berbicara tentang skrip bash. Ini - skrip baris perintah, ditulis untuk bash shell. Ada shell lain seperti zsh, tcsh, ksh, tapi kami akan fokus pada bash. Materi ini ditujukan untuk semua orang, satu-satunya syarat adalah kemampuan untuk bekerja garis komando Linux.

Skrip Bash: awal

Skrip baris perintah adalah kumpulan perintah yang sama yang dapat dimasukkan dari keyboard, dikumpulkan ke dalam file dan disatukan oleh beberapa tujuan yang sama. Dalam hal ini, hasil kerja tim dapat menjadi nilai independen atau menjadi data masukan bagi tim lain. Skrip adalah cara ampuh untuk mengotomatiskan tindakan yang sering dilakukan.

Skrip Bash: awal

Jadi, jika kita berbicara tentang baris perintah, ini memungkinkan Anda menjalankan beberapa perintah sekaligus dengan memasukkannya dipisahkan oleh titik koma:

pwd ; whoami

Faktanya, jika Anda mencobanya di terminal Anda, skrip bash pertama Anda yang melibatkan dua perintah telah ditulis. Ini bekerja seperti ini. Tim dulu pwd menampilkan informasi tentang direktori kerja saat ini, lalu perintah whoamimenunjukkan informasi tentang pengguna yang Anda masuki.

Dengan menggunakan pendekatan ini, Anda dapat menggabungkan perintah sebanyak yang Anda suka dalam satu baris, satu-satunya batasan adalah jumlah maksimum argumen yang dapat diteruskan ke program. Anda dapat menentukan batas ini menggunakan perintah berikut:

getconf ARG_MAX

Baris perintah adalah alat yang hebat, tetapi Anda harus memasukkan perintah ke dalamnya setiap kali Anda membutuhkannya. Bagaimana jika kita menulis serangkaian perintah ke dalam sebuah file dan memanggil file itu untuk mengeksekusinya? Faktanya, file yang sedang kita bicarakan disebut skrip baris perintah.

Cara kerja skrip bash

Buat file kosong menggunakan perintah touch. Baris pertamanya perlu menunjukkan shell mana yang akan kita gunakan. Kami tertarik bash, jadi baris pertama file tersebut adalah:

#!/bin/bash

Baris lain dalam file ini menggunakan simbol hash untuk menunjukkan komentar yang tidak diproses oleh shell. Namun, baris pertama adalah kasus khusus, ada hash yang diikuti dengan tanda seru (urutan ini disebut peristiwa) dan jalur menuju bash, menunjukkan kepada sistem tempat skrip itu dibuat khusus bash.

Perintah shell dipisahkan dengan umpan baris, komentar dipisahkan dengan tanda pagar. Ini adalah tampilannya:

#!/bin/bash
# This is a comment
pwd
whoami

Di sini, seperti pada baris perintah, Anda dapat menulis perintah dalam satu baris, dipisahkan dengan titik koma. Namun, jika Anda menulis perintah pada baris yang berbeda, file akan lebih mudah dibaca. Bagaimanapun, shell akan memprosesnya.

Mengatur izin file skrip

Simpan file tersebut dan beri nama myscript, dan pekerjaan pembuatan skrip bash hampir selesai. Sekarang yang tersisa hanyalah membuat file ini dapat dieksekusi, jika tidak, jika Anda mencoba menjalankannya, Anda akan menemui kesalahan Permission denied.

Skrip Bash: awal
Mencoba menjalankan file skrip dengan izin yang tidak dikonfigurasi dengan benar

Mari kita buat file tersebut dapat dieksekusi:

chmod +x ./myscript

Sekarang mari kita coba menjalankannya:

./myscript

Setelah mengatur izin semuanya berfungsi sebagaimana mestinya.

Skrip Bash: awal
Berhasil menjalankan skrip bash

Keluaran pesan

Untuk menampilkan teks ke konsol Linux, gunakan perintah echo. Mari gunakan pengetahuan tentang fakta ini dan edit skrip kita, tambahkan penjelasan pada data yang dikeluarkan oleh perintah yang sudah ada di dalamnya:

#!/bin/bash
# our comment is here
echo "The current directory is:"
pwd
echo "The user logged in is:"
whoami

Inilah yang terjadi setelah menjalankan skrip yang diperbarui.

Skrip Bash: awal
Mengeluarkan pesan dari skrip

Sekarang kita dapat menampilkan catatan penjelasan menggunakan perintah echo. Jika Anda tidak tahu cara mengedit file menggunakan alat Linux, atau Anda belum pernah melihat perintahnya sebelumnya echo, melihat ini materi.

Menggunakan Variabel

Variabel memungkinkan Anda menyimpan informasi dalam file skrip, seperti hasil perintah, untuk digunakan oleh perintah lain.

Tidak ada yang salah dengan menjalankan perintah individual tanpa menyimpan hasilnya, tetapi pendekatan ini memiliki kemampuan yang sangat terbatas.

Ada dua jenis variabel yang dapat digunakan dalam skrip bash:

  • Variabel Lingkungan
  • Variabel Pengguna

Variabel Lingkungan

Terkadang perintah shell perlu bekerja dengan beberapa data sistem. Berikut ini contoh cara menampilkan direktori home pengguna saat ini:

#!/bin/bash
# display user home
echo "Home for the current user is: $HOME"

Harap dicatat bahwa kita dapat menggunakan variabel sistem $HOME dalam tanda kutip ganda, ini tidak akan menghalangi sistem untuk mengenalinya. Inilah yang Anda dapatkan jika menjalankan skenario di atas.

Skrip Bash: awal
Menggunakan variabel lingkungan dalam skrip

Bagaimana jika Anda perlu menampilkan tanda dolar di layar? Mari kita coba ini:

echo "I have $1 in my pocket"

Sistem akan mendeteksi tanda dolar dalam string yang dikutip dan berasumsi bahwa kita telah mereferensikan suatu variabel. Script akan mencoba menampilkan nilai variabel yang tidak ditentukan $1. Ini bukan yang kita butuhkan. Apa yang harus dilakukan?

Dalam situasi ini, menggunakan karakter escape, garis miring terbalik, sebelum tanda dolar akan membantu:

echo "I have $1 in my pocket"

Skrip sekarang akan menampilkan apa yang diharapkan.

Skrip Bash: awal
Menggunakan urutan escape untuk mencetak tanda dolar

Variabel Pengguna

Selain variabel lingkungan, skrip bash memungkinkan Anda mendefinisikan dan menggunakan variabel Anda sendiri dalam skrip. Variabel tersebut menyimpan nilai hingga skrip menyelesaikan eksekusi.

Seperti halnya variabel sistem, variabel pengguna dapat diakses menggunakan tanda dolar:
TNW-CUS-FMP - kode promo untuk diskon 10% pada layanan kami, tersedia untuk aktivasi dalam 7 hari

#!/bin/bash
# testing variables
grade=5
person="Adam"
echo "$person is a good boy, he is in grade $grade"

Inilah yang terjadi setelah menjalankan skrip tersebut.

Skrip Bash: awal
Variabel Khusus dalam Skrip

Pergantian Perintah

Salah satu fitur skrip bash yang paling berguna adalah kemampuan untuk mengekstrak informasi dari keluaran perintah dan menetapkannya ke variabel, sehingga Anda dapat menggunakan informasi ini di mana saja dalam file skrip.

Ini bisa dilakukan dengan dua cara.

  • Menggunakan tanda centang balik "`"
  • Secara desain $()

Saat menggunakan pendekatan pertama, berhati-hatilah untuk tidak menyertakan satu tanda kutip pun sebagai pengganti tanda centang belakang. Perintah tersebut harus diapit oleh dua ikon berikut:

mydir=`pwd`

Pada pendekatan kedua, hal yang sama ditulis seperti ini:

mydir=$(pwd)

Dan skripnya mungkin akan terlihat seperti ini:

#!/bin/bash
mydir=$(pwd)
echo $mydir

Selama operasinya, output dari perintah pwdakan disimpan dalam sebuah variabel mydir, yang isinya menggunakan perintah echo, akan pergi ke konsol.

Skrip Bash: awal
Script yang menyimpan hasil perintah dalam suatu variabel

Operasi matematika

Untuk melakukan operasi matematika dalam file skrip, Anda dapat menggunakan konstruksi seperti $((a+b)):

#!/bin/bash
var1=$(( 5 + 5 ))
echo $var1
var2=$(( $var1 * 2 ))
echo $var2

Skrip Bash: awal
Operasi Matematika dalam Naskah

konstruksi kontrol jika-maka

Dalam beberapa skenario, Anda perlu mengontrol aliran eksekusi perintah. Misalnya, jika nilai tertentu lebih besar dari lima, Anda perlu melakukan satu tindakan, jika tidak, tindakan lainnya. Ini berlaku dalam banyak situasi, dan di sini struktur kendali akan membantu kita if-then. Dalam bentuknya yang paling sederhana, tampilannya seperti ini:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Berikut ini contoh yang berfungsi:

#!/bin/bash
if pwd
then
echo "It works"
fi

Dalam hal ini, jika perintah dijalankan pwdakan berhasil diselesaikan, teks "berhasil" akan ditampilkan di konsol.

Mari gunakan pengetahuan yang kita miliki dan tulis naskah yang lebih kompleks. Katakanlah kita perlu mencari pengguna tertentu /etc/passwd, dan jika Anda berhasil menemukannya, laporkan bahwa itu ada.

#!/bin/bash
user=likegeeks
if grep $user /etc/passwd
then
echo "The user $user Exists"
fi

Inilah yang terjadi setelah menjalankan skrip ini.

Skrip Bash: awal
ΠΎ ΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Di sini kami menggunakan perintah grepuntuk mencari pengguna dalam file /etc/passwd. Jika tim grepasing bagi Anda, deskripsinya dapat ditemukan di sini.

Dalam contoh ini, jika pengguna ditemukan, skrip akan menampilkan pesan terkait. Bagaimana jika pengguna tidak dapat ditemukan? Dalam hal ini, skrip hanya akan menyelesaikan eksekusi tanpa memberi tahu kami apa pun. Kami ingin dia memberi tahu kami tentang hal ini juga, jadi kami akan menyempurnakan kodenya.

konstruksi kontrol if-then-else

Agar program dapat melaporkan hasil pencarian yang berhasil dan kegagalan, kami akan menggunakan konstruksi if-then-else. Begini cara kerjanya:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
else
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Jika perintah pertama mengembalikan nol, yang berarti berhasil dijalankan, kondisinya akan benar dan eksekusi tidak akan dilanjutkan di sepanjang cabang else. Jika tidak, jika sesuatu selain nol dikembalikan, yang menunjukkan kegagalan, atau hasil yang salah, perintah setelahnya else.

Mari kita tulis skrip berikut:

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
else
echo "The user $user doesn’t exist"
fi

Eksekusinya sia-sia else.

Skrip Bash: awal
Menjalankan skrip dengan konstruksi if-then-else

Baiklah, mari kita lanjutkan dan bertanya pada diri sendiri tentang kondisi yang lebih kompleks. Bagaimana jika Anda perlu memeriksa bukan hanya satu kondisi, tetapi beberapa kondisi? Misalnya, jika pengguna yang diinginkan ditemukan, satu pesan harus ditampilkan, jika kondisi lain terpenuhi, pesan lain harus ditampilkan, dan seterusnya. Dalam situasi seperti ini, kondisi tersarang akan membantu kita. Ini terlihat seperti ini:

if ΠΊΠΎΠΌΠ°Π½Π΄Π°1
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
elif ΠΊΠΎΠΌΠ°Π½Π΄Π°2
then
ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹
fi

Jika perintah pertama mengembalikan nol, yang menunjukkan keberhasilan eksekusi, perintah di blok pertama akan dieksekusi then, sebaliknya, jika kondisi pertama salah dan jika perintah kedua mengembalikan nol, blok kode kedua akan dieksekusi.

#!/bin/bash
user=anotherUser
if grep $user /etc/passwd
then
echo "The user $user Exists"
elif ls /home
then
echo "The user doesn’t exist but anyway there is a directory under /home"
fi

Dalam skrip seperti itu, Anda dapat, misalnya, membuat pengguna baru menggunakan perintah useradd, jika pencarian tidak membuahkan hasil, atau melakukan hal lain yang bermanfaat.

Perbandingan angka

Dalam skrip Anda dapat membandingkan nilai numerik. Di bawah ini adalah daftar perintah yang relevan.

n1 -eq n2Mengembalikan nilai benar jika n1 sama n2.
n1 -ge n2 Mengembalikan nilai benar jika n1lebih atau sama n2.
n1 -gt n2Mengembalikan nilai benar jika n1 lebih baik n2.
n1 -le n2Mengembalikan nilai benar jika n1kurang atau sama n2.
n1 -lt n2Mengembalikan nilai benar jika n1 kurang dari n2.
n1 -ne n2Mengembalikan nilai benar jika n1tidak sama n2.

Sebagai contoh, mari kita coba salah satu operator perbandingan. Perhatikan bahwa ekspresi diapit tanda kurung siku.

#!/bin/bash
val1=6
if [ $val1 -gt 5 ]
then
echo "The test value $val1 is greater than 5"
else
echo "The test value $val1 is not greater than 5"
fi

Inilah yang akan dihasilkan oleh perintah ini.

Skrip Bash: awal
Perbandingan angka dalam skrip

Nilai variabel val1lebih besar dari 5, cabang akhirnya dieksekusi thenoperator perbandingan dan pesan terkait ditampilkan di konsol.

Perbandingan string

Skrip juga dapat membandingkan nilai string. Operator perbandingan terlihat cukup sederhana, tetapi operasi perbandingan string memiliki fitur tertentu, yang akan kita bahas di bawah. Berikut adalah daftar operatornya.

str1 = str2 Menguji string untuk kesetaraan, mengembalikan nilai true jika stringnya identik.
str1 != str2Mengembalikan nilai benar jika string tidak identik.
str1 < str2Mengembalikan nilai benar jika str1kurang dari str2.
str1 > str2 Mengembalikan nilai benar jika str1lebih dari str2.
-n str1 Mengembalikan nilai benar jika panjangnya str1Diatas nol.
-z str1Mengembalikan nilai benar jika panjangnya str1sama dengan nol.

Berikut ini contoh membandingkan string dalam skrip:

#!/bin/bash
user ="likegeeks"
if [$user = $USER]
then
echo "The user $user  is the current logged in user"
fi

Sebagai hasil dari menjalankan skrip, kami mendapatkan yang berikut ini.

Skrip Bash: awal
Membandingkan string dalam skrip

Inilah salah satu fitur perbandingan string yang patut disebutkan. Yaitu, operator ">" dan "<" harus di-escape dengan garis miring terbalik, jika tidak, skrip tidak akan berfungsi dengan benar, meskipun tidak akan muncul pesan kesalahan. Skrip menafsirkan tanda ">" sebagai perintah pengalihan keluaran.

Berikut tampilan kode bekerja dengan operator ini:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Berikut hasil skripnya.

Skrip Bash: awal
Perbandingan string, peringatan diberikan

Harap perhatikan bahwa skrip, meskipun dijalankan, mengeluarkan peringatan:

./myscript: line 5: [: too many arguments

Untuk menghilangkan peringatan ini, kami menyimpulkan $val2 dalam tanda kutip ganda:

#!/bin/bash
val1=text
val2="another text"
if [ $val1 > "$val2" ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Sekarang semuanya berjalan sebagaimana mestinya.

Skrip Bash: awal
Perbandingan string

Fitur lain dari operator ">" dan "<" adalah cara kerjanya dengan karakter huruf besar dan kecil. Untuk memahami fitur ini, mari siapkan file teks dengan konten berikut:

Likegeeks
likegeeks

Mari kita simpan dengan memberinya nama myfile, lalu jalankan perintah berikut di terminal:

sort myfile

Ini akan mengurutkan baris dari file seperti ini:

likegeeks
Likegeeks

Tim sort, secara default, mengurutkan string dalam urutan menaik, yaitu huruf kecil dalam contoh kita lebih kecil dari huruf besar. Sekarang mari kita siapkan skrip yang akan membandingkan string yang sama:

#!/bin/bash
val1=Likegeeks
val2=likegeeks
if [ $val1 > $val2 ]
then
echo "$val1 is greater than $val2"
else
echo "$val1 is less than $val2"
fi

Jika Anda menjalankannya, ternyata yang terjadi sebaliknya - huruf kecil sekarang lebih besar dari huruf besar.

Skrip Bash: awal
Perintah sortir dan membandingkan string dalam file skrip

Dalam perintah perbandingan, huruf besar lebih kecil dari huruf kecil. Perbandingan string di sini dilakukan dengan membandingkan kode ASCII dari karakter, sehingga urutan pengurutannya bergantung pada kode karakter.

Tim sort, pada gilirannya, menggunakan urutan yang ditentukan dalam pengaturan bahasa sistem.

Pemeriksaan berkas

Mungkin perintah berikut ini paling sering digunakan dalam skrip bash. Mereka memungkinkan Anda untuk memeriksa berbagai kondisi mengenai file. Berikut adalah daftar perintah-perintah tersebut.

-d fileMemeriksa apakah suatu file ada dan merupakan direktori.
-e fileMemeriksa apakah file tersebut ada.
-f file Memeriksa apakah suatu file ada dan merupakan file.
-r fileMemeriksa apakah file ada dan dapat dibaca.
-s file ПMemeriksa apakah file tersebut ada dan tidak kosong.
-w fileMemeriksa apakah file ada dan dapat ditulis.
-x fileMemeriksa apakah file tersebut ada dan dapat dieksekusi.
file1 -nt file2 Memeriksa apakah ini lebih baru file1Dari file2.
file1 -ot file2Memeriksa apakah lebih tua file1Dari file2.
-O file Memeriksa apakah file tersebut ada dan dimiliki oleh pengguna saat ini.
-G fileMemeriksa apakah file tersebut ada dan apakah ID grupnya cocok dengan ID grup pengguna saat ini.

Perintah-perintah ini, serta banyak perintah lain yang dibahas hari ini, mudah diingat. Nama mereka, yang merupakan singkatan dari berbagai kata, secara langsung menunjukkan pemeriksaan yang mereka lakukan.

Mari kita coba salah satu perintah dalam praktiknya:

#!/bin/bash
mydir=/home/likegeeks
if [ -d $mydir ]
then
echo "The $mydir directory exists"
cd $ mydir
ls
else
echo "The $mydir directory does not exist"
fi

Skrip ini, untuk direktori yang sudah ada, akan menampilkan isinya.

Skrip Bash: awal
Mendaftar isi direktori

Kami yakin Anda dapat bereksperimen sendiri dengan perintah lainnya; semuanya digunakan berdasarkan prinsip yang sama.

Hasil

Hari ini kita berbicara tentang cara mulai menulis skrip bash dan membahas beberapa hal dasar. Faktanya, topik pemrograman bash sangat besar. Artikel ini adalah terjemahan dari bagian pertama dari serangkaian 11 materi. Jika Anda ingin melanjutkannya sekarang, berikut adalah daftar asli dari bahan-bahan tersebut. Untuk kenyamanan, terjemahan yang baru saja Anda baca disertakan di sini.

  1. Skrip Bash Langkah Demi Langkah β€” di sini kita berbicara tentang cara mulai membuat skrip bash, penggunaan variabel dipertimbangkan, struktur kondisional, perhitungan, perbandingan angka, string, dan mencari informasi tentang file dijelaskan.
  2. Bash Scripting Bagian 2, Bash yang luar biasa β€” di sini fitur bekerja dengan loop for dan while terungkap.
  3. Bash Scripting Bagian 3, Parameter & opsi β€” materi ini dikhususkan untuk parameter baris perintah dan kunci yang dapat diteruskan ke skrip, bekerja dengan data yang dimasukkan pengguna dan dapat dibaca dari file.
  4. Skrip Bash Bagian 4, Input & Output - di sini kita berbicara tentang deskriptor file dan bekerja dengannya, tentang input, output, aliran kesalahan, dan tentang pengalihan output.
  5. Bash Scripting Bagian 5, Desahan & Pekerjaan β€” materi ini dikhususkan untuk sinyal Linux, pemrosesannya dalam skrip, dan peluncuran skrip sesuai jadwal.
  6. Bash Scripting Bagian 6, Fungsi β€” di sini Anda dapat mempelajari cara membuat dan menggunakan fungsi dalam skrip dan mengembangkan perpustakaan.
  7. Bash Scripting Bagian 7, Menggunakan sed β€” artikel ini dikhususkan untuk bekerja dengan editor teks sed streaming.
  8. Bash Scripting Bagian 8, Menggunakan awk β€” materi ini dikhususkan untuk pemrograman dalam bahasa pemrosesan data awk.
  9. Bash Scripting Bagian 9, Ekspresi Reguler β€” di sini Anda dapat membaca tentang penggunaan ekspresi reguler dalam skrip bash.
  10. Bash Scripting Bagian 10, Contoh Praktis β€” berikut adalah teknik untuk menangani pesan yang dapat dikirim ke pengguna, serta metode pemantauan disk.
  11. Bash Scripting Bagian 11, Harapkan Perintah β€” materi ini didedikasikan untuk alat Expect, yang dengannya Anda dapat mengotomatiskan interaksi dengan utilitas interaktif. Secara khusus, kita berbicara tentang skrip yang diharapkan dan interaksinya dengan skrip bash dan program lainnya.

Kami percaya bahwa salah satu fitur berharga dari rangkaian artikel ini adalah, mulai dari yang paling sederhana, cocok untuk pengguna di tingkat mana pun, secara bertahap mengarah ke topik yang cukup serius, memberikan setiap orang kesempatan untuk maju dalam pembuatan skrip baris perintah Linux. .

Pembaca yang budiman! Kami meminta para ahli pemrograman bash untuk berbicara tentang bagaimana mereka mencapai puncak penguasaan mereka, berbagi rahasia mereka, dan kami berharap dapat menerima kesan dari mereka yang baru saja menulis skrip pertama mereka.

Skrip Bash: awal

Hanya pengguna terdaftar yang dapat berpartisipasi dalam survei. Masuk, silakan.

Haruskah saya menerjemahkan rangkaian artikel lainnya?

  • Ya!

  • Tidak, tidak perlu

1030 pengguna memilih. 106 pengguna abstain.

Sumber: www.habr.com

Tambah komentar