9 Contoh Bash Script untuk Memulai Anda di Linux

Diterbitkan: 2022-07-05
Terminal Linux pada layar laptop.
fatmawati achmad zaenuri/Shutterstock.com

Jika Anda memulai dengan skrip Bash di Linux, memahami dasar-dasarnya dengan baik akan membantu Anda. Mereka adalah dasar dari pengetahuan yang lebih dalam dan keterampilan skrip yang lebih tinggi.

Ingat, Jadikan Script Anda Dapat Dieksekusi

Agar shell dapat mengeksekusi skrip, skrip harus memiliki izin file yang dapat dieksekusi yang ditetapkan. Tanpa ini, skrip Anda hanyalah file teks. Dengan itu, ini masih berupa file teks, tetapi shell tahu itu berisi instruksi dan akan mencoba mengeksekusinya ketika skrip diluncurkan.

Inti dari penulisan skrip adalah skrip tersebut dapat dijalankan, jadi langkah dasar pertama adalah mengetahui cara memberi tahu Linux bahwa skrip Anda harus dianggap dapat dieksekusi.

Perintah chmod memungkinkan kita mengatur hak akses file. Izin eksekusi dapat diatur dengan tanda +x.

 chmod +x script1.sh 

Membuat skrip dapat dieksekusi

Anda harus melakukan ini pada setiap skrip Anda. Ganti "script1.sh" dengan nama skrip Anda.

1. Apa Baris Pertama yang Aneh itu?

Baris pertama skrip memberi tahu Shell penerjemah mana yang harus dipanggil untuk menjalankan skrip itu. Baris pertama harus dimulai dengan shebang, “#!”, juga dikenal sebagai hashbang. "#!" memberi tahu Shell bahwa baris ini berisi jalur dan nama juru bahasa yang digunakan untuk menulis skrip.

Ini penting karena jika Anda telah menulis skrip untuk dijalankan di Bash, Anda tidak ingin skrip tersebut ditafsirkan oleh shell yang berbeda. Kemungkinan ada ketidakcocokan. Bash—seperti kebanyakan shell—memiliki sintaksis dan fungsionalitasnya sendiri yang tidak dimiliki shell lain, atau akan diimplementasikan secara berbeda.

Saat Anda menjalankan skrip, shell saat ini membuka skrip dan menentukan shell atau juru bahasa mana yang harus digunakan untuk menjalankan skrip tersebut. Kemudian meluncurkan shell itu dan meneruskan skrip ke sana.

 #!/bin/bash

echo Berjalan di $SHELL

Baris pertama skrip ini dapat dibaca sebagai "Gunakan penerjemah yang terletak di /bin/bash untuk menjalankan skrip ini."

Satu-satunya baris dalam skrip menulis nilai yang disimpan dalam variabel lingkungan $SHELL ke layar terminal. Ini menegaskan bahwa Bash digunakan untuk mengeksekusi skrip.

 ./script1.sh 

Mengidentifikasi shell yang sedang dijalankan skrip

Sebagai sedikit trik ruang tamu, kami dapat menunjukkan bahwa skrip diteruskan ke penerjemah mana pun yang kami pilih.

 #!/bin/kucing
Semua baris teks diteruskan ke perintah cat
dan dicetak di jendela terminal. Itu termasuk
garis shebang.
 script2.sh 

Menjalankan skrip dengan meneruskannya ke perintah cat

Skrip ini diluncurkan oleh shell saat ini dan diteruskan ke perintah cat . Perintah cat "menjalankan" skrip.

Menulis shebangs Anda seperti ini membuat asumsi bahwa Anda tahu di mana shell atau juru bahasa lain berada di mesin target. Dan 99% dari waktu, itu baik-baik saja. Tetapi beberapa orang suka melakukan lindung nilai terhadap taruhan mereka dan menulis shebangs mereka seperti ini:

 #!/usr/bin/env bash

echo Berjalan di $SHELL
 script3.sh 

Menjalankan skrip yang mencari shell

