9 Contoh Bash Script untuk Memulai Anda di Linux
Diterbitkan: 2022-07-05
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
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
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
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
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
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
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
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
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
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
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
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
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
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
.
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
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
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
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
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