TUTORIAL MINI - SHELL SCRIPT
Oleh
chmood
================================
TUTORIAL MINI - SHELL SCRIPT
================================
1. Shell Script
Β Β 1.0 Apa Itu Shell Script?
Β Β 1.1 Variabel
Β Β 1.2 Command Line & Argument
Β Β 1.3 Perhitungan Aritmatik
Β Β 1.4 User input
Β Β 1.5 Piping
Β Β 1.6 Redirection
Β Β 1.7 Fungsi
Β Β
2. Percabangan
Β Β 2.0 Percabangan dalam shell script
Β Β 2.1 if...then...fi
Β Β 2.2 if...then...else...fi
Β Β 2.3 if...then...elif...else...if
Β Β 2.4 nested if
Β Β 2.5 case...in...esac
Β Β 2.6 Menangkap error status
3. Perulangan
Β Β 3.0 Perulangan dalam shell script
Β Β 3.1 for...do...done
Β Β 3.2 for...in...do...done
Β Β 3.3 while...do...done
Β Β 3.4 Perulangan bersarang
Β Β
4. Soal-soal Latihan
Β Β 4.1 Anda ingin membersihkan Cache Firefox jika telah mencapai 5MB
Β Β Β Β Β Β Tips: gunakan perintah `du` untuk mengecek ukuran folder
Β Β 4.2 Anda ingin membuat script untuk melakukan backup otomatis log file server
Β Β Β Β Β Β apache setiap tengah malam lalu otomatis membersihkannya
Β Β 4.3 Anda ingin membuat membuat tampilan seperti berikut menggunakan looping,
Β Β Β Β Β Β 4.3.1
Β Β Β Β Β Β
Β Β Β Β Β Β 1Β Β Β Β Β Β Β Β Β 1Β Β Β Β Β Β Β Β Β Β Β Β Β *Β Β Β Β Β Β Β Β Β Β * * * * *
Β Β Β Β Β Β 22Β Β Β Β Β Β Β Β 12Β Β Β Β Β Β Β Β Β Β Β * *Β Β Β Β Β Β Β Β Β * * * *
Β Β Β Β Β Β 333Β Β Β Β Β Β Β 123Β Β Β Β Β Β Β Β Β * * *Β Β Β Β Β Β Β Β * * *
Β Β Β Β Β Β 4444Β Β Β Β Β Β 1234Β Β Β Β Β Β Β * * * *Β Β Β Β Β Β Β * *
Β Β Β Β Β Β 55555Β Β Β Β Β 12345Β Β Β Β Β * * * * *Β Β Β Β Β Β *
Β Β Β Β Β Β
Β Β 4.4 Anda ingin membuat shell script yang fungsinya mirip dengan program `ps`
Β Β Β Β Β Β yaitu untuk menampilkan proses dan juga informasi system
Β Β 4.5 Anda ingin membuat game tebak angka sederhana dimana jika dijalankan
Β Β Β Β Β Β outputnya akan seperti berikut:
Β Β Β Β Β Β
Β Β Β Β Β Β ***********************************
Β Β Β Β Β Β SELAMAT DATANG DI GAME TEBAK ANGKA
Β Β Β Β Β Β ***********************************
Β Β Β Β Β Β PERATURAN GAME:
Β Β Β Β Β Β 1. Angka diantara 10 - 50
Β Β Β Β Β Β 2. Angka adalah genap
Β Β Β Β Β Β 3. Maksimal percobaan adalah 5 kali
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan Nama: SnipKOM
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 20
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 34
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-2)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 30
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-3)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 28
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-4)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 22
Β Β Β Β Β Β ------------------------ GAME OVER ----------------------------
Β Β Β Β Β Β JAWABAN YANG BENAR ADALAH : 24
Β Β Β Β Β Β Apakah anda ingin coba lagi (y/t) ? y
Β Β Β Β Β Β ---------------------------------------------------------------
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 44
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 48
Β Β Β Β Β Β ------------- SELAMAT TEBAKAN ANDA BENAR ----------------------
Β Β Β Β Β Β Anda berhasil menebak dalam 2 kali percobaan.
Β Β Β Β Β Β Apakah anda ingin coba lagi (y/t) ? t
Β Β Β Β Β Β ---------------------------------------------------------------
Β Β Β Β Β Β
Β Β Β Β Β Β
Β Β Β Β Β Β Jawaban didapat secara random antara 10 - 50 dan harus genap. Untuk
Β Β Β Β Β Β mendapatan random number pada shell script dapat digunakan beberapa cara
Β Β Β Β Β Β diantaranya:
Β Β Β Β Β Β
Β Β Β Β Β Β 1. Menggunakan magic variable $RANDOM
Β Β Β Β Β Β Β Β Β misal untuk menghasilkan angka range 1 - 10 maka:
Β Β Β Β Β Β Β Β Β echo $[ ($RANDOM % 10) + 1 ]
Β Β Β Β Β Β 2. Langsung berkomunikasi dengan file /dev/random atau /dev/urandom. File
Β Β Β Β Β Β Β Β Β ini isinya selalu berubah sehingga dengan menggunakan perintah `cksum`
Β Β Β Β Β Β Β Β Β kita akan mendapatkan angka yang acak, contoh:
Β Β Β Β Β Β Β Β Β expr `dd if=/dev/urandom count=1 2> /dev/null | cksum | \
Β Β Β Β Β Β Β Β Β cut -d" " -f1` % 10 + 1
Β Β Β Β Β Β
--------------------------------------------------------------------------------
------------------------
1.0 APA ITU SHELL SCRIPT
------------------------
Β Β Dalam lingkungan unix, kata 'shell' mengacu pada semua program yang dapat
Β Β dijalankan pada command line. Jadi secara sederhana shell script merupakan
Β Β kumpulan perintah yang disimpan pada suatu file. Extensi umum yang digunakan
Β Β untuk shell script adalah '.sh', sebenarnya hal ini tidak mutlak karena
Β Β pada dasarnya unix mengabaikan extensi file.
Β Β
Β Β Shell juga dapat mengacu pada program yang menangani command line itu
Β Β sendiri dalam sistem operasi UNIX program tersebut adalah Bourne Shell
Β Β (1978 - Steve Bourne) disingkat sh. Dalam sistem operasi GNU/Linux shell yang
Β Β menjadi standar adalah Bourne Again Shell(bash). Bash merupakan shell yang
Β Β kompatibel dengan sh dan memiliki lebih banyak fitur.
Β Β
Β Β Jika anda ingin menguasai shell script tentu anda harus tahu dan hafal
Β Β sedikit banyak perintah dasar command line, seperti mengkopi file(cp),
Β Β merename file(mv), mencetak string (echo), melihat file(cat), dan beberapa
Β Β perintah dasar lainnya.
Β Β
Β Β Shell script juga menyediakan beberapa fitur yang tersedia pada bahasa
Β Β pemrograman tingkat tinggi seperti variabel, percabangan dan perulangan.
Β Β Berikut ini adalah contoh sederhana penggunakan shell script:
Β Β
Β Β [email protected]:~$ nano hello.sh
Β Β #!/bin/sh
Β Β echo 'HELLO WORLD'
Β Β
Β Β Untuk menjalankan ada dua cara, pertama melalui program shell itu sendiri
Β Β
Β Β [email protected]:~$ sh hello.sh
Β Β
Β Β Kedua adalah mengeksekusinya secara independen, untuk melakukan hal tersebut
Β Β anda harus memberi permission 'execute' pada file.
Β Β
Β Β [email protected]:~$ chmod +x hello.sh
Β Β [email protected]:~$ ./hello.sh
Β Β HELLO WORLD
Β Β
Β Β Baris pertama #!/bin/sh adalah MUTLAK diperlukan dan HARUS diletakkan pada
Β Β BARIS PERTAMA agar file yang anda buat dikenali sistem sebagai shell script.
Β Β Tanda '#!' sering disebut 'shebang' operator. Tanda tersebut menandakan
Β Β bahwa file tersebut adalah shell script. Sisanya misal '/bin/sh' adalah
Β Β lokasi file binari atau program. Dalam contoh kita menggunakan program
Β Β bash '/bin/sh' atau '/bin/bash'.
Β Β
Β Β Tanda # jika tidak terletak pada baris dan kolom paling awal akan dianggap
Β Β sebagai komentar oleh shell.
Β Β
------------
1.1 Variabel
------------
Β Β Pemberian variabel pada shell script bersifat 'dynamic typing' karena
Β Β shell script tidak mengenal adanya tipe data. Pada shell script dikenal
Β Β dua istilah variabel yaitu SYSTEM VARIABLE(SV) dan USER DEFINED VARIABLE
Β Β (UDV). SV adalah kumpulan variabel yang telah dideklarasikan secara otomatis
Β Β oleh shell, sedangkan UDV adalah variabel yang kita buat sendiri. Contoh dari
Β Β variabel SV adalah HOME, SHELL, RANDOM, OSTYPE, dan masih banyak yang lain.
Β Β
Β Β Dalam membuat variabel ada beberapa aturan yang harus dipenuhi agar variabel
Β Β tersebut dianggap valid oleh shell, syntax untuk penamaan variabel adalah:
Β Β
Β Β nama_variabel=NILAI
Β Β
Β Β Perhatikan bahwa tidak ada spasi antara nama_variabel dengan tanda '=' juga
Β Β dengan NILAI. Ini adalah suatu KEHARUSAN. Berikut adalah beberapa aturan
Β Β tentang penamaan variabel:
Β Β
Β Β 1. Variabel HARUS diawali ABJAD atau _ (tidak dapat diawali angka)
Β Β 2. Variabel dapat terdiri dari karakter alphanumeric dan _
Β Β 3. Variabel bersifat CaSe SeNsItIvE
Β Β 4. Jika isi variabel mengandung spasi sebaiknya apit dengan tanda petik (')
Β Β Β Β Β atau (").
Β Β 5. Gunakan escape character (\) untuk karakter non-literal
Β Β Β Β Β seperti (\', \$, \?, dll)
Β Β
Β Β Untuk mencetak nilai dari suatu variabel digunakan tanda dollar ($) didepan
Β Β nama variabel, contoh:
Β Β
Β Β [email protected]:~$ a='Hello '
Β Β [email protected]:~$ b='World!'
Β Β [email protected]:~$ echo $a$b
Β Β Hello World!
Β Β [email protected]:~$ echo ${a}${b}
Β Β Hello World!
Β Β
Β Β Cara yang terakhir adalah cara yang disarankan untuk menghindari kesalahan
Β Β dalam melakukan concat string.
Β Β
Β Β Jika anda ingin menyimpan output dari suatu perintah kedalam suatu variabel
Β Β gunakan tanda backtick (`). Contoh, kita akan melihat isi direktori home
Β Β lalu menyimpannya dalam variabel isi_home.
Β Β
Β Β [email protected]:~$ isi_home=`ls /home`
Β Β [email protected]:~$ echo $isi_home
Β Β
Β Β Dalam shel juga terdapat SPECIAL VARIABEL untuk mendapatkan exit status dari
Β Β suatu program. Pada UNIX setiap program dinyatakan selesai TANPA error
Β Β apabila exit statusnya SAMA DENGAN 0. Selain itu maka program tersebut
Β Β selesai tapi dengan error. Variabel tersebut adalah "$?".
Β Β
Β Β [email protected]:~$ ls /home
Β Β [email protected]:~$ echo $?
Β Β 0
Β Β [email protected]:~$ ls /file/ngawur
Β Β [email protected]:~$ echo $?
Β Β 2
Β Β
Β Β Angka 2(TIDAK SAMA DENGAN 0) menunjukkan bahwa program ls keluar dengan
Β Β status terjadi error. Penggunaan exit sangat penting saat kita membuat
Β Β shell script yang kompleks, dimana didalamnya kita banyak menggunakan
Β Β program lain.
Β Β
------------------------------
1.2 Command Line dan Argument
------------------------------
Β Β Ketika berbicara shell script kita pasti berhubungan dengan command line.
Β Β Apabila berbicara tentang command line pasti berhubungan dengan argument.
Β Β Apaliba berbicara tentang argument.....cukup....cukup.... nanti malah sampai
Β Β sejarah kerajaan majapahit nantinya :)
Β Β
Β Β Perintah-perintah command line umumnya memerlukan minimal satu buah argumen
Β Β agar dapat mengerjakan tugasnya secara optimal. Apa itu argument? secara
Β Β sederhana argumen adalah text/character yang ditempatkan setelah nama program
Β Β dengan pemisah minimal satu spasi.
Β Β
Β Β Contoh berikut mengilustrasikan pemberian dua argument pada perinta copy file
Β Β `cp`. Perintah cp memerlukan dua argument yaitu 1)lokasi file awal
Β Β 2)lokasi file tujuan
Β Β
Β Β [email protected]:~$ cp /foo/bar /tmp/bar
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ^Β Β Β Β Β Β ^
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β argument-1Β argument-2
Β Β
Β Β Pada sistem Linux dikenal dua istilah argument short style(UNIX style) dan
Β Β long style(GNU Style). Hampir setiap program command line pada linux
Β Β menyediakan dua opsi tersebut saat memberikan argument. Penulisan argument
Β Β UNIX style biasanya hanya terdiri dari satu huruf contoh '-l' pada perintah
Β Β `ls`.
Β Β
Β Β [email protected]:~$ ls -l
Β Β
Β Β Sedangkan GNU style umumnya terdiri dari minimal sebuah kata contoh
Β Β '--all' pada perintah `ls`.
Β Β
Β Β [email protected]:~$ ls --all
Β Β
Β Β Untuk membaca argument dalam shell script digunakan special variabel yaitu
Β Β $0, $1, $2,...$9. Variabel $0 adalah nama program itu sendiri.
Β Β
Β Β CATATAN:
Β Β Untuk mengetahui jumlah argument yang diinputkan user gunakan variabel $#,
Β Β sedangkan untuk mendapatkan seluruh argument gunakan variabel $*.
Β Β
Β Β LATIHAN:
Β Β Buat sebuah shell script untuk menampilkan nama user, nama tersebut
Β Β diinput melalui argument ke-1
Β Β
Β Β JAWAB:
Β Β [email protected]:~$ nano nama.sh
Β Β #!/bin/sh
Β Β nama=$1
Β Β echo 'Halo '$nama', selamat datang!'
Β Β
Β Β [email protected]:~$ chmod +x nama.sh
Β Β [email protected]:~$ ./nama.sh BB
Β Β Halo Akom, selamat datang!
Β Β [email protected]:~$ ./nama.shΒ BB ACEH'
Β Β Halo Akom, selamat datang!
Β Β [email protected]:~$ ./nama.sh ' BB ACEH'
Β Β Halo Cyber_Sniper, selamat datang!
Β Β
Β Β CATATAN:
Β Β Untuk menyimpan file pada nano Tekan CTRL-O lalu jika ingin keluar tekan
Β Β CTRL-X.
--------------------------
1.3 Perhitungan Aritmatik
--------------------------
Β Β Untuk melakukan perhitungan aritmatik, shell tidak memiliki kemampuan
Β Β built-in, tetapi meminta bantuan program lain yaitu `expr`. Program expr
Β Β berfungsi untuk mengevaluasi suatu expresi baik itu perbandingan string
Β Β atau operasi aritmatik sederhana.
Β Β
Β Β Operator aritmatik yang disediakan expr antaran lain:
Β Β +-----------+-----------------------------------------------------------+
Β Β | OperatorΒ | KETERANGANΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β +Β Β Β Β | Operator Penjumlahan contoh: expr 1 + 1Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β -Β Β Β Β | Operator Pengurangan contoh: expr 10 - 9Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β *Β Β Β Β | Operator Perkalian contoh: expr 10 \* 10Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β /Β Β Β Β | Operator Pembagian contoh: expr 10 / 2Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β %Β Β Β Β | Operator Modulus contoh: expr 15 % 3Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β
Β Β Selain digunakan untuk perhitungan aritmatik, perintah `expr` juga cukup
Β Β handal untuk melakukan manipulasi string, untuk lebih jelas silahkan lihat
Β Β halaman manual dari expr dengan mengetikkan `man expr`.
Β Β
Β Β LATIHAN:
Β Β Buatlah sebuah shell script untuk menghitung nilai dari argument-1 dikali
Β Β argument-2 ditambah argument-3!
Β Β
Β Β JAWABAN:
Β Β Secara matematis perhitungannya adalah
Β Β
Β Β (argument-1 + argument-2) + argument-3.
Β Β
Β Β Tidak seperti bahasa tingkat tinggi, pada shell script untuk memberi
Β Β prioritas pada suatu perhitungan kita menggunakan tanda $[ ... ]. Jadi
Β Β perhitungannya menjadi
Β Β
Β Β $[ argument-1 + argument-3 ] + argument-3
Β Β
Β Β Keuntungan lain ketika kita menggunakan tanda $[...] adalah kita tidak perlu
Β Β melakukan escaping character pada tanda perkalian(*). Berikut ini adalah
Β Β shell scriptnya.
Β Β
Β Β [email protected]:~$ nano hitung.sh
Β Β #!/bin/sh
Β Β bil1=$1
Β Β bil2=$2
Β Β bil3=$3
Β Β echo -n "HASIL DARI $bil1 * $bil2 + $bil3 = "
Β Β echo `expr $[ $bil1 * $bil2 ] + $bil3`
Β Β [email protected]:~$ chmod +x hitung.sh
Β Β [email protected]:~$ ./hitung.sh 10 10 10
Β Β HASIL DARI 10 * 10 + 10 = 110
Β Β
---------------
1.4 User Input
---------------
Β Β Selain melalui argument pada command line, cara lain untuk mendapatkan input
Β Β dari user adalah melalui STANDARD INPUT (STDIN). Dimana user langsung
Β Β mengetikkan isi dari suatu nilai yang program inginkan.
Β Β
Β Β Untuk mendapatkan input dari user dapat digunakan perintah `read`. Perintah
Β Β read tidak begitu berguna jika kita tidak menyimpan hasil inputan tersebut
Β Β kedalam sebuah variabel. Untuk menyimpan hasil inputan kita harus memberi
Β Β satu argument pada perintah read. Argument inilah yang akan menyimpan nilai
Β Β yang diinputkan. Contoh,
Β Β
Β Β [email protected]:~$ read a
Β Β 10
Β Β [email protected]:~$ read b
Β Β 5
Β Β [email protected]:~$ expr $a \* $b
Β Β 50
Β Β
Β Β LATIHAN:
Β Β Sama dengan latihan sebelumnya, hanya saja kali ini gunakan perintah read
Β Β untuk membaca setiap bilangan yang diinputkan user.
Β Β
Β Β JAWABAN:
Β Β [email protected]:~$ nano hitung2.sh
Β Β #!/bin/sh
Β Β # deklarasikan variabel dengan nilai NULL
Β Β bil1=
Β Β bil2=
Β Β bil3=
Β Β echo -n 'Masukkan bilangan-1: '
Β Β read bil1
Β Β echo -n 'Masukkan bilangan-2: '
Β Β read bil2
Β Β echo -n 'Masukkan bilangan-3: '
Β Β read bil3
Β Β echo ''
Β Β echo -n "Hasil dari $bil1 * $bil2 + $bil3 = "
Β Β echo `expr $[ $bil1 * $bil2 ] + $bil3`
Β Β [email protected]:~$ chmod +x hitung2.sh
Β Β [email protected]:~$ ./hitung2
Β Β Masukkan bilangan-1: 10
Β Β Masukkan bilangan-2: 10
Β Β Masukkan bilangan-3: 10
Β Β Hasil dari 10 * 10 + 10 = 110
Β Β
----------Β Β
1.5 Piping
----------
Β Β Piping merupakan penggabungan dua atau lebih perintah dimana output dari
Β Β perintah sebelumnya digunakan sebagai input untuk perintah selanjutnya.
Β Β Simbol yang digunakan untuk membatasi perintah yang satu dengan yang lain
Β Β adalah tanda pipe "|". Berikut adalah beberapa contoh sederhana penggunaan
Β Β piping pada command line.
Β Β
Β Β [email protected]:~$ cat /etc/passwd | wc -l
Β Β [email protected]:~$ cat /etc/passwd | sort -r
Β Β [email protected]:~$ cat /etc/passwd | grep "/bin/sh/" | wc -l
---------------
1.6 Redirection
---------------
Β Β Secara umum jika kita ingin mengambil inputan maka kita mengambil dari
Β Β STANDARD INPUT (STDIN) yaitu keyboard. Sedangkan hasil output program yang
Β Β tercetak di layar monitor kita disebut STANDARD OUTPUT (STDOUT). Hampir sama
Β Β dengan STDOUT, error yang dihasilkan program juga ditampilkan lewat monitor
Β Β biasa disebut STANDARD ERROR (STDERR). Setiap standard mempunyai kode file
Β Β descriptor sendiri-sendiri diantaranya:
Β Β
Β Β - STDIN => File Descriptor: 0
Β Β - STDOUT => File Descriptor: 1
Β Β - STDERR => File Descriptor: 2
Β Β
Β Β Dengan mengetahui file descriptor tersebut kita dapat melakukan redirection
Β Β (pengalihan), misal dari dari STDOUT menjadi STDERR atau sebaliknya.
Β Β Terdapat tiga simbol untuk melakukan redirection diantarnya:
Β Β
Β Β 1.
Β Β Simbol: ">"
Β Β Keterangan: Simbol tersebut akan meredirect output ke dalam suatu file. Jika
Β Β Β Β Β Β Β Β Β Β Β Β Β Β file tersebut belum ada maka akan buat secara otomatis, jika
Β Β Β Β Β Β Β Β Β Β Β Β Β Β file sudah ada ada maka isinya akan di-overwrite/ditimpa.
Β Β
Β Β 2.
Β Β Simbol: ">>"
Β Β Keterangan: Hampir sama dengan ">" hanya saja jika file sudah ada, maka file
Β Β Β Β Β Β Β Β Β Β Β Β Β Β isi tersebut tidak dioverwrite tetapi ditambah.
Β Β
Β Β 3.
Β Β Simbol: "<"
Β Β Keterangan: Simbol "<" artinya input tidak diambil dari STDIN melainkan dari
Β Β Β Β Β Β Β Β Β Β Β Β Β Β sebuah file.
Β Β
Β Β Sebagai contoh sederhana, ketika anda mengetikkan perintah `ls /nama/dir`
Β Β maka secara default program ls akan menampilkan output ke STDOUT yaitu
Β Β layar monitor. Jika kita ingin meredirect output yang dihasilkan kedalam
Β Β sebuah file maka kita dapat menggunakan simbol ">" atau ">>". Intinya segala
Β Β STDOUT dapat dilakukan redirect.
Β Β
Β Β [email protected]:~$ echo 'DAFTAR ISI FOLDER LUG' > /tmp/data.txt
Β Β [email protected]:~$ ls /home/luAkom >> /tmp/data.txt
Β Β
Β Β Untuk contoh "<" kita akan menggunakan program tr, program ini dapat kita
Β Β gunakan untuk manipulasi teks. Input yang akan kita berikan ke tr adalah
Β Β dari sebuah file, nantinya teks yang ada pada file tersebut akan di-UPPER
Β Β CASE semua.
Β Β
Β Β [email protected]:~$ echo 'SMK ACEH UTARA' > /tmp/[email protected]
Β Β [email protected]:~$ tr "[a-z]" "[A-Z]" < /tmp/[email protected]
Β Β Snip@Akom
Β Β
Β Β Selain meredirect ke file kita juga dapat melakukan redirect ke file
Β Β descriptor lain. Misal dari STDOUT ke STDERR atau sebaliknya.
Β Β
Β Β [email protected]:~$ rm /file/ngawur 2>&1
Β Β [email protected]:~$ ls / 1>&2
Β Β
-----------
1.7 FUNGSI
-----------
Β Β Hampir sama dengan bahasa pemrograman tingkat tinggi, pada shell script juga
Β Β dikenal istilah fungsi. Dimana dengan adanya fungsi kita dapat membagi
Β Β kode kita ke dalam sub-sub yang lebih kecil. Hal ini sangat berguna jika kita
Β Β membangun sebuah program shell script yang cukup kompleks. Syntax penggunaan
Β Β fungsi pada shell script adalah:
Β Β
Β Β function nama-fungsi()
Β Β {
Β Β Β Β Β perintah
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β Β Β Β return
Β Β }
Β Β LATIHAN:
Β Β Buatlah shell script untuk mencetak banner seperti output berikut:
Β Β
Β Β [email protected]:~$ ./fungsi.sh
Β Β ==============================
Β Β Β SELAMAT DATANG DI LUG-AKOM
Β Β ==============================
Β Β HARI INI: Rabu, 14-05-2008
Β Β
Β Β Tulisan "SELAMAT blabla..." diletakkan dalam fungsi tersendiri, begitu pula
Β Β fungsi untuk mencetak tanggal. Fungsi mencetak tanggal nantinya akan
Β Β dipanggil didalam fungsi yang mencetak tulisan "SELAMAT...".
Β Β
Β Β JAWAB:
Β Β [email protected]:~$ nano fungsi.sh
Β Β #!/bin/sh
Β Β function indo_date() {
Β Β Β Β Β Β Β Β Β Β echo `date +"%A, %d-%m-%Y"`
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β function welcome() {
Β Β Β Β Β Β Β Β Β Β echo "=============================="
Β Β Β Β Β Β Β Β Β Β echo " SELAMAT DATANG DI LUG-AKOM"
Β Β Β Β Β Β Β Β Β Β echo "=============================="
Β Β Β Β Β Β Β Β Β Β echo -n "HARI INI: "
Β Β Β Β Β Β Β Β Β Β indo_date
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β welcome
Β Β [email protected]:~$ chmod +x fungsi.sh
Β Β
Β Β Apakah fungsi pada shell script juga menerima parameter? YA tapi dengan
Β Β sedikit "nyeleneh". Kenapa? jika pada bahasa pemrograman umumnya parameter
Β Β diletakkan diantara tanda (), tidak demikian dengan shell script. Cara
Β Β pengambilan parameter pada shell script sama dengan pengambilan argument
Β Β pada program shell script itu sendiri. Jadi kita dapat menggunakan variabel
Β Β $*, $#, $0, $1, dan seterusnya.
Β Β
Β Β Dibawah ini adalah contoh pembuatan fungsi untuk mengubah text menjadi
Β Β UPPER-CASE.
Β Β
Β Β [email protected]:~$ nano fungsi2.sh
Β Β #!/bin/sh
Β Β function toUpperCase() {
Β Β Β Β Β Β Β Β Β Β teks=$*
Β Β Β Β Β Β Β Β Β Β echo $teks | tr "[a-z]" "[A-Z]"
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β echo -n "Masukkan teks(lowercase): "
Β Β read foo
Β Β toUpperCase $foo
Β Β [email protected]:~$ chmod +x fungsi2.sh
Β Β [email protected]:~$ ./fungsi2.sh
Β Β Masukkan teks(lowercase): ini lower case
Β Β INI LOWER CASE
Β Β Pada contoh diatas kita menggunakan variabel $* untuk mengambil parameter
Β Β bukan $1 atau $2 dkk karena yang akan diinputkan user kemungkinan mengandung
Β Β dua kata atau lebih. Jadi jika kita menggunakan variabel $1 maka yang terbaca
Β Β hanya kata pertama. Untuk itu kita gunakan variabel $* yang akan membaca
Β Β semua parameter.
Β Β
---------------
2.0 Percabangan
---------------
Β Β Dengan menggunakan percabangan/branching maka kita dapat mengontrol alur
Β Β dari shell script yang kita buat. Hal ini memungkinkan kita untuk menulis
Β Β program yang sangat kompleks pada shell script. Syntax penggunaan percabangan
Β Β pada shell script adalah:
Β Β
Β Β if kondisi
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β -----------
Β Β if kondisi
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β else
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β -----------
Β Β if kondisi1
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β elif kondisi1
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β elif kondisi-n
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β else
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β --------------
Β Β case $variabel in
Β Β Β Β Β pattern1) perintah
Β Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β Β Β Β Β Β Β perintah;;
Β Β Β Β Β pattern1) perintah
Β Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β Β Β Β Β Β Β perintah;;
Β Β Β Β Β *) perintah
Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β perintah;;
Β Β esac
Β Β
Β Β Untuk melakukan perbandingan kondisi pada data kita dapat menggunakan
Β Β perintah `test`(man test) atau meletakkannya dalam blok [ ].
Β Β
Β Β Berikut ini adalah operator yang dapat digunakan untuk membandingkan data
Β Β NUMERIK:
Β Β
Β Β +------------+-----------------------------------+
Β Β | OPERATORΒ Β | KETERANGANΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -eqΒ Β Β Β | SAMA DENGAN (=)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -neΒ Β Β Β | TIDAK SAMA DENGAN (!=)Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -gtΒ Β Β Β | LEBIH BESAR (>)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -geΒ Β Β Β | LEBIH BESAR ATAU SAMA DENGAN (>=) |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -ltΒ Β Β Β | KURANG DARI (<)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -leΒ Β Β Β | KURANG DARI ATAU SAMA DENGAN (<=) |
Β Β +------------+-----------------------------------+
Β Β
-------------------
2.1 if...then...fi
------------------
Β Β
Β Β [email protected]:~$ nano if-then-fi.sh
Β Β #!/bin/sh
Β Β
Β Β num_arg=$#
Β Β bil1=$1
Β Β bil2=$2
Β Β function help() {
Β Β Β Β Β echo 'Penggunaan: '
Β Β Β Β Β echo "$0 bil1 bil2"
Β Β Β Β Β echo ''
Β Β Β Β Β echo Dimana bil1 dan bil2 harus angka genap.
Β Β Β Β Β return
Β Β }
Β Β function cek_arg() {
Β Β Β Β Β if test $num_arg -lt 2
Β Β Β Β Β then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1Β Β Β # keluar dengan exit status 1
Β Β Β Β Β fi
Β Β Β
Β Β Β Β Β if [ `expr $bil1 % 2` -ne 0 ] ; then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1
Β Β Β Β Β fi
Β Β Β
Β Β Β Β Β if [ `expr $bil2 % 2` -ne 0 ]
Β Β Β Β Β then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1
Β Β Β Β Β fi
Β Β Β Β Β return
Β Β }
Β Β cek_arg
Β Β echo 'Argument anda adalah '$bil1' dan '$bil2
Β Β exit 0
Β Β [email protected]:~$ chmod +x if-then-fi.sh
Β Β [email protected]:~$ ./if-then-fi.sh
Β Β Penggunaan:
Β Β ./if-then-fi.sh bil1 bil2
Β Β Dimana bil1 dan bil2 harus angka genap.
Β Β [email protected]:~$ echo $?
Β Β 1
Β Β [email protected]:~$ ./if-then-fi.sh 2 4
Β Β Argument anda adalah 2 dan 4
Β Β [email protected]:~$ echo $?
Β Β 0
Β Β
Β Β Perintah exit pada shell script dapat digunakan untuk keluar langsung dari
Β Β program. Pada contoh diatas, jika terdapat kesalahan kita keluar dengan exit
Β Β status 1( bukan 0 ) artinya program selesai tapi dengan error. Error status
Β Β tidak harus 1 tapi bisa sembarang angka asal BUKAN 0.
-------------------------
2.2 if...then...else...fi
-------------------------
Β Β Statement pada blok else akan dieksekusi jika kondisi pada pada blok if
Β Β bernilai false.
Β Β
Β Β [email protected]:~$ nano if-else.sh
Β Β #!/bin/sh
Β Β
Β Β if test $1 -ge 0
Β Β then
Β Β Β Β Β echo "Argument bernilai positif"
Β Β else
Β Β Β Β Β echo "Argument bernilai negatif"
Β Β fi
Β Β [email protected]:~$ chmod +x if-else.sh
Β Β [email protected]:~$ ./if-else 10
Β Β Argument bernilai positif
Β Β [email protected]:~$ ./if-else -2
Β Β Argument bernilai negatif
--------------------------------
2.3 if...then...elif...else...fi
--------------------------------
Β Β Statement elif digunakan jika kita ingin memilih lebih dari dua kondisi.
Β Β
Β Β [email protected]:~$ nano if-elif.sh
Β Β #!/bin/sh
Β Β pilih=
Β Β teks="Sistem operasi pilihan anda adalah "
Β Β echo "Pilih Sistem Operasi Anda: "
Β Β echo "1. Linux"
Β Β echo "2. Mac OS"
Β Β echo "3. FreeBSD"
Β Β echo "4. Lainnya"
Β Β echo ""
Β Β echo -n "Masukkan pilihan: "
Β Β read pilih
Β Β if [ $pilih = "1" ] ; then
Β Β Β Β Β echo "${teks}Linux"
Β Β elif [ $pilih = "2" ] ; then
Β Β Β Β Β echo "${teks}Mac OS"
Β Β elif [ $pilih = "3" ] ; then
Β Β Β Β Β echo "${teks}FreeBSD"
Β Β else
Β Β Β Β Β echo "Anda memilih sistem operasi lain"
Β Β fi
Β Β [email protected]:~$ chmod +x if-elif.sh
Β Β [email protected]:~$ ./if-elif.sh
Β Β Pilih Sistem Operasi Anda:
Β Β 1. Linux
Β Β 2. Mac OS
Β Β 3. FreeBSD
Β Β 4. Lainnya
Β Β Masukkan pilihan: 3
Β Β Sistem operasi pilihan anda adalah FreeBSD
-------------
2.5 Nested If
-------------
Β Β Pada shell script anda juga dapat meletakkan blok if didalam if atau istilah
Β Β "kerennya" nested if. Berikut adalah contoh sederhana penggunaannya.
Β Β
Β Β [email protected]:~$ nano nested-if.sh
Β Β #!/bin/bash
Β Β bil=$1
Β Β if [ `expr $bil % 2` -eq 0 ] ; then
Β Β Β Β Β if [ $bil -ge 0 ] ; then
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan genap dan >= 0"
Β Β Β Β Β else
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan genap dan < 0"
Β Β Β Β Β fi
Β Β else
Β Β Β Β Β if [ $bil -ge 0 ] ; then
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan ganjil dan >= 0"
Β Β Β Β Β else
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan ganjil dan < 0"
Β Β Β Β Β fi
Β Β fi
Β Β [email protected]:~$ sh nested-if.sh 10
Β Β Angka yang anda masukkan genap dan >= 0
Β Β [email protected]:~$ sh nested-if.sh -5
Β Β Angka yang anda masukkan ganjil dan < 0
--------------------
2.6 case...in...esac
--------------------
Β Β Perintah case hampir sama dengan if-then-elif-else-fi karena dapat memilih
Β Β dari banyak kondisi. Sebagian orang lebih suka menggunakan case...esac
Β Β dibanding multi level-if karena lebih mudah dibaca.
Β Β Pada contoh dibawah ini adalah modifikasi dari contoh if-then-elif-else-fi
Β Β yang pernah dibahas sebelumnya menggunakan case...in...esac.
Β Β
Β Β [email protected]:~$ nano case.sh
Β Β #!/bin/sh
Β Β pilih=
Β Β teks="Sistem operasi pilihan anda adalah "
Β Β echo "Pilih Sistem Operasi Anda: "
Β Β echo "1. Linux"
Β Β echo "2. Mac OS"
Β Β echo "3. FreeBSD"
Β Β echo "4. Lainnya"
Β Β echo ""
Β Β echo -n "Masukkan pilihan: "
Β Β read pilih
Β Β case $pilih in
Β Β Β Β Β "1") echo "${teks}Linux";;
Β Β Β Β Β "2") echo "${teks}Mac OS";;
Β Β Β Β Β "3") echo "${teks}FreeBSD";;
Β Β Β Β Β *)Β Β Β echo "Anda memilih sistem operasi lain";;
Β Β esac
Β Β [email protected]:~$ sh case.sh
Β Β Pilih Sistem Operasi Anda:
Β Β 1. Linux
Β Β 2. Mac OS
Β Β 3. FreeBSD
Β Β 4. Lainnya
Β Β Masukkan pilihan: 1
Β Β Sistem operasi pilihan anda adalah Linux
--------------------------
2.7 Menangkap Error Status
--------------------------
Β Β Seperti yang pernah dijelaskan sebelumnya bahwa untuk melihat error status
Β Β dari suatu perintah kita gunakan special variable "$?". Error status ini
Β Β dapat kita gunakan untuk melihat apakah perintah yang kita jalankan berjalan
Β Β tanpa error atau tidak. Error status terdiri dari dua flag yaitu:
Β Β
Β Β +-----------+-----------------+
Β Β | NO. ERROR | STATUS PROGRAMΒ |
Β Β +-----------+-----------------+
Β Β |Β Β Β Β 0Β Β Β Β | OKΒ Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------+
Β Β |Β Β Β !=0Β Β Β | TERJADI ERRORΒ Β |
Β Β +-----------+-----------------+
Β Β
Β Β NOTE: != artinya TIDAK SAMA DENGAN
Β Β
Β Β Setelah anda mengetahui bagaimana menggunakan percabangan pada shell script
Β Β maka kita dapat menggunakanya untuk menangkap error status yang dihasilkan
Β Β oleh suatu program.
Β Β
Β Β [email protected]:~$ nano error-status.sh
Β Β #!/bin/sh
Β Β perintah=`rm /file/ngawur 2>/dev/null`
Β Β if [ $? -eq 0 ] ; then
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β else
Β Β Β Β Β echo "PERINTAH GAGAL, EXIT STATUS: $?"
Β Β fi
Β Β ls / 1>/dev/null
Β Β if [ $? -eq 0 ] ; then
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β else
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β fi
Β Β [email protected]:~$ sh error-status.sh
Β Β PERINTAH GAGAL, EXIT STATUS: 1
Β Β PERINTAH SUKSES, EXIT STATUS: 0
Β Β
Β Β Pada contoh diatas STDERR dan STDOUT semuanya di-redirect ke /dev/null. Hal
Β Β ini agar output perintah rm dan ls tidak muncul dilayar. /dev/null adalah
Β Β semacam file "blackhole" yang dapat kita gunakan untuk mengririm semua output
Β Β yang tidak kita inginkan.
Β Β
Β Β CATATAN:
Β Β Variabel $? hanya berisi error status dari perintah yang TERAKHIR KALI
Β Β dijalankan.
----------------------------------
3.0 Perulangan dalam Shell Script
----------------------------------
Β Β Perbedaan utama kita, manusia dengan komputer adalah jika kita melakukan
Β Β suatu pekerjaan berulang-ulang maka rasa bosan pasti datang. Tidak demikian
Β Β dengan komputer, komputer melakukan hal-hal yang sama sebanyak 1 juta kali
Β Β pun dia akan dengan "senang hati" melakukannya.
Β Β
Β Β Perulangan atau looping adalah pengeksekusian suatu blok perintah selama
Β Β kondisi yang digunakan masih bernilai TRUE. Saya yakin anda pernah disuruh
Β Β orang tua anda waktu kecil untuk berhitung 1 - 10. Dimana jika sudah melebihi
Β Β 10 anda harus berhenti berhitung karena kondisi meminta anda untuk berhenti
Β Β pada saat mencapai sepuluh.
Β Β
Β Β Analogi sederhana diatas dapat menggambarkan bagaimana suatu looping bekerja.
Β Β Dalam shell script terdapat dua tipe perulangan yaitu:
Β Β
Β Β - for loop
Β Β Β Β - for...do...done
Β Β Β Β - for...in...do...done
Β Β - while loop
Β Β
Β Β Umumnnya perulangan `for` digunakan apabila kita sudah tahu batas perulangan
Β Β yang akan kita lakukan. Syntax penulisannya adalah:
Β Β
Β Β for nama_variabel in list
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
Β Β -------------------------
Β Β for (( expr1; expr2; expr3 ))
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
-------------------
3.1 for...do...done
-------------------
Β Β Berikut adalah contoh untuk penggunaan for...do...done.
Β Β
Β Β [email protected]:~$ nano for.sh
Β Β #!/bin/sh
Β Β
Β Β for (( i=0; i<=5; i++ ))
Β Β do
Β Β Β Β Β echo "PENALTI KE-$i GOL"!!!
Β Β done
Β Β [email protected]:~$ sh for.sh
Β Β PENALTI KE-1 GOL!!!
Β Β PENALTI KE-2 GOL!!!
Β Β PENALTI KE-3 GOL!!!
Β Β PENALTI KE-4 GOL!!!
Β Β PENALTI KE-5 GOL!!!
------------------------
3.2 for...in...do...done
------------------------
Β Β Pada for-in terdapat perbedaan cara penggunaan, pada for-in kita melakukan
Β Β perulangan berdasarkan data yang ada pada list. Dimana setiap list dipisahkan
Β Β oleh tanda spasi. Berikut adalah contohnya:
Β Β
Β Β [email protected]:~$ nano for-in.sh
Β Β #!/bin/sh
Β Β for i in 1 2 3 4 5 ; do
Β Β Β Β Β echo -n "$i "
Β Β done
Β Β echo ''
Β Β for abjad in "A B C D E" ; do
Β Β Β Β Β echo -n "$abjad "
Β Β done
Β Β echo ''
Β Β [email protected]:~$ sh for-in.sh
Β Β 1 2 3 4 5
Β Β A B C D E
---------------------
3.3 while...do...done
---------------------
Β Β Bentuk perulangan lain yang juga sering digunakan adalah while. Perulangan
Β Β menggunakan while lebih difokuskan jika kita memang belum mengetahui batas
Β Β perulangan yang dilakukan. Syntax penggunaan while adalah sebagai berikut:
Β Β
Β Β while [ kondisi ]
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
Β Β Berikut adalah contoh penggunaannya:
Β Β
Β Β [email protected]:~$ nano while.sh
Β Β #!/bin/sh
Β Β i=5
Β Β while [ $i -ge 1 ]
Β Β do
Β Β Β Β Β echo "$i Mod 2 = "`expr $i % 2`
Β Β Β Β Β i=`expr $i - 1`
Β Β done
Β Β [email protected]:~$ sh while.sh
Β Β 5 Mod 2 = 1
Β Β 4 Mod 2 = 0
Β Β 3 Mod 2 = 1
Β Β 2 Mod 2 = 0
Β Β 1 Mod 2 = 1
-------------------------
3.4 Percabangan Bersarang
-------------------------
Β Β Suatu percabangan dapat berisi perbacabangan yang lain misalnya for didalam
Β Β for atau while didalam while atau kombinasi keduanya. Nah bentuk inilah yang
Β Β dinamakan percabangan bersarang(nested loop). Jumlah banyaknya nested loop
Β Β dapat dikatakan tidak terbatas.
Β Β
Β Β Anda sebagai pemrogram bebas dapat memasukkan
Β Β sebanyak mungkin percabangan bersarang, tapi tentu dengan berbagai
Β Β pertimbangan teknis. Umumnya maksimal perbacangan bersarang yang sering
Β Β penulis gunakan adalah tiga, namun pada beberapa kondisi bisa lebih dari itu.
Β Β Jadi itu semua relatif terhadap anda sebagai pemrogram dan kondisi yang
Β Β anda hadapi.
Β Β
Β Β Contoh berikut menunjukkan percabangan bersarang menggunakan for dengan
Β Β kedalaman dua level.
Β Β
Β Β [email protected]:~$ nano nested-for.sh
Β Β #!/bin/sh
Β Β for (( i=1; i<=5; i++ ))
Β Β do
Β Β Β Β Β for (( j=1; j<=5; j++ ))
Β Β Β Β Β do
Β Β Β Β Β Β Β Β echo -n "$i "
Β Β Β Β Β done
Β Β Β Β Β echo ""
Β Β done
Β Β [email protected]:~$ sh nested-for.sh
Β Β 1 1 1 1 1
Β Β 2 2 2 2 2
Β Β 3 3 3 3 3
Β Β 4 4 4 4 4
Β Β 5 5 5 5 5
---------------------Β Β
4.0 Soal-soal Latihan
---------------------
Β Β 4.1 Jawab:
Β Β 4.2 Jawab:
Β Β 4.3 Jawab:
Β Β 4.4 Jawab:
Β Β 4.5 Jawab:
Β Β
---------
REFERENSI
---------
http://www.freeos.com/guides/lsst/
http://en.wikipedia.org/wiki/Shell_script
TUTORIAL MINI - SHELL SCRIPT
================================
1. Shell Script
Β Β 1.0 Apa Itu Shell Script?
Β Β 1.1 Variabel
Β Β 1.2 Command Line & Argument
Β Β 1.3 Perhitungan Aritmatik
Β Β 1.4 User input
Β Β 1.5 Piping
Β Β 1.6 Redirection
Β Β 1.7 Fungsi
Β Β
2. Percabangan
Β Β 2.0 Percabangan dalam shell script
Β Β 2.1 if...then...fi
Β Β 2.2 if...then...else...fi
Β Β 2.3 if...then...elif...else...if
Β Β 2.4 nested if
Β Β 2.5 case...in...esac
Β Β 2.6 Menangkap error status
3. Perulangan
Β Β 3.0 Perulangan dalam shell script
Β Β 3.1 for...do...done
Β Β 3.2 for...in...do...done
Β Β 3.3 while...do...done
Β Β 3.4 Perulangan bersarang
Β Β
4. Soal-soal Latihan
Β Β 4.1 Anda ingin membersihkan Cache Firefox jika telah mencapai 5MB
Β Β Β Β Β Β Tips: gunakan perintah `du` untuk mengecek ukuran folder
Β Β 4.2 Anda ingin membuat script untuk melakukan backup otomatis log file server
Β Β Β Β Β Β apache setiap tengah malam lalu otomatis membersihkannya
Β Β 4.3 Anda ingin membuat membuat tampilan seperti berikut menggunakan looping,
Β Β Β Β Β Β 4.3.1
Β Β Β Β Β Β
Β Β Β Β Β Β 1Β Β Β Β Β Β Β Β Β 1Β Β Β Β Β Β Β Β Β Β Β Β Β *Β Β Β Β Β Β Β Β Β Β * * * * *
Β Β Β Β Β Β 22Β Β Β Β Β Β Β Β 12Β Β Β Β Β Β Β Β Β Β Β * *Β Β Β Β Β Β Β Β Β * * * *
Β Β Β Β Β Β 333Β Β Β Β Β Β Β 123Β Β Β Β Β Β Β Β Β * * *Β Β Β Β Β Β Β Β * * *
Β Β Β Β Β Β 4444Β Β Β Β Β Β 1234Β Β Β Β Β Β Β * * * *Β Β Β Β Β Β Β * *
Β Β Β Β Β Β 55555Β Β Β Β Β 12345Β Β Β Β Β * * * * *Β Β Β Β Β Β *
Β Β Β Β Β Β
Β Β 4.4 Anda ingin membuat shell script yang fungsinya mirip dengan program `ps`
Β Β Β Β Β Β yaitu untuk menampilkan proses dan juga informasi system
Β Β 4.5 Anda ingin membuat game tebak angka sederhana dimana jika dijalankan
Β Β Β Β Β Β outputnya akan seperti berikut:
Β Β Β Β Β Β
Β Β Β Β Β Β ***********************************
Β Β Β Β Β Β SELAMAT DATANG DI GAME TEBAK ANGKA
Β Β Β Β Β Β ***********************************
Β Β Β Β Β Β PERATURAN GAME:
Β Β Β Β Β Β 1. Angka diantara 10 - 50
Β Β Β Β Β Β 2. Angka adalah genap
Β Β Β Β Β Β 3. Maksimal percobaan adalah 5 kali
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan Nama: SnipKOM
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 20
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 34
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-2)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 30
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-3)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 28
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-4)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 22
Β Β Β Β Β Β ------------------------ GAME OVER ----------------------------
Β Β Β Β Β Β JAWABAN YANG BENAR ADALAH : 24
Β Β Β Β Β Β Apakah anda ingin coba lagi (y/t) ? y
Β Β Β Β Β Β ---------------------------------------------------------------
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 44
Β Β Β Β Β Β SnipKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Β Β Β Β Β Β
Β Β Β Β Β Β Masukkan angka: 48
Β Β Β Β Β Β ------------- SELAMAT TEBAKAN ANDA BENAR ----------------------
Β Β Β Β Β Β Anda berhasil menebak dalam 2 kali percobaan.
Β Β Β Β Β Β Apakah anda ingin coba lagi (y/t) ? t
Β Β Β Β Β Β ---------------------------------------------------------------
Β Β Β Β Β Β
Β Β Β Β Β Β
Β Β Β Β Β Β Jawaban didapat secara random antara 10 - 50 dan harus genap. Untuk
Β Β Β Β Β Β mendapatan random number pada shell script dapat digunakan beberapa cara
Β Β Β Β Β Β diantaranya:
Β Β Β Β Β Β
Β Β Β Β Β Β 1. Menggunakan magic variable $RANDOM
Β Β Β Β Β Β Β Β Β misal untuk menghasilkan angka range 1 - 10 maka:
Β Β Β Β Β Β Β Β Β echo $[ ($RANDOM % 10) + 1 ]
Β Β Β Β Β Β 2. Langsung berkomunikasi dengan file /dev/random atau /dev/urandom. File
Β Β Β Β Β Β Β Β Β ini isinya selalu berubah sehingga dengan menggunakan perintah `cksum`
Β Β Β Β Β Β Β Β Β kita akan mendapatkan angka yang acak, contoh:
Β Β Β Β Β Β Β Β Β expr `dd if=/dev/urandom count=1 2> /dev/null | cksum | \
Β Β Β Β Β Β Β Β Β cut -d" " -f1` % 10 + 1
Β Β Β Β Β Β
--------------------------------------------------------------------------------
------------------------
1.0 APA ITU SHELL SCRIPT
------------------------
Β Β Dalam lingkungan unix, kata 'shell' mengacu pada semua program yang dapat
Β Β dijalankan pada command line. Jadi secara sederhana shell script merupakan
Β Β kumpulan perintah yang disimpan pada suatu file. Extensi umum yang digunakan
Β Β untuk shell script adalah '.sh', sebenarnya hal ini tidak mutlak karena
Β Β pada dasarnya unix mengabaikan extensi file.
Β Β
Β Β Shell juga dapat mengacu pada program yang menangani command line itu
Β Β sendiri dalam sistem operasi UNIX program tersebut adalah Bourne Shell
Β Β (1978 - Steve Bourne) disingkat sh. Dalam sistem operasi GNU/Linux shell yang
Β Β menjadi standar adalah Bourne Again Shell(bash). Bash merupakan shell yang
Β Β kompatibel dengan sh dan memiliki lebih banyak fitur.
Β Β
Β Β Jika anda ingin menguasai shell script tentu anda harus tahu dan hafal
Β Β sedikit banyak perintah dasar command line, seperti mengkopi file(cp),
Β Β merename file(mv), mencetak string (echo), melihat file(cat), dan beberapa
Β Β perintah dasar lainnya.
Β Β
Β Β Shell script juga menyediakan beberapa fitur yang tersedia pada bahasa
Β Β pemrograman tingkat tinggi seperti variabel, percabangan dan perulangan.
Β Β Berikut ini adalah contoh sederhana penggunakan shell script:
Β Β
Β Β [email protected]:~$ nano hello.sh
Β Β #!/bin/sh
Β Β echo 'HELLO WORLD'
Β Β
Β Β Untuk menjalankan ada dua cara, pertama melalui program shell itu sendiri
Β Β
Β Β [email protected]:~$ sh hello.sh
Β Β
Β Β Kedua adalah mengeksekusinya secara independen, untuk melakukan hal tersebut
Β Β anda harus memberi permission 'execute' pada file.
Β Β
Β Β [email protected]:~$ chmod +x hello.sh
Β Β [email protected]:~$ ./hello.sh
Β Β HELLO WORLD
Β Β
Β Β Baris pertama #!/bin/sh adalah MUTLAK diperlukan dan HARUS diletakkan pada
Β Β BARIS PERTAMA agar file yang anda buat dikenali sistem sebagai shell script.
Β Β Tanda '#!' sering disebut 'shebang' operator. Tanda tersebut menandakan
Β Β bahwa file tersebut adalah shell script. Sisanya misal '/bin/sh' adalah
Β Β lokasi file binari atau program. Dalam contoh kita menggunakan program
Β Β bash '/bin/sh' atau '/bin/bash'.
Β Β
Β Β Tanda # jika tidak terletak pada baris dan kolom paling awal akan dianggap
Β Β sebagai komentar oleh shell.
Β Β
------------
1.1 Variabel
------------
Β Β Pemberian variabel pada shell script bersifat 'dynamic typing' karena
Β Β shell script tidak mengenal adanya tipe data. Pada shell script dikenal
Β Β dua istilah variabel yaitu SYSTEM VARIABLE(SV) dan USER DEFINED VARIABLE
Β Β (UDV). SV adalah kumpulan variabel yang telah dideklarasikan secara otomatis
Β Β oleh shell, sedangkan UDV adalah variabel yang kita buat sendiri. Contoh dari
Β Β variabel SV adalah HOME, SHELL, RANDOM, OSTYPE, dan masih banyak yang lain.
Β Β
Β Β Dalam membuat variabel ada beberapa aturan yang harus dipenuhi agar variabel
Β Β tersebut dianggap valid oleh shell, syntax untuk penamaan variabel adalah:
Β Β
Β Β nama_variabel=NILAI
Β Β
Β Β Perhatikan bahwa tidak ada spasi antara nama_variabel dengan tanda '=' juga
Β Β dengan NILAI. Ini adalah suatu KEHARUSAN. Berikut adalah beberapa aturan
Β Β tentang penamaan variabel:
Β Β
Β Β 1. Variabel HARUS diawali ABJAD atau _ (tidak dapat diawali angka)
Β Β 2. Variabel dapat terdiri dari karakter alphanumeric dan _
Β Β 3. Variabel bersifat CaSe SeNsItIvE
Β Β 4. Jika isi variabel mengandung spasi sebaiknya apit dengan tanda petik (')
Β Β Β Β Β atau (").
Β Β 5. Gunakan escape character (\) untuk karakter non-literal
Β Β Β Β Β seperti (\', \$, \?, dll)
Β Β
Β Β Untuk mencetak nilai dari suatu variabel digunakan tanda dollar ($) didepan
Β Β nama variabel, contoh:
Β Β
Β Β [email protected]:~$ a='Hello '
Β Β [email protected]:~$ b='World!'
Β Β [email protected]:~$ echo $a$b
Β Β Hello World!
Β Β [email protected]:~$ echo ${a}${b}
Β Β Hello World!
Β Β
Β Β Cara yang terakhir adalah cara yang disarankan untuk menghindari kesalahan
Β Β dalam melakukan concat string.
Β Β
Β Β Jika anda ingin menyimpan output dari suatu perintah kedalam suatu variabel
Β Β gunakan tanda backtick (`). Contoh, kita akan melihat isi direktori home
Β Β lalu menyimpannya dalam variabel isi_home.
Β Β
Β Β [email protected]:~$ isi_home=`ls /home`
Β Β [email protected]:~$ echo $isi_home
Β Β
Β Β Dalam shel juga terdapat SPECIAL VARIABEL untuk mendapatkan exit status dari
Β Β suatu program. Pada UNIX setiap program dinyatakan selesai TANPA error
Β Β apabila exit statusnya SAMA DENGAN 0. Selain itu maka program tersebut
Β Β selesai tapi dengan error. Variabel tersebut adalah "$?".
Β Β
Β Β [email protected]:~$ ls /home
Β Β [email protected]:~$ echo $?
Β Β 0
Β Β [email protected]:~$ ls /file/ngawur
Β Β [email protected]:~$ echo $?
Β Β 2
Β Β
Β Β Angka 2(TIDAK SAMA DENGAN 0) menunjukkan bahwa program ls keluar dengan
Β Β status terjadi error. Penggunaan exit sangat penting saat kita membuat
Β Β shell script yang kompleks, dimana didalamnya kita banyak menggunakan
Β Β program lain.
Β Β
------------------------------
1.2 Command Line dan Argument
------------------------------
Β Β Ketika berbicara shell script kita pasti berhubungan dengan command line.
Β Β Apabila berbicara tentang command line pasti berhubungan dengan argument.
Β Β Apaliba berbicara tentang argument.....cukup....cukup.... nanti malah sampai
Β Β sejarah kerajaan majapahit nantinya :)
Β Β
Β Β Perintah-perintah command line umumnya memerlukan minimal satu buah argumen
Β Β agar dapat mengerjakan tugasnya secara optimal. Apa itu argument? secara
Β Β sederhana argumen adalah text/character yang ditempatkan setelah nama program
Β Β dengan pemisah minimal satu spasi.
Β Β
Β Β Contoh berikut mengilustrasikan pemberian dua argument pada perinta copy file
Β Β `cp`. Perintah cp memerlukan dua argument yaitu 1)lokasi file awal
Β Β 2)lokasi file tujuan
Β Β
Β Β [email protected]:~$ cp /foo/bar /tmp/bar
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ^Β Β Β Β Β Β ^
Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β argument-1Β argument-2
Β Β
Β Β Pada sistem Linux dikenal dua istilah argument short style(UNIX style) dan
Β Β long style(GNU Style). Hampir setiap program command line pada linux
Β Β menyediakan dua opsi tersebut saat memberikan argument. Penulisan argument
Β Β UNIX style biasanya hanya terdiri dari satu huruf contoh '-l' pada perintah
Β Β `ls`.
Β Β
Β Β [email protected]:~$ ls -l
Β Β
Β Β Sedangkan GNU style umumnya terdiri dari minimal sebuah kata contoh
Β Β '--all' pada perintah `ls`.
Β Β
Β Β [email protected]:~$ ls --all
Β Β
Β Β Untuk membaca argument dalam shell script digunakan special variabel yaitu
Β Β $0, $1, $2,...$9. Variabel $0 adalah nama program itu sendiri.
Β Β
Β Β CATATAN:
Β Β Untuk mengetahui jumlah argument yang diinputkan user gunakan variabel $#,
Β Β sedangkan untuk mendapatkan seluruh argument gunakan variabel $*.
Β Β
Β Β LATIHAN:
Β Β Buat sebuah shell script untuk menampilkan nama user, nama tersebut
Β Β diinput melalui argument ke-1
Β Β
Β Β JAWAB:
Β Β [email protected]:~$ nano nama.sh
Β Β #!/bin/sh
Β Β nama=$1
Β Β echo 'Halo '$nama', selamat datang!'
Β Β
Β Β [email protected]:~$ chmod +x nama.sh
Β Β [email protected]:~$ ./nama.sh BB
Β Β Halo Akom, selamat datang!
Β Β [email protected]:~$ ./nama.shΒ BB ACEH'
Β Β Halo Akom, selamat datang!
Β Β [email protected]:~$ ./nama.sh ' BB ACEH'
Β Β Halo Cyber_Sniper, selamat datang!
Β Β
Β Β CATATAN:
Β Β Untuk menyimpan file pada nano Tekan CTRL-O lalu jika ingin keluar tekan
Β Β CTRL-X.
--------------------------
1.3 Perhitungan Aritmatik
--------------------------
Β Β Untuk melakukan perhitungan aritmatik, shell tidak memiliki kemampuan
Β Β built-in, tetapi meminta bantuan program lain yaitu `expr`. Program expr
Β Β berfungsi untuk mengevaluasi suatu expresi baik itu perbandingan string
Β Β atau operasi aritmatik sederhana.
Β Β
Β Β Operator aritmatik yang disediakan expr antaran lain:
Β Β +-----------+-----------------------------------------------------------+
Β Β | OperatorΒ | KETERANGANΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β +Β Β Β Β | Operator Penjumlahan contoh: expr 1 + 1Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β -Β Β Β Β | Operator Pengurangan contoh: expr 10 - 9Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β *Β Β Β Β | Operator Perkalian contoh: expr 10 \* 10Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β /Β Β Β Β | Operator Pembagian contoh: expr 10 / 2Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β |Β Β Β Β %Β Β Β Β | Operator Modulus contoh: expr 15 % 3Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------------------------------------------------+
Β Β
Β Β Selain digunakan untuk perhitungan aritmatik, perintah `expr` juga cukup
Β Β handal untuk melakukan manipulasi string, untuk lebih jelas silahkan lihat
Β Β halaman manual dari expr dengan mengetikkan `man expr`.
Β Β
Β Β LATIHAN:
Β Β Buatlah sebuah shell script untuk menghitung nilai dari argument-1 dikali
Β Β argument-2 ditambah argument-3!
Β Β
Β Β JAWABAN:
Β Β Secara matematis perhitungannya adalah
Β Β
Β Β (argument-1 + argument-2) + argument-3.
Β Β
Β Β Tidak seperti bahasa tingkat tinggi, pada shell script untuk memberi
Β Β prioritas pada suatu perhitungan kita menggunakan tanda $[ ... ]. Jadi
Β Β perhitungannya menjadi
Β Β
Β Β $[ argument-1 + argument-3 ] + argument-3
Β Β
Β Β Keuntungan lain ketika kita menggunakan tanda $[...] adalah kita tidak perlu
Β Β melakukan escaping character pada tanda perkalian(*). Berikut ini adalah
Β Β shell scriptnya.
Β Β
Β Β [email protected]:~$ nano hitung.sh
Β Β #!/bin/sh
Β Β bil1=$1
Β Β bil2=$2
Β Β bil3=$3
Β Β echo -n "HASIL DARI $bil1 * $bil2 + $bil3 = "
Β Β echo `expr $[ $bil1 * $bil2 ] + $bil3`
Β Β [email protected]:~$ chmod +x hitung.sh
Β Β [email protected]:~$ ./hitung.sh 10 10 10
Β Β HASIL DARI 10 * 10 + 10 = 110
Β Β
---------------
1.4 User Input
---------------
Β Β Selain melalui argument pada command line, cara lain untuk mendapatkan input
Β Β dari user adalah melalui STANDARD INPUT (STDIN). Dimana user langsung
Β Β mengetikkan isi dari suatu nilai yang program inginkan.
Β Β
Β Β Untuk mendapatkan input dari user dapat digunakan perintah `read`. Perintah
Β Β read tidak begitu berguna jika kita tidak menyimpan hasil inputan tersebut
Β Β kedalam sebuah variabel. Untuk menyimpan hasil inputan kita harus memberi
Β Β satu argument pada perintah read. Argument inilah yang akan menyimpan nilai
Β Β yang diinputkan. Contoh,
Β Β
Β Β [email protected]:~$ read a
Β Β 10
Β Β [email protected]:~$ read b
Β Β 5
Β Β [email protected]:~$ expr $a \* $b
Β Β 50
Β Β
Β Β LATIHAN:
Β Β Sama dengan latihan sebelumnya, hanya saja kali ini gunakan perintah read
Β Β untuk membaca setiap bilangan yang diinputkan user.
Β Β
Β Β JAWABAN:
Β Β [email protected]:~$ nano hitung2.sh
Β Β #!/bin/sh
Β Β # deklarasikan variabel dengan nilai NULL
Β Β bil1=
Β Β bil2=
Β Β bil3=
Β Β echo -n 'Masukkan bilangan-1: '
Β Β read bil1
Β Β echo -n 'Masukkan bilangan-2: '
Β Β read bil2
Β Β echo -n 'Masukkan bilangan-3: '
Β Β read bil3
Β Β echo ''
Β Β echo -n "Hasil dari $bil1 * $bil2 + $bil3 = "
Β Β echo `expr $[ $bil1 * $bil2 ] + $bil3`
Β Β [email protected]:~$ chmod +x hitung2.sh
Β Β [email protected]:~$ ./hitung2
Β Β Masukkan bilangan-1: 10
Β Β Masukkan bilangan-2: 10
Β Β Masukkan bilangan-3: 10
Β Β Hasil dari 10 * 10 + 10 = 110
Β Β
----------Β Β
1.5 Piping
----------
Β Β Piping merupakan penggabungan dua atau lebih perintah dimana output dari
Β Β perintah sebelumnya digunakan sebagai input untuk perintah selanjutnya.
Β Β Simbol yang digunakan untuk membatasi perintah yang satu dengan yang lain
Β Β adalah tanda pipe "|". Berikut adalah beberapa contoh sederhana penggunaan
Β Β piping pada command line.
Β Β
Β Β [email protected]:~$ cat /etc/passwd | wc -l
Β Β [email protected]:~$ cat /etc/passwd | sort -r
Β Β [email protected]:~$ cat /etc/passwd | grep "/bin/sh/" | wc -l
---------------
1.6 Redirection
---------------
Β Β Secara umum jika kita ingin mengambil inputan maka kita mengambil dari
Β Β STANDARD INPUT (STDIN) yaitu keyboard. Sedangkan hasil output program yang
Β Β tercetak di layar monitor kita disebut STANDARD OUTPUT (STDOUT). Hampir sama
Β Β dengan STDOUT, error yang dihasilkan program juga ditampilkan lewat monitor
Β Β biasa disebut STANDARD ERROR (STDERR). Setiap standard mempunyai kode file
Β Β descriptor sendiri-sendiri diantaranya:
Β Β
Β Β - STDIN => File Descriptor: 0
Β Β - STDOUT => File Descriptor: 1
Β Β - STDERR => File Descriptor: 2
Β Β
Β Β Dengan mengetahui file descriptor tersebut kita dapat melakukan redirection
Β Β (pengalihan), misal dari dari STDOUT menjadi STDERR atau sebaliknya.
Β Β Terdapat tiga simbol untuk melakukan redirection diantarnya:
Β Β
Β Β 1.
Β Β Simbol: ">"
Β Β Keterangan: Simbol tersebut akan meredirect output ke dalam suatu file. Jika
Β Β Β Β Β Β Β Β Β Β Β Β Β Β file tersebut belum ada maka akan buat secara otomatis, jika
Β Β Β Β Β Β Β Β Β Β Β Β Β Β file sudah ada ada maka isinya akan di-overwrite/ditimpa.
Β Β
Β Β 2.
Β Β Simbol: ">>"
Β Β Keterangan: Hampir sama dengan ">" hanya saja jika file sudah ada, maka file
Β Β Β Β Β Β Β Β Β Β Β Β Β Β isi tersebut tidak dioverwrite tetapi ditambah.
Β Β
Β Β 3.
Β Β Simbol: "<"
Β Β Keterangan: Simbol "<" artinya input tidak diambil dari STDIN melainkan dari
Β Β Β Β Β Β Β Β Β Β Β Β Β Β sebuah file.
Β Β
Β Β Sebagai contoh sederhana, ketika anda mengetikkan perintah `ls /nama/dir`
Β Β maka secara default program ls akan menampilkan output ke STDOUT yaitu
Β Β layar monitor. Jika kita ingin meredirect output yang dihasilkan kedalam
Β Β sebuah file maka kita dapat menggunakan simbol ">" atau ">>". Intinya segala
Β Β STDOUT dapat dilakukan redirect.
Β Β
Β Β [email protected]:~$ echo 'DAFTAR ISI FOLDER LUG' > /tmp/data.txt
Β Β [email protected]:~$ ls /home/luAkom >> /tmp/data.txt
Β Β
Β Β Untuk contoh "<" kita akan menggunakan program tr, program ini dapat kita
Β Β gunakan untuk manipulasi teks. Input yang akan kita berikan ke tr adalah
Β Β dari sebuah file, nantinya teks yang ada pada file tersebut akan di-UPPER
Β Β CASE semua.
Β Β
Β Β [email protected]:~$ echo 'SMK ACEH UTARA' > /tmp/[email protected]
Β Β [email protected]:~$ tr "[a-z]" "[A-Z]" < /tmp/[email protected]
Β Β Snip@Akom
Β Β
Β Β Selain meredirect ke file kita juga dapat melakukan redirect ke file
Β Β descriptor lain. Misal dari STDOUT ke STDERR atau sebaliknya.
Β Β
Β Β [email protected]:~$ rm /file/ngawur 2>&1
Β Β [email protected]:~$ ls / 1>&2
Β Β
-----------
1.7 FUNGSI
-----------
Β Β Hampir sama dengan bahasa pemrograman tingkat tinggi, pada shell script juga
Β Β dikenal istilah fungsi. Dimana dengan adanya fungsi kita dapat membagi
Β Β kode kita ke dalam sub-sub yang lebih kecil. Hal ini sangat berguna jika kita
Β Β membangun sebuah program shell script yang cukup kompleks. Syntax penggunaan
Β Β fungsi pada shell script adalah:
Β Β
Β Β function nama-fungsi()
Β Β {
Β Β Β Β Β perintah
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β Β Β Β return
Β Β }
Β Β LATIHAN:
Β Β Buatlah shell script untuk mencetak banner seperti output berikut:
Β Β
Β Β [email protected]:~$ ./fungsi.sh
Β Β ==============================
Β Β Β SELAMAT DATANG DI LUG-AKOM
Β Β ==============================
Β Β HARI INI: Rabu, 14-05-2008
Β Β
Β Β Tulisan "SELAMAT blabla..." diletakkan dalam fungsi tersendiri, begitu pula
Β Β fungsi untuk mencetak tanggal. Fungsi mencetak tanggal nantinya akan
Β Β dipanggil didalam fungsi yang mencetak tulisan "SELAMAT...".
Β Β
Β Β JAWAB:
Β Β [email protected]:~$ nano fungsi.sh
Β Β #!/bin/sh
Β Β function indo_date() {
Β Β Β Β Β Β Β Β Β Β echo `date +"%A, %d-%m-%Y"`
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β function welcome() {
Β Β Β Β Β Β Β Β Β Β echo "=============================="
Β Β Β Β Β Β Β Β Β Β echo " SELAMAT DATANG DI LUG-AKOM"
Β Β Β Β Β Β Β Β Β Β echo "=============================="
Β Β Β Β Β Β Β Β Β Β echo -n "HARI INI: "
Β Β Β Β Β Β Β Β Β Β indo_date
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β welcome
Β Β [email protected]:~$ chmod +x fungsi.sh
Β Β
Β Β Apakah fungsi pada shell script juga menerima parameter? YA tapi dengan
Β Β sedikit "nyeleneh". Kenapa? jika pada bahasa pemrograman umumnya parameter
Β Β diletakkan diantara tanda (), tidak demikian dengan shell script. Cara
Β Β pengambilan parameter pada shell script sama dengan pengambilan argument
Β Β pada program shell script itu sendiri. Jadi kita dapat menggunakan variabel
Β Β $*, $#, $0, $1, dan seterusnya.
Β Β
Β Β Dibawah ini adalah contoh pembuatan fungsi untuk mengubah text menjadi
Β Β UPPER-CASE.
Β Β
Β Β [email protected]:~$ nano fungsi2.sh
Β Β #!/bin/sh
Β Β function toUpperCase() {
Β Β Β Β Β Β Β Β Β Β teks=$*
Β Β Β Β Β Β Β Β Β Β echo $teks | tr "[a-z]" "[A-Z]"
Β Β Β Β Β Β Β Β Β Β return
Β Β }
Β Β echo -n "Masukkan teks(lowercase): "
Β Β read foo
Β Β toUpperCase $foo
Β Β [email protected]:~$ chmod +x fungsi2.sh
Β Β [email protected]:~$ ./fungsi2.sh
Β Β Masukkan teks(lowercase): ini lower case
Β Β INI LOWER CASE
Β Β Pada contoh diatas kita menggunakan variabel $* untuk mengambil parameter
Β Β bukan $1 atau $2 dkk karena yang akan diinputkan user kemungkinan mengandung
Β Β dua kata atau lebih. Jadi jika kita menggunakan variabel $1 maka yang terbaca
Β Β hanya kata pertama. Untuk itu kita gunakan variabel $* yang akan membaca
Β Β semua parameter.
Β Β
---------------
2.0 Percabangan
---------------
Β Β Dengan menggunakan percabangan/branching maka kita dapat mengontrol alur
Β Β dari shell script yang kita buat. Hal ini memungkinkan kita untuk menulis
Β Β program yang sangat kompleks pada shell script. Syntax penggunaan percabangan
Β Β pada shell script adalah:
Β Β
Β Β if kondisi
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β -----------
Β Β if kondisi
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β else
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β -----------
Β Β if kondisi1
Β Β then
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β elif kondisi1
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β elif kondisi-n
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β else
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β fi
Β Β --------------
Β Β case $variabel in
Β Β Β Β Β pattern1) perintah
Β Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β Β Β Β Β Β Β perintah;;
Β Β Β Β Β pattern1) perintah
Β Β Β Β Β Β Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β Β Β Β Β Β Β perintah;;
Β Β Β Β Β *) perintah
Β Β Β Β Β Β Β Β ...
Β Β Β Β Β Β Β Β perintah;;
Β Β esac
Β Β
Β Β Untuk melakukan perbandingan kondisi pada data kita dapat menggunakan
Β Β perintah `test`(man test) atau meletakkannya dalam blok [ ].
Β Β
Β Β Berikut ini adalah operator yang dapat digunakan untuk membandingkan data
Β Β NUMERIK:
Β Β
Β Β +------------+-----------------------------------+
Β Β | OPERATORΒ Β | KETERANGANΒ Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -eqΒ Β Β Β | SAMA DENGAN (=)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -neΒ Β Β Β | TIDAK SAMA DENGAN (!=)Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -gtΒ Β Β Β | LEBIH BESAR (>)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -geΒ Β Β Β | LEBIH BESAR ATAU SAMA DENGAN (>=) |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -ltΒ Β Β Β | KURANG DARI (<)Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +------------+-----------------------------------+
Β Β |Β Β Β -leΒ Β Β Β | KURANG DARI ATAU SAMA DENGAN (<=) |
Β Β +------------+-----------------------------------+
Β Β
-------------------
2.1 if...then...fi
------------------
Β Β
Β Β [email protected]:~$ nano if-then-fi.sh
Β Β #!/bin/sh
Β Β
Β Β num_arg=$#
Β Β bil1=$1
Β Β bil2=$2
Β Β function help() {
Β Β Β Β Β echo 'Penggunaan: '
Β Β Β Β Β echo "$0 bil1 bil2"
Β Β Β Β Β echo ''
Β Β Β Β Β echo Dimana bil1 dan bil2 harus angka genap.
Β Β Β Β Β return
Β Β }
Β Β function cek_arg() {
Β Β Β Β Β if test $num_arg -lt 2
Β Β Β Β Β then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1Β Β Β # keluar dengan exit status 1
Β Β Β Β Β fi
Β Β Β
Β Β Β Β Β if [ `expr $bil1 % 2` -ne 0 ] ; then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1
Β Β Β Β Β fi
Β Β Β
Β Β Β Β Β if [ `expr $bil2 % 2` -ne 0 ]
Β Β Β Β Β then
Β Β Β Β Β Β Β Β help
Β Β Β Β Β Β Β Β exit 1
Β Β Β Β Β fi
Β Β Β Β Β return
Β Β }
Β Β cek_arg
Β Β echo 'Argument anda adalah '$bil1' dan '$bil2
Β Β exit 0
Β Β [email protected]:~$ chmod +x if-then-fi.sh
Β Β [email protected]:~$ ./if-then-fi.sh
Β Β Penggunaan:
Β Β ./if-then-fi.sh bil1 bil2
Β Β Dimana bil1 dan bil2 harus angka genap.
Β Β [email protected]:~$ echo $?
Β Β 1
Β Β [email protected]:~$ ./if-then-fi.sh 2 4
Β Β Argument anda adalah 2 dan 4
Β Β [email protected]:~$ echo $?
Β Β 0
Β Β
Β Β Perintah exit pada shell script dapat digunakan untuk keluar langsung dari
Β Β program. Pada contoh diatas, jika terdapat kesalahan kita keluar dengan exit
Β Β status 1( bukan 0 ) artinya program selesai tapi dengan error. Error status
Β Β tidak harus 1 tapi bisa sembarang angka asal BUKAN 0.
-------------------------
2.2 if...then...else...fi
-------------------------
Β Β Statement pada blok else akan dieksekusi jika kondisi pada pada blok if
Β Β bernilai false.
Β Β
Β Β [email protected]:~$ nano if-else.sh
Β Β #!/bin/sh
Β Β
Β Β if test $1 -ge 0
Β Β then
Β Β Β Β Β echo "Argument bernilai positif"
Β Β else
Β Β Β Β Β echo "Argument bernilai negatif"
Β Β fi
Β Β [email protected]:~$ chmod +x if-else.sh
Β Β [email protected]:~$ ./if-else 10
Β Β Argument bernilai positif
Β Β [email protected]:~$ ./if-else -2
Β Β Argument bernilai negatif
--------------------------------
2.3 if...then...elif...else...fi
--------------------------------
Β Β Statement elif digunakan jika kita ingin memilih lebih dari dua kondisi.
Β Β
Β Β [email protected]:~$ nano if-elif.sh
Β Β #!/bin/sh
Β Β pilih=
Β Β teks="Sistem operasi pilihan anda adalah "
Β Β echo "Pilih Sistem Operasi Anda: "
Β Β echo "1. Linux"
Β Β echo "2. Mac OS"
Β Β echo "3. FreeBSD"
Β Β echo "4. Lainnya"
Β Β echo ""
Β Β echo -n "Masukkan pilihan: "
Β Β read pilih
Β Β if [ $pilih = "1" ] ; then
Β Β Β Β Β echo "${teks}Linux"
Β Β elif [ $pilih = "2" ] ; then
Β Β Β Β Β echo "${teks}Mac OS"
Β Β elif [ $pilih = "3" ] ; then
Β Β Β Β Β echo "${teks}FreeBSD"
Β Β else
Β Β Β Β Β echo "Anda memilih sistem operasi lain"
Β Β fi
Β Β [email protected]:~$ chmod +x if-elif.sh
Β Β [email protected]:~$ ./if-elif.sh
Β Β Pilih Sistem Operasi Anda:
Β Β 1. Linux
Β Β 2. Mac OS
Β Β 3. FreeBSD
Β Β 4. Lainnya
Β Β Masukkan pilihan: 3
Β Β Sistem operasi pilihan anda adalah FreeBSD
-------------
2.5 Nested If
-------------
Β Β Pada shell script anda juga dapat meletakkan blok if didalam if atau istilah
Β Β "kerennya" nested if. Berikut adalah contoh sederhana penggunaannya.
Β Β
Β Β [email protected]:~$ nano nested-if.sh
Β Β #!/bin/bash
Β Β bil=$1
Β Β if [ `expr $bil % 2` -eq 0 ] ; then
Β Β Β Β Β if [ $bil -ge 0 ] ; then
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan genap dan >= 0"
Β Β Β Β Β else
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan genap dan < 0"
Β Β Β Β Β fi
Β Β else
Β Β Β Β Β if [ $bil -ge 0 ] ; then
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan ganjil dan >= 0"
Β Β Β Β Β else
Β Β Β Β Β Β Β Β echo "Angka yang anda masukkan ganjil dan < 0"
Β Β Β Β Β fi
Β Β fi
Β Β [email protected]:~$ sh nested-if.sh 10
Β Β Angka yang anda masukkan genap dan >= 0
Β Β [email protected]:~$ sh nested-if.sh -5
Β Β Angka yang anda masukkan ganjil dan < 0
--------------------
2.6 case...in...esac
--------------------
Β Β Perintah case hampir sama dengan if-then-elif-else-fi karena dapat memilih
Β Β dari banyak kondisi. Sebagian orang lebih suka menggunakan case...esac
Β Β dibanding multi level-if karena lebih mudah dibaca.
Β Β Pada contoh dibawah ini adalah modifikasi dari contoh if-then-elif-else-fi
Β Β yang pernah dibahas sebelumnya menggunakan case...in...esac.
Β Β
Β Β [email protected]:~$ nano case.sh
Β Β #!/bin/sh
Β Β pilih=
Β Β teks="Sistem operasi pilihan anda adalah "
Β Β echo "Pilih Sistem Operasi Anda: "
Β Β echo "1. Linux"
Β Β echo "2. Mac OS"
Β Β echo "3. FreeBSD"
Β Β echo "4. Lainnya"
Β Β echo ""
Β Β echo -n "Masukkan pilihan: "
Β Β read pilih
Β Β case $pilih in
Β Β Β Β Β "1") echo "${teks}Linux";;
Β Β Β Β Β "2") echo "${teks}Mac OS";;
Β Β Β Β Β "3") echo "${teks}FreeBSD";;
Β Β Β Β Β *)Β Β Β echo "Anda memilih sistem operasi lain";;
Β Β esac
Β Β [email protected]:~$ sh case.sh
Β Β Pilih Sistem Operasi Anda:
Β Β 1. Linux
Β Β 2. Mac OS
Β Β 3. FreeBSD
Β Β 4. Lainnya
Β Β Masukkan pilihan: 1
Β Β Sistem operasi pilihan anda adalah Linux
--------------------------
2.7 Menangkap Error Status
--------------------------
Β Β Seperti yang pernah dijelaskan sebelumnya bahwa untuk melihat error status
Β Β dari suatu perintah kita gunakan special variable "$?". Error status ini
Β Β dapat kita gunakan untuk melihat apakah perintah yang kita jalankan berjalan
Β Β tanpa error atau tidak. Error status terdiri dari dua flag yaitu:
Β Β
Β Β +-----------+-----------------+
Β Β | NO. ERROR | STATUS PROGRAMΒ |
Β Β +-----------+-----------------+
Β Β |Β Β Β Β 0Β Β Β Β | OKΒ Β Β Β Β Β Β Β Β Β Β Β Β |
Β Β +-----------+-----------------+
Β Β |Β Β Β !=0Β Β Β | TERJADI ERRORΒ Β |
Β Β +-----------+-----------------+
Β Β
Β Β NOTE: != artinya TIDAK SAMA DENGAN
Β Β
Β Β Setelah anda mengetahui bagaimana menggunakan percabangan pada shell script
Β Β maka kita dapat menggunakanya untuk menangkap error status yang dihasilkan
Β Β oleh suatu program.
Β Β
Β Β [email protected]:~$ nano error-status.sh
Β Β #!/bin/sh
Β Β perintah=`rm /file/ngawur 2>/dev/null`
Β Β if [ $? -eq 0 ] ; then
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β else
Β Β Β Β Β echo "PERINTAH GAGAL, EXIT STATUS: $?"
Β Β fi
Β Β ls / 1>/dev/null
Β Β if [ $? -eq 0 ] ; then
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β else
Β Β Β Β Β echo "PERINTAH SUKSES, EXIT STATUS: $?"
Β Β fi
Β Β [email protected]:~$ sh error-status.sh
Β Β PERINTAH GAGAL, EXIT STATUS: 1
Β Β PERINTAH SUKSES, EXIT STATUS: 0
Β Β
Β Β Pada contoh diatas STDERR dan STDOUT semuanya di-redirect ke /dev/null. Hal
Β Β ini agar output perintah rm dan ls tidak muncul dilayar. /dev/null adalah
Β Β semacam file "blackhole" yang dapat kita gunakan untuk mengririm semua output
Β Β yang tidak kita inginkan.
Β Β
Β Β CATATAN:
Β Β Variabel $? hanya berisi error status dari perintah yang TERAKHIR KALI
Β Β dijalankan.
----------------------------------
3.0 Perulangan dalam Shell Script
----------------------------------
Β Β Perbedaan utama kita, manusia dengan komputer adalah jika kita melakukan
Β Β suatu pekerjaan berulang-ulang maka rasa bosan pasti datang. Tidak demikian
Β Β dengan komputer, komputer melakukan hal-hal yang sama sebanyak 1 juta kali
Β Β pun dia akan dengan "senang hati" melakukannya.
Β Β
Β Β Perulangan atau looping adalah pengeksekusian suatu blok perintah selama
Β Β kondisi yang digunakan masih bernilai TRUE. Saya yakin anda pernah disuruh
Β Β orang tua anda waktu kecil untuk berhitung 1 - 10. Dimana jika sudah melebihi
Β Β 10 anda harus berhenti berhitung karena kondisi meminta anda untuk berhenti
Β Β pada saat mencapai sepuluh.
Β Β
Β Β Analogi sederhana diatas dapat menggambarkan bagaimana suatu looping bekerja.
Β Β Dalam shell script terdapat dua tipe perulangan yaitu:
Β Β
Β Β - for loop
Β Β Β Β - for...do...done
Β Β Β Β - for...in...do...done
Β Β - while loop
Β Β
Β Β Umumnnya perulangan `for` digunakan apabila kita sudah tahu batas perulangan
Β Β yang akan kita lakukan. Syntax penulisannya adalah:
Β Β
Β Β for nama_variabel in list
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
Β Β -------------------------
Β Β for (( expr1; expr2; expr3 ))
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
-------------------
3.1 for...do...done
-------------------
Β Β Berikut adalah contoh untuk penggunaan for...do...done.
Β Β
Β Β [email protected]:~$ nano for.sh
Β Β #!/bin/sh
Β Β
Β Β for (( i=0; i<=5; i++ ))
Β Β do
Β Β Β Β Β echo "PENALTI KE-$i GOL"!!!
Β Β done
Β Β [email protected]:~$ sh for.sh
Β Β PENALTI KE-1 GOL!!!
Β Β PENALTI KE-2 GOL!!!
Β Β PENALTI KE-3 GOL!!!
Β Β PENALTI KE-4 GOL!!!
Β Β PENALTI KE-5 GOL!!!
------------------------
3.2 for...in...do...done
------------------------
Β Β Pada for-in terdapat perbedaan cara penggunaan, pada for-in kita melakukan
Β Β perulangan berdasarkan data yang ada pada list. Dimana setiap list dipisahkan
Β Β oleh tanda spasi. Berikut adalah contohnya:
Β Β
Β Β [email protected]:~$ nano for-in.sh
Β Β #!/bin/sh
Β Β for i in 1 2 3 4 5 ; do
Β Β Β Β Β echo -n "$i "
Β Β done
Β Β echo ''
Β Β for abjad in "A B C D E" ; do
Β Β Β Β Β echo -n "$abjad "
Β Β done
Β Β echo ''
Β Β [email protected]:~$ sh for-in.sh
Β Β 1 2 3 4 5
Β Β A B C D E
---------------------
3.3 while...do...done
---------------------
Β Β Bentuk perulangan lain yang juga sering digunakan adalah while. Perulangan
Β Β menggunakan while lebih difokuskan jika kita memang belum mengetahui batas
Β Β perulangan yang dilakukan. Syntax penggunaan while adalah sebagai berikut:
Β Β
Β Β while [ kondisi ]
Β Β do
Β Β Β Β Β ...
Β Β Β Β Β ...
Β Β done
Β Β Berikut adalah contoh penggunaannya:
Β Β
Β Β [email protected]:~$ nano while.sh
Β Β #!/bin/sh
Β Β i=5
Β Β while [ $i -ge 1 ]
Β Β do
Β Β Β Β Β echo "$i Mod 2 = "`expr $i % 2`
Β Β Β Β Β i=`expr $i - 1`
Β Β done
Β Β [email protected]:~$ sh while.sh
Β Β 5 Mod 2 = 1
Β Β 4 Mod 2 = 0
Β Β 3 Mod 2 = 1
Β Β 2 Mod 2 = 0
Β Β 1 Mod 2 = 1
-------------------------
3.4 Percabangan Bersarang
-------------------------
Β Β Suatu percabangan dapat berisi perbacabangan yang lain misalnya for didalam
Β Β for atau while didalam while atau kombinasi keduanya. Nah bentuk inilah yang
Β Β dinamakan percabangan bersarang(nested loop). Jumlah banyaknya nested loop
Β Β dapat dikatakan tidak terbatas.
Β Β
Β Β Anda sebagai pemrogram bebas dapat memasukkan
Β Β sebanyak mungkin percabangan bersarang, tapi tentu dengan berbagai
Β Β pertimbangan teknis. Umumnya maksimal perbacangan bersarang yang sering
Β Β penulis gunakan adalah tiga, namun pada beberapa kondisi bisa lebih dari itu.
Β Β Jadi itu semua relatif terhadap anda sebagai pemrogram dan kondisi yang
Β Β anda hadapi.
Β Β
Β Β Contoh berikut menunjukkan percabangan bersarang menggunakan for dengan
Β Β kedalaman dua level.
Β Β
Β Β [email protected]:~$ nano nested-for.sh
Β Β #!/bin/sh
Β Β for (( i=1; i<=5; i++ ))
Β Β do
Β Β Β Β Β for (( j=1; j<=5; j++ ))
Β Β Β Β Β do
Β Β Β Β Β Β Β Β echo -n "$i "
Β Β Β Β Β done
Β Β Β Β Β echo ""
Β Β done
Β Β [email protected]:~$ sh nested-for.sh
Β Β 1 1 1 1 1
Β Β 2 2 2 2 2
Β Β 3 3 3 3 3
Β Β 4 4 4 4 4
Β Β 5 5 5 5 5
---------------------Β Β
4.0 Soal-soal Latihan
---------------------
Β Β 4.1 Jawab:
Β Β 4.2 Jawab:
Β Β 4.3 Jawab:
Β Β 4.4 Jawab:
Β Β 4.5 Jawab:
Β Β
---------
REFERENSI
---------
http://www.freeos.com/guides/lsst/
http://en.wikipedia.org/wiki/Shell_script
Category
Komentar