Saat skrip diluncurkan, shell mencari lokasi shell bernama. Jika shell kebetulan berada di lokasi yang tidak standar, jenis pendekatan ini dapat menghindari kesalahan "penerjemah yang buruk".

Jangan Dengar, Dia Berbohong!

Di Linux, selalu ada lebih dari satu cara untuk menguliti kucing atau membuktikan bahwa penulis salah. Agar benar-benar faktual, ada cara untuk menjalankan skrip tanpa shebang, dan tanpa membuatnya dapat dieksekusi.

Jika Anda meluncurkan shell yang ingin Anda jalankan skripnya dan meneruskan skrip sebagai parameter baris perintah, shell akan meluncurkan dan menjalankan skrip— apakah itu dapat dieksekusi atau tidak. Karena Anda memilih shell pada baris perintah, tidak perlu Shebang.

Ini adalah keseluruhan skrip:

 echo "Saya telah dieksekusi oleh" $SHELL

Kami akan menggunakan ls untuk melihat bahwa skrip benar-benar tidak dapat dieksekusi dan meluncurkan Bash dengan nama skrip:

 ls
 skrip bash4.sh 

Menjalankan skrip yang tidak memiliki set izin file yang dapat dieksekusi, dan tidak memiliki shebang

Ada juga cara agar skrip dijalankan oleh shell saat ini , bukan shell yang diluncurkan secara khusus untuk menjalankan skrip. Jika Anda menggunakan perintah source , yang dapat disingkat menjadi satu titik “ . “, skrip Anda dieksekusi oleh shell Anda saat ini.

Jadi, untuk menjalankan skrip tanpa shebang, tanpa izin file yang dapat dieksekusi, dan tanpa meluncurkan shell lain, Anda dapat menggunakan salah satu dari perintah ini:

 sumber script4.sh
 . script4.sh 

Menjalankan skrip di shell saat ini

Meskipun ini mungkin, ini tidak direkomendasikan sebagai solusi umum. Ada kekurangan.

Jika sebuah skrip tidak mengandung shebang, Anda tidak dapat mengetahui untuk shell mana skrip itu ditulis. Apakah Anda akan ingat dalam waktu satu tahun? Dan tanpa izin eksekusi yang ditetapkan pada skrip, perintah ls tidak akan mengidentifikasinya sebagai file yang dapat dieksekusi, juga tidak akan menggunakan warna untuk membedakan skrip dari file teks biasa.

TERKAIT: Baris Perintah: Mengapa Orang Masih Mengganggu Mereka?

2. Mencetak Teks

Menulis teks ke terminal adalah persyaratan umum. Sedikit umpan balik visual sangat membantu.

Untuk pesan sederhana, perintah echo sudah cukup. Ini memungkinkan beberapa pemformatan teks dan memungkinkan Anda bekerja dengan variabel juga.

 #!/bin/bash

echo Ini adalah string sederhana.
echo "Ini adalah string yang berisi 'tanda kutip tunggal' sehingga dibungkus dengan tanda kutip ganda."
echo "Ini mencetak nama pengguna:" $USER
echo -e "Opsi -e memungkinkan kita menggunakan\nperintah pemformatan\nuntuk memisahkan string."
 ./script5.sh 

Sebuah skrip menggunakan perintah echo untuk menulis ke jendela terminal

Perintah printf memberi kita lebih banyak fleksibilitas dan kemampuan pemformatan yang lebih baik termasuk konversi angka.

Script ini mencetak nomor yang sama menggunakan tiga basis numerik yang berbeda. Versi heksadesimal juga diformat untuk dicetak dalam huruf besar, dengan nol di depan dan lebar tiga digit.

 #!/bin/bash

printf "Desimal: %d, Oktal: %o, Heksadesimal: %03X\n" 32 32 32
 ./script6.sh 

Skrip menggunakan printf untuk mengonversi dan memformat angka

Perhatikan bahwa tidak seperti echo , Anda harus memberi tahu printf untuk memulai baris baru dengan token “ \n ”.

3. Membuat dan Menggunakan Variabel

Variabel memungkinkan Anda untuk menyimpan nilai di dalam program Anda dan untuk memanipulasi dan menggunakannya. Anda dapat membuat variabel Anda sendiri atau menggunakan variabel lingkungan untuk nilai sistem.

 #!/bin/bash

