- Shell Scripting
- Referensi
Pemrograman shell adalah menyusun beberapa perintah shell (internal maupun eksternal) menjadi serangkaian perintah untuk melakukan tugas tertentu.
Pemrograman shell di Unix/Linux juga disebut dengan shell scripting. Untuk memudahkan, shell script dapat disimpan ke dalam sebuah file yang dapat dieksekusi kapanpun kita inginkan.
Manfaat belajar shell scripting:
-
Dapat bekerja secara efektif dan efisien karena tidak perlu mengetik serangkaian perintah secara berulang-ulang, cukup menulis dan mengeksekusi satu file saja
-
Dapat menjalankan beberapa perintah sebagai satu perintah
-
Dapat menjalankan perintah secara otomatis
-- insert common knowledge here --
Ada beberapa karakter yang cukup penting untuk digunakan dalam shell:
- Redirection (mengirim output ke file atau menerima input dari file) menggunakan operator redirect >, >>, <, contoh:
ls /home/Documents > test.txt
#hasil output ls dari directori /home/Documents dikirim ke file test.txt. jika file belum ada akan dibuat, tetapi jika sudah ada, isinya akan ditimpa
ls /home/Documents >> test.txt
#hampir sama, bedanya jika file sudah ada maka isinya akan ditambah di akhir file
sort < test.txt
#file test.txt dijadikan input oleh perintah sort
- Pipe (output suatu perintah menjadi input perintah lain) menggunakan operator |, contoh:
ls -l | sort -s
#ouput perintah ls -l menjadi input perintah sort -s (urutkan secara descending)
- Wildcard menggunakan karakter *, ?, [ ], contoh:
ls a*
#tampilkan semua file yang dimulai dengan a
ls a?a
#tampilkan file yang dimulai dengan a, kemudian sembarang karakter tunggal, dan diakhiri dengan a
ls [re]*
#tampilkan file yang dimulai dengan salah satu karakter r atau e
Untuk melihat informasi selengkapnya tentang bash shell, silahkan membuka manual bash dengan cara:
$ man bash
Buatlah sebuah file berekstensi .sh
menggunakan text editor pilihan kalian! Misalnya nano, vi, atau gedit.
Misalnya:
$ nano hello.sh
Tulis beberapa baris perintah disana, diawali dengan shebang dan interpreter yang akan digunakan, di sini tentunya adalah bash, #!/bin/bash
.
Shebang berfungsi untuk memberitahu sistem bahwa perintah-perintah yg ada di dalam file tersebut harus dijalankan dengan interpreter yang dituliskan setelah shebang.
#!/bin/bash
echo "Hello, world!"
Simpan dan ubah permission file script agar dapat dieksekusi.
$ chmod +x hello.sh
Eksekusi file script dengan cara ./nama_file.sh atau bash nama_file.sh
.
-
Beberapa hal yang perlu diperhatikan dalam mendefinisikan variabel:
i. Nama variabel hanya boleh terdiri dari:
- Huruf (a-z dan A-Z)
- Angka (0-9)
- Karakter underscore (_)
ii. Nama variabel dimulai dengan huruf atau underscore
iii. Tidak boleh menggunakan karakter spesial seperti !, *, $, #, -, dll karena karakter tersebut punya makna khusus untuk shell
iv. Bersifat case sensitive (membedakan huruf besar dan kecil)
-
Syntax
- Mendefinisikan variabel
nama_var=nilai
- Mengakses variabel
$nama_var
-
Tipe-Tipe Variabel
- String
nama_var="string"
- Integer
nama_var=nilai
-
Array
#Jika isi array berupa string
nama_var=("string0" "string1" "string2" ... "stringN")
#Jika isi array berupa integer
nama_var=(nilai0 nilai1 nilai2 ... nilaiN)
Contoh:
#!/bin/bash
laboratorium="Arsitektur dan Jaringan Komputer"
jumlah_admin=4
nama_admin=("Kuuhaku" "Esaiy" "Steven" "Manis")
echo "Variabel string:" $laboratorium
echo "Variabel integer:" $jumlah_admin
echo "Variabel array pertama:" ${nama_admin[0]}
Output:
Beberapa special variable yang sering dipakai:
Variable | Deskripsi |
---|---|
$0 | Berisi nama file script yang sedang dijalankan |
$n | n disini adalah angka desimal positif yang sesuai dengan posisi argumen (argumen pertama adalah $1, argumen kedua adalah $2, dst) |
$# | Jumlah argumen yang diinput pada script |
$* | Semua argumen $n |
$? | Status exit dari perintah terakhir yang dijalankan |
$$ | Proses ID (PID) shell saat ini |
Contoh:
#!/bin/bash
echo "Nama script : $0"
echo "Argumen ke-1 : $1"
echo "Argumen ke-2 : $2"
echo "Hai $1, selamat datang di materi camin $2!"
echo "Total argumen : $#"
echo "Semua argumen : $*"
echo "PID : $$"
Output:
-
read digunakan untuk mengambil input dari keyboard dengan syntax sebagai berikut:
read nama_var
-
echo digunakan untuk menampilkan output dengan syntax sebagai berikut:
#Menampilkan teks biasa
echo "teks"
#Menampilkan isi dari sebuah variabel
echo $nama_var
Catatan:
Jika ingin menggunakan new line character (\n) pada echo, gunakan echo -e "teks\n teks"
Contoh:
#!/bin/bash
laboratorium="Arsitektur dan Jaringan Komputer"
echo "Siapa namamu?"
read nama
echo -e "\nHai $nama!\nSelamat datang di materi camin $laboratorium ! ;)"
Output:
Selain echo, bash juga menyediakan perintah builtin printf untuk menampilkan output dengan format tertentu, mirip bahasa C. Contoh:
#!/bin/bash
laboratorium="AJK";
angka=12;
printf "Ini enter\n\tdi bash\n";
printf "Laboratorium apa? %s\n" $laboratorium;
printf "%d decimal dalam float = %.2f\n" $angka $angka
Output:
Shell Unix/Linux memiliki beberapa karakter spesial yang disebut dengan metakarakter. Karakter tersebut punya makna khusus jika digunakan di dalam shell script. Beberapa macam metakarakter:
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Ada 4 jenis quoting, yaitu:
No | Quoting | Deskripsi |
---|---|---|
1 | Single Quote (') | Semua metakarakter di antara single quote akan kehilangan makna khusus |
2 | Double Quote (") | Sebagian besar metakarakter di antara double quote akan kehilangan makna khusus, kecuali $, backquote, \$, \', \", \\ |
3 | Backslash (\) | Karakter apa pun setelah backslash akan kehilangan makna khusus |
4 | Backquote (`) | Apa pun di antara back quote akan diperlakukan sebagai perintah dan akan dieksekusi |
Contoh:
#!/bin/bash
single=3
#Single quote
echo '$single'
#Double quote
echo "$single"
#Backslash
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
#Backquote
dmn=`pwd`
echo "Dimana kita? " $dmn
Lebih banyak dapat dilihat sendiri di man bash
Ada beberapa jenis operator yang didukung oleh shell, yaitu:
- Operator Aritmatika
- Operator Relasional
- Operator Boolean
- Operator String
- Operator File Test
Namun yang akan dibahas lebih jauh hanyalah operator aritmatika dan relasional.
No | Operator | Deskripsi |
---|---|---|
1 | + | Penjumlahan |
2 | - | Pengurangan |
3 | * | Perkalian |
4 | / | Pembagian |
5 | % | Modulus (sisa pembagian) |
6 | = | Menempatkan nilai di sisi kanan ke variabel di sisi kiri |
7 | == | Membandingkan 2 nilai yang sama |
8 | != | Membandingkan 2 nilai yang tidak sama |
Ada 3 cara yang dapat digunakan untuk melakukan operasi matematika, yaitu:
- Menggunakan perintah built-in let
- Menggunakan perintah eksternal expr
- Menggunakan perintah subtitusi
$((ekspresi))
Contoh:
#!/bin/bash
a=15
b=7
#memakai let
let jumlah=$a+$b
let kurang=$a-$b
let kali=$a*$b
#memakai expr
bagi=`expr $a / $b`
#memakai perintah subtitusi $((ekspresi))
mod=$(($a % $b))
echo "a + b = $jumlah"
echo "a - b = $kurang"
echo "a * b = $kali"
echo "a / b = $bagi"
echo "a % b = $mod"
b=$a
echo "a = $a"
echo "b = $b"
Output:
No | Operator | Deskripsi |
---|---|---|
1 | -eq | Memeriksa apakah nilai kedua operan sama (==) |
2 | -ne | Memeriksa apakah nilai kedua operan tidak sama (!=) |
3 | -gt | Memeriksa apakah nilai operan kiri lebih besar daripada operan kanan (>) |
4 | -lt | Memeriksa apakah nilai operan kiri lebih kecil daripada operan kanan (<) |
5 | -ge | Memeriksa apakah nilai operan kiri lebih besar atau sama dengan operan kanan (>=) |
6 | -le | Memeriksa apakah nilai operan kiri lebih kecil atau sama dengan operan kanan (<=) |
Operator relasional biasanya digunakan bersama dengan conditional statements, contoh:
#!/bin/bash
a=15
b=7
if [ $a -eq $b ]
then
echo "$a -eq $b: a sama dengan b"
else
echo "$a -eq $b: a tidak sama dengan b"
fi
Output:
15 -eq 7: a tidak sama dengan b
Conditional statements digunakan untuk memungkinkan program dapat membuat keputusan yang benar dengan memilih tindakan tertentu berdasarkan syarat/kondisi tertentu. Ada 2 jenis conditional statements dalam Unix shell, yaitu:
- if...else
- case
Syntax:
if [ kondisi1 ]
then
perintah1
elif [ kondisi2 ]
then
perintah2
else
alternatif_perintah
fi
Contoh:
#!/bin/bash
cintaku=100
cintanya=88
if [ $cintaku == $cintanya ]
then
echo "cintaku sama dengan cintanya"
elif [ $cintaku -gt $cintanya ]
then
echo "cintaku lebih besar dari cintanya"
elif [ $a -lt $cintanya ]
then
echo "cintaku lebih kecil dari cintanya"
else
echo "Tidak ada kondisi yang memenuhi"
fi
Output:
cintaku lebih besar dari cintanya
Syntax:
case var in
pola1)
perintah1
;;
pola2)
perintah2
;;
*)
alternatif_perintah
;;
esac
Contoh:
#!/bin/bash
echo "Aku udah suka sama kamu dari lama, kamu mau ga jadi pacar aku?"
echo "1. Ya"
echo "2. Tidak"
echo "3. Aku gak bisa jawab sekarang"
echo -n "jawab: "
read jawaban
case "$jawaban" in
"1")
echo "Ga ada hal yang lebih aku tunggu dari ini, terimakasih!!!"
;;
"2")
echo "Oke, maaf ya udah ganggu waktu kamu"
;;
"3")
echo "Gantung aja aku, gantung aja!!!"
;;
*)
echo "Apa apa? Gimana??"
;;
esac
Loop digunakan untuk mengeksekusi serangkaian perintah berulang kali. Ada beberapa macam shell loops:
- While loop
- For loop
- Until loop
- Select loop
While loop digunakan untuk mengeksekusi serangkaian perintah berulang kali selama suatu kondisi terpenuhi. While digunakan jika kita ingin memanipulasi suatu variabel secara berulang-ulang. Syntax:
while kondisi
do
perintah
done
Contoh:
#!/bin/bash
a=0
while [ $a -lt 10 ]
do
echo $a
a=$((a + 2))
done
Output:
0
2
4
6
8
For loop digunakan untuk mengulang serangkaian perintah untuk setiap item pada daftar. Syntax:
for var in daftar_item
do
perintah
done
Contoh:
#!/bin/bash
for num in 1 2 3 4 5
do
echo $num
done
Selain itu, bisa ditulis seperti ini:
#!/bin/bash
for ((num=1; num<=5; num=num+1))
do
echo $num
done
Output:
1
2
3
4
5
Berbeda dengan while, until loop digunakan untuk mengeksekusi serangkaian perintah berulang kali sampai suatu kondisi terpenuhi. Syntax:
until kondisi
do
perintah
done
Contoh:
#!/bin/bash
a=0
until [ ! $a -lt 10 ]
do
echo $a
a=$((a + 2))
done
Output:
0
2
4
6
8
Select loop digunakan ketika kita ingin membuat sebuah program dengan beberapa daftar pilihan yang bisa dipilih oleh user, misalnya daftar menu. Syntax:
select var in daftar_item
do
perintah
done
Contoh:
#!/bin/bash
select minuman in teh kopi air jus susu semua gaada
do
case $minuman in
teh|kopi|air|semua)
echo "Maaf, habis"
;;
jus|susu)
echo "Tersedia"
;;
gaada)
break
;;
*) echo "Tidak ada di daftar menu"
;;
esac
done
Semua jenis loop di atas mendukung konsep nesting, artinya kita dapat menempatkan satu loop ke dalam loop lain, baik loop yang sejenis maupun berbeda jenis Contoh:
#!/bin/sh
a=0
while [ "$a" -lt 10 ] #loop1
do
b="$a"
while [ "$b" -ge 0 ] #loop2
do
echo -n "$b "
b=`expr $b - 1`
done
echo ""
a=`expr $a + 1`
done
Output:
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
Fungsi digunakan untuk memecah fungsionalitas keseluruhan script menjadi sub-bagian yang lebih kecil. Sub-bagian itu dapat dipanggil untuk melakukan tugas masing-masing apabila diperlukan. Syntax:
nama_fungsi () {
perintah1
perintah2
...
perintahN
}
Contoh:
#!/bin/bash
#define functions
ask_name() {
echo "Siapa namamu?"
}
reply() {
read nama
echo "Hai $nama, selamat datang di materi camin AJK!"
}
#call functions
ask_name
reply
Sama halnya dengan loop, function juga bisa menerapkan konsep nested. Dimana kita bisa memanggil sebuah fungsi di dalam fungsi.
#!/bin/bash
#define functions
ask_name() {
echo "Siapa namamu?"
reply #call reply function inside ask_name function
}
reply() {
read nama
echo "Hai $nama, selamat datang di materi camin AJK!"
}
#call functions
ask_name
- Modul 1 Mata Kuliah Sistem Operasi TC 2020
- https://www.tutorialspoint.com/unix/shell_scripting.htm
- https://pemula.linux.or.id/programming/bash-shell.html
- https://www.codepolitan.com/belajar-bash-mencoba-bash-untuk-pertama-kali-57bbca3c28e54-17341
- https://pemula.linux.or.id/programming/bash-shell.html