millennium_text="Tahun sejak milenium:"

saat_waktu=$( tanggal '+%H:%M:%S' )
hari_tanggal=$( tanggal '+%F' )
tahun=$( tanggal '+%Y' )

echo "Waktu sekarang:" $current_time
echo "Tanggal hari ini:" $todays_date

tahun_sejak_Y2K=$(( tahun - 2000 ))

echo $milenium_text $years_since_Y2K

Skrip ini membuat variabel string yang disebut millennium_text . Ini memegang baris teks.

Ini kemudian menciptakan tiga variabel numerik.

  • Variabel current_time diinisialisasi ke waktu skrip dijalankan.
  • Variabel todays_date diatur ke tanggal skrip dijalankan.
  • Variabel year memegang tahun berjalan.

Untuk mengakses nilai yang disimpan dalam variabel, awali namanya dengan tanda dolar “$.”

 ./script7.sh 

Sebuah skrip yang menggunakan variabel untuk menghitung periode waktu

Script mencetak waktu dan tanggal, kemudian menghitung berapa tahun telah berlalu sejak milenium, dan menyimpannya dalam variabel years_since_Y2K .

Akhirnya, ia mencetak string yang terkandung dalam variabel millennium_text dan nilai numerik yang disimpan dalam years_since_Y2K .

TERKAIT: Cara Bekerja dengan Variabel di Bash

4. Menangani Masukan Pengguna

Untuk mengizinkan pengguna memasukkan nilai yang akan digunakan skrip, Anda harus dapat menangkap input keyboard pengguna. Perintah read Bash memungkinkan ut untuk melakukan hal itu. Berikut adalah contoh sederhana.

 #!/bin/bash

echo "Masukkan angka dan tekan \"Enter\""
baca user_number1;
echo "Masukkan nomor lain dan tekan \"Enter\""
baca user_number2;

printf "Anda memasukkan: %d dan %d\n" $user_number1 $user_number2
printf "Ditambahkan bersama-sama mereka membuat: %d\n" $(( user_number1 + user_number2))

Script meminta dua angka. Mereka dibaca dari keyboard dan disimpan dalam dua variabel, user_number1 dan user_number2 .

Script mencetak angka ke jendela terminal, menambahkannya bersama-sama, dan mencetak totalnya.

 ./script8.sh 

Menangkap input pengguna dengan perintah baca

Kita dapat menggabungkan prompt ke dalam perintah read menggunakan opsi -p (prompt).

 #!/bin/bash

read -p "Masukkan angka dan tekan \"Enter\" " user_number1;
read -p "Masukkan nomor lain dan tekan \"Enter\" " user_number2;

printf "Anda memasukkan: %d dan %d\n" $user_number1 $user_number2
printf "Ditambahkan bersama-sama mereka membuat: %d\n" $(( user_number1 + user_number2))

Hal ini membuat hal-hal lebih rapi dan lebih mudah dibaca. Skrip yang mudah dibaca juga lebih mudah untuk di-debug.

 ./script9.sh 

Menangkap input pengguna dengan perintah baca dan opsi -p (prompt)

Script berperilaku sedikit berbeda sekarang. Input pengguna berada pada baris yang sama dengan prompt.

Untuk menangkap input keyboard tanpa menggemakannya ke jendela terminal, gunakan opsi -s (diam).

 #!/bin/bash

read -s -p "Masukkan PIN rahasia Anda dan tekan \"Enter\" " secret_PIN;

printf "\nSsst ... ini %d\n" $secret_PIN
 ./script10.sh 

Menangkap input pengguna tanpa menulisnya ke jendela terminal

Nilai input ditangkap dan disimpan dalam variabel yang disebut secret_PIN , tetapi tidak digaungkan ke layar saat pengguna mengetiknya . Apa yang Anda lakukan dengan itu setelah itu terserah Anda.

5. Menerima Parameter

Terkadang lebih nyaman untuk menerima input pengguna sebagai parameter baris perintah daripada membiarkan skrip menunggu input. Melewati nilai ke skrip itu mudah. Mereka dapat direferensikan di dalam skrip seolah-olah mereka adalah variabel lain.

Parameter pertama menjadi variabel $1 , parameter kedua menjadi variabel $2 , dan seterusnya. Variabel $0 selalu memegang nama skrip, dan variabel $# menyimpan jumlah parameter yang disediakan pada baris perintah. Variabel $@ adalah string yang berisi semua parameter baris perintah.

 #!/bin/bash

printf "Skrip ini bernama: %s\n" $0
printf "Anda menggunakan %d parameter baris perintah\n" $#

# loop melalui variabel
untuk param di "$@"; melakukan
  gema "$param"
selesai

echo "Parameter 2 adalah:" $2

Script ini menggunakan $0 dan $# untuk mencetak beberapa informasi. kemudian menggunakan ?@ untuk mengulang semua parameter baris perintah. Ini menggunakan $2 untuk menunjukkan cara mengakses satu nilai parameter tertentu.

 ./script11.sh 

Menggunakan parameter baris perintah dengan skrip

Membungkus beberapa kata dalam tanda kutip """ menggabungkannya menjadi satu parameter.

6. Membaca Data Dari File

Mengetahui cara membaca data dari file adalah keterampilan yang bagus untuk dimiliki. Kita bisa melakukan ini di Bash dengan loop sementara.

 #!/bin/bash

Jumlah Baris=0

sementara IFS='' baca -r LinefromFile || [[ -n "${LinefromFile}" ]]; melakukan

  ((Jumlah Baris++))
  echo "Membaca baris $LineCount: ${LinefromFile}"

selesai < "$1"

Kami meneruskan nama file yang ingin diproses skrip sebagai parameter baris perintah. Ini akan menjadi satu-satunya parameter, jadi di dalam skrip $1 akan menyimpan nama file. Kami mengarahkan file itu ke loop while .

Cara Memproses File Baris demi Baris dalam Skrip Bash Linux
TERKAIT Cara Memproses File Baris demi Baris dalam Script Bash Linux

Loop while menyetel pemisah bidang internal ke string kosong, menggunakan penetapan IFS='' . Ini mencegah perintah read dari pemisahan baris pada spasi putih. Hanya carriage return di akhir baris yang dianggap sebagai akhir baris yang sebenarnya.

Klausa [[ -n "${LinefromFile}" ]] memenuhi kemungkinan bahwa baris terakhir dalam file tidak diakhiri dengan carriage return. Bahkan jika tidak, baris terakhir itu akan ditangani dengan benar dan diperlakukan sebagai jalur yang sesuai dengan POSIX biasa.

 ./script12.sh twinkle.txt 

Membaca teks dari file dengan skrip

7. Menggunakan Tes Bersyarat

Jika Anda ingin skrip Anda melakukan tindakan yang berbeda untuk kondisi yang berbeda, Anda perlu melakukan pengujian bersyarat. Sintaks pengujian braket ganda memberikan—pada awalnya—jumlah opsi yang luar biasa.

 #!/bin/bash

harga = $1

jika [[ harga -ge 15 ]];
kemudian
  gema "Terlalu mahal."
kalau tidak
  gema "Beli!"
fi

Bash menyediakan seluruh rangkaian operator perbandingan yang memungkinkan Anda menentukan hal-hal seperti apakah file ada, apakah Anda dapat membaca darinya, apakah Anda dapat menulisnya, dan apakah direktori ada.

Ini juga memiliki tes numerik untuk equals -qe , lebih besar dari -gt , kurang dari atau sama -le , dan seterusnya, meskipun Anda juga dapat menggunakan notasi == , >= , <= yang sudah dikenal.

 ./script13.sh 13
 ./script13.sh 14
 ./script13.sh 15
 ./script13.sh 16 

Menjalankan skrip dengan tes bersyarat

8. Kekuatan untuk Loop

Tindakan berulang-ulang paling baik dilakukan dengan menggunakan loop. A for loop memungkinkan Anda menjalankan loop beberapa kali. Ini mungkin hingga nomor tertentu, atau mungkin sampai loop berhasil melewati daftar item.

 #!/bin/bash

untuk (( i=0; i<=$1; i++ ))
melakukan
  echo "C-style for loop:" $i
selesai

untuk saya di {1.4}
melakukan
  echo "Untuk loop dengan rentang:" $i
selesai

untuk saya di "nol" "satu" "dua" "tiga"
melakukan
  echo "Untuk loop dengan daftar kata:" $i
selesai

situs web = "Cara Geek"

untuk saya di $website
melakukan
  echo "Untuk loop dengan kumpulan kata:" $i
selesai

Semua loop ini adalah for loop, tetapi mereka bekerja dengan berbagai jenis pernyataan dan data loop.

 ./script14.sh 3 

Menjalankan skrip dengan empat jenis for loop yang berbeda

Loop pertama adalah loop for gaya-C klasik. Penghitung loop i diinisialisasi ke nol, dan bertambah dengan setiap siklus loop. Sementara nilai i kurang dari atau sama dengan nilai yang ada di $1 , loop akan terus berjalan.

Loop kedua bekerja melalui rentang angka dari 1 hingga 4. Loop ketiga bekerja melalui daftar kata. Meskipun ada lebih banyak kata yang harus diproses, loop terus berulang.

Loop terakhir bekerja melalui daftar kata dalam variabel string.

9. Fungsi

Fungsi memungkinkan Anda untuk mengenkapsulasi bagian kode ke dalam rutinitas bernama yang dapat dipanggil dari mana saja dalam skrip Anda.

Misalkan kita ingin skrip kita yang membaca baris dari file melakukan semacam pemrosesan pada setiap baris. Akan lebih mudah untuk memiliki kode yang terkandung dalam suatu fungsi.

 #!/bin/bash

Jumlah Baris=0

fungsi count_words() {
  printf "%d kata dalam baris %d\n" $(echo $1 | wc -w) $2
}

sementara IFS='' baca -r LinefromFile || [[ -n "${LinefromFile}" ]]; melakukan

  ((Jumlah Baris++))
  count_words "$LinefromFile" $LineCount

selesai < "$1"

count_words "Ini tidak dalam lingkaran" 99

Kami telah memodifikasi program membaca file kami dengan menambahkan fungsi yang disebut count_words . Itu didefinisikan sebelum kita perlu menggunakannya.

Definisi fungsi dimulai dengan kata function . Ini diikuti dengan nama unik untuk fungsi kita diikuti dengan tanda kurung “ () .” Isi fungsi terdapat dalam tanda kurung kurawal “{}.”

Definisi fungsi tidak menyebabkan kode apa pun dieksekusi. Tidak ada dalam fungsi yang dijalankan sampai fungsi dipanggil.

Fungsi count_words mencetak jumlah kata dalam satu baris teks, dan nomor baris. Kedua parameter ini diteruskan ke fungsi seperti halnya parameter dimasukkan ke dalam skrip. Parameter pertama menjadi variabel fungsi $1 , dan parameter kedua menjadi variabel fungsi $2 , dan seterusnya.

Loop while membaca setiap baris dari file dan meneruskannya ke fungsi count_words , bersama dengan nomor baris. Dan hanya untuk menunjukkan bahwa kita dapat memanggil fungsi dari tempat yang berbeda di dalam skrip, kita memanggilnya sekali lagi di luar loop while .

 ./script15.sh twinkle.txt 

Menjalankan skrip yang menggunakan fungsi

Jangan Takut Kurva Belajar

Scripting bermanfaat dan bermanfaat, tetapi sulit untuk dilakukan. Setelah Anda mendapatkan beberapa teknik yang dapat digunakan kembali di bawah ikat pinggang Anda, Anda akan dapat menulis skrip yang bermanfaat dengan relatif mudah. Kemudian Anda dapat melihat fungsionalitas yang lebih canggih.

Berjalanlah sebelum Anda dapat berlari, dan luangkan waktu untuk menikmati perjalanan.

TERKAIT: 10 Perintah Dasar Linux untuk Pemula