Linux : Pemrograman Shell
Pemrograman
Shell
POKOK
BAHASAN:
TUJUAN BELAJAR:
Setelah mempelajari materi
dalam bab ini, mahasiswa diharapkan mampu:
·
Mempelajari elemen dasar
shell script
·
Membuat program shell
interaktif
·
Menggunakan parameter dalam
program
·
Mempelajari test kondisi
serta operator logic yang terkait dengan instruksi test
·
Mengenal variable built-in
dari shell
·
Membuat aplikasi dengan
shell menggunakan konstruksi if-then-else Menggunakan
struktur case – esac.
·
Loop dengan while, for, do
while.
·
Membuat fungsi dan
mengetahui cara memanggil fungsi tersebut.
DASAR
TEORI:
1.
SHELL
SCRIPT
Shell script dibuat dengan editor teks (ASCII editor) dan
umumnya diberikan ekstensi “.sh”. Script
selalu diawali dengan komentar, yang dimulai dengan tanda #, disambung dengan !
dan nama shell yang digunakan.
#!/bin/sh
# Program shell
#
var1=x
var2=8
a)
Awal dari program shell, komentar
awal ini akan dibaca oleh system, kemudian system mengaktifkan program shell
(/bin/sh) yang tertera di situ. Program
shell dapat dipilih, misalnya /bin/csh, /bin/ksh dan lainnya
b)
Adalah komentar, sebagai
dokumentasi, baris ini akan diabaikan oleh program shell
c)
Penggunaan variable (assignment),
tidak boleh ada spasi di antara nama variable dan konstanta
2.
VARIABEL
Variable shell adalah variable yang
dapat mempunyai nilai berupa nilai String.
Tata penulisan variable adalah sebagai berikut :
nama_var = nilai_var
Variable harus
dimulai dengan alfabet, disusul dengan alfanumerik dan karakter lain. Variabel dapat ditulis dalam huruf kecil atau
huruf besar atau campuran keduanya.
Shell membedakan huruf besar dan huruf kecil (case sensitive), contoh :
VPT=poltek i=5
Pemberian nilai variable tidak boleh dipisahkan dengan spasi, karena
shell akan menganggap pemisahan tersebut sebagai parameter, contoh :
VPT =poltek
##error VPT= poltek
##error
Untuk melihat
nilai/isi dari sebuah variable, gunakan tanda $ di depan nama variable
tersebut. Pada shell, instruksi echo
dapat menampilkan isi variable tersebut, contoh :
VPT=poltek
echo
$VPT
Gaji=450000
echo
$Gaji
echo
$VPT $Gaji
Bila
menggunakan string yang terdiri dari lebih dari satu kata, maka string tersebut
harus berada dalam tanda kutip atau apostrof, contoh :
VPT=poltek
VPT2=”poltek elektronika
ITS”
3.
MEMBACA
KEYBOARD
Nilai
variable dapat diisi melalui keyboard (stdin) dengan instruksi read.
4.
PARAMETER
Sebuah program shell dapat mempunyai parameter sebanyak 9 buah dan
direpresentasikan melalui variable khusus yaitu variable $!, $2, $3, $4, $5,
$6, $7, $8 dan $9. Nama program she ll
(nama script) direpresentasikan melalui variable $0.
Jumlah parameter dinyatakan sebagai $#.
Bila tidak memberikan parameter, maka nilai $# adalah 0.
Shell variable $* menyatakan seluruh string yang menjadi parameter /
argumen sebuah script ($@ mempunyai arti yang sama). $$ menyatakan nomor proses id (pid) dari
script yang dijalankan. Pid ini akan
terus berubah (umumnya) menaik, setiap kali proses berjalan.
5.
STATUS
EXIT
Setiap program setelah selesai dieksekusi akan memberikan informasi
melalui variable spesial $?. Indikasi
yang diberikan adalah :
-
Bila program berakhir dengan
sukses, $? = 0
-
Bila program berakhir dengan
error, $? ≠ 0
Nilai
dari status exit dapat dilihat melalui instruksi echo $?
6.
KONSTRUKSI
IF
|
if
instruksi-awal then instruksi1 instruksi2
……………… fi |
if akan
mengeksekusi instruksi-awal, dan exit status dari instruksi tersebut akan
menjadi kondisi. Bila 0, maka instruksi
selanjutnyua masuk ke dalam blok then. Bila tidak 0, maka alur program diteruskan
setelah kunci kata fi.
7.
KONSTRUKSI
IF THEN ELSE
|
if instruksi1 then instruksi1.1 instruksi1.2
……………… else
instruksi2.1
instruksi2.2
………………
fi |
Bila status exit tidak sama dengan
0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
8.
INSTRUKSI
TEST
Instruksi test
digunakan untuk memeriksa kondisi dari sebuah ekspresi. Ekspresi terdiri dari factor dan operator
yang dipisahkan oleh spasi. Hasil test
akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila
tidak maka hasil adalah ≠
0.
•
Operator untuk test
|
Operator |
0 atau TRUE, jika |
|
string1
= string2 string1 != string2 -n string -z string |
Identical Not identical String is not null String is null |
•
Test untuk files dan
directory
Test dapat dilakukan untuk
memeriksa apakah file ada (Exist), dapat dibaca, dapat ditulis, kosong dan
lainnya.
|
Operator |
0 atau TRUE, jika |
|
-f namafile -d namafile -r namafile |
File ada, file biasa File ada, file adalah direktori File dapat dibaca |
|
-w namafile -x namafile -s namafile -w namafile |
File dapat ditulis File adalah executable File ada dan tidak kosong File dapat ditulis |
Untuk
memudahkan pembacaan (readability), test dapat ditulis dengan
[ ekspresi ]
[
sebenarnya adalah nama lain dari test, bedanya [ akan mencari kurung penutup ] pada akhir
ekspresi yang harus dipisahkan oleh spasi.
9.
LOGICAL
&& DAN || (SHELL LEVEL)
Notasi &&
dan || digunakan untuk menggabungkan instruksi shell sebagai alternatif untuk
if then else. Notasi && dan ||
sering ditemukan dalah shell script system administrator untuk menjalankan
routine dari system operasi.
• instruksi1
&& instruksi2
shell akan
mengeksekusi instruksi1, dan
bila exit status
instruksi1 adalah FALSE, maka
hasil dari AND tersebut sudah pasti sama dengan FALSE, sehingga instruksi2 tidak mempunyai
pengaruh lagi. Oleh karena itu, instruksi2 tidak
dijalankan. Sebaliknya bila hasil instruksi1 adalah TRUE(0),
maka instruksi2
dijalankan
• instruksi1
|| instruksi2
shell akan menge
ksekusi instruksi1, bila
exit status adalah TRUE(0), hasil dari operasi OR tersebut sudah pasti
menghasilkan TRUE, terlepas dari hasil eksekusi instruksi2. Oleh karena itu instruksi2 tidak perlu dijalankan. Bila hasil instruksi1 adalah FALSE, maka instruksi2 akan dijalankan.
10.
OPERATOR
BILANGAN BULAT UNTUK TEST
Untuk membandingkan 2 buah bilangan, test memerlukan operator yang
berbeda dengan string.
|
Operator |
0 atau TRUE, jika |
|
i1 –eq i2 i1 –ge i2 i1 –gt i2 i1 –le i2 i1 –lt i2 i1 –ne i2
|
Bilangan sama Lebih besar atau sama
dengan Lebih besar Lebih kecil atau sama dengan Lebih kecil Bilangan tidak sama |
11.
OPERATOR
LOGICAL (TEST LEVEL)
Logical operator
terdiri dari AND, OR dan NOT. Operator
ini menggabungkan hasil ekspresi sebagai berikut :
NOT : symbol !
|
|
! |
|
True |
False |
|
False |
True |
AND : symbol -a
|
V1 |
V2 |
V1 –a V2 |
|
False |
False |
False |
|
False |
True |
False |
|
True |
False |
False |
|
True |
True |
True |
OR : symbol -o
|
V1 |
V2 |
V1 –o V2 |
|
False |
False |
False |
|
False |
True |
True |
|
True |
False |
True |
|
True |
True |
True |
12.
KONSTRUKSI
IF THEN ELSE IF
|
if
instruksi1 then instruksi1.1 instruksi1.2
……………… elif
instruksi2 then instruksi2.1 instruksi2.2
………………
else instruksi3.1 instruksi3.2
………………
fi |
Bila status exit tidak sama dengan
0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
13.
HITUNGAN
ARITMETIKA
Tipe dari
variable SHELL hanya satu yaitu STRING.
Tidak ada tipe lain seperti Numerik, Floating, Boolean atau
lainnya. Akibatnya variable ini tidak
dapat membuat perhitungan aritmetika, misalnya :
A=5
B=$A +1 ## error
UNIX menyediakan utilitas yang bernama expr yaitu suatu utilitas yang melakukan aritmetika sederhana.
14.
INSTRUKSI
EXIT
Program dapat
dihentikan (terminated/selesai) dengan instruksi exit. Sebagai nilai default program tersebut akan
memberikan status exit 0.
15.
KONSTRUKSI
CASE
Case
digunakan untuk menyederhanakan pemakaian if yang berantai, sehingga dengan
case, kondisi dapat dikelompokkan secara logis dengan lebih jelas dan mudah
untuk ditulis.
|
case
variable in match1) instruksi1.1 instruksi1.2
……………… ;;
match2) instruksi2.1 instruksi2.2
……………… ;; *) instruksi3.1 instruksi3.2
………………
;; esac |
Case diakhiri dengan esac dan pada
setiap kelompok instruksi diakhiri dengan ;;.
Pada akhir pilihan yaitu *) yang berarti adalah “default”, bila kondisi
tidak memenuhi pola sebelumnya
16.
KONSTRUKSI
FOR
For digunakan untuk
pengulangan dengan menggunakan var yang pada setiap pengulangan akan diganti
dengan nilai yang berada pada daftar (list).
|
for
var in str1 str2 …..strn do instruksi1 instruksi2
……………… done |
17.
KONSTRUKSI
WHILE
While digunakan
untuk pengulangan instruksi, yang umumnya dibatasi dengan suatu kondisi. Selama kondisi tersebut TRUE, maka
pengulangan terus dilakukan. Loop akan berhenti, bila kondisi FALSSE, atau
program keluar dari blok while melalui exit atau break.
|
while
kondisi do instruksi1 instruksi2
……………… done |
18.
INSTRUKSI
DUMMY
Instruksi dummy
adalah instruksi yang tidak melakukan apa -apa, namun instruksi ini memberikan
status exit 0 (TRUE). Oleh karena itu,
instruksi dummy dapat digunakan sebagai kondisi forever pada loop (misalnya
while).
Simbol instruksi dummy
adalah ⇒
:
19.
FUNGSI
Fungsi adalah program yang dapat dipanggil oleh program lainnya dengan
menggunakan notasi NamaFungsi(). Fungsi
memberikan exit status ($?) yang dinyatakan dengan return nr, atau nilai 0
sebagai default.
Membuat fungsi diawali dengan nama fungsi, parameter, kemudian blok
program yang dinyatakan dalam { … }.
Contoh :
F1( ) {
……..
……..
return 1
}
Variabel dapat didefinisikan dalam fungsi sebagai
variable local atau global. Hal yang perlu diperhatikan, nama variable yang
digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang
sama di luar fungsi, sehingga tidak terjadi isi variable berubah.
TUGAS PENDAHULUAN:
Sebagai
tugas pendahuluan, bacalah dasar teori diatas kemudian buatlah program Shell
untuk Latihan 1 sampai dengan 5.
PERCOBAAN:
1. Login sebagai user.
2. Bukalah Console Terminal dan lakukan percobaan-percobaan di
bawah ini kemudian analisa hasil percobaan.
3. Selesaikan soal-soal latihan.
Percobaan 1 : Membuat shell
script
1.
Buatlah file prog01.sh dengan editor vi
$ vi prog01.sh
#!/bin/sh
# Program shell
#
var1=x
var2=8
Gambar di atas adalah tampilan mengedit dengan editor vi.
Memberi komentar menggunakan tanda pagar.
2.
Untuk menjalankan shell, gunakan
notasi TITIK di depan nama program.
$ . prog01.sh
Pada gambar di atas
adalah menjalankan file prog01.sh. Karena pada file tersebut tidak menghasilkan
output, maka ketika program dijalankanpun tidak akan menghasilkan apa-apa.
3.
Untuk menjalankan shell, dapat
juga dengan membuat executable file dan dieksekusi relatif dari current directory
$ chmod +x prog01.sh
$ ./prog01.sh
Terdapat beberapa perintah untuk menjalankan file seperti
pada nomor sebelumnya, yaitu menggunakan perintah seperti gambar di atas.
Percobaan 2 : Variabel
1.
Contoh menggunakan variable pada
shell interaktif
$ VPT=poltek
$ echo $VPT
Membuat variabel di
shell interaktif dengan menggunakan tanda sama dengan ‘=’ tanpa spasi.
Memanggil variabel tersebut menggunakan symbol ‘$’. Pada percobaan ini variabel
yang dipanggil bernama VPT yang berisi ‘poltek’.
2.
Pemisahan 2 kata dengan spasi
menandakan eksekusi 2 buah instruksi.
Karakter $ harus ada pada awal nama variable untuk melihat isi variable
tersebut, jika tidak, maka echo akan mengambil parameter tersebut sebagai string.
$ VPT2=poltek
elektronika (Terdapat
pesan error)
$ VPT2=”poltek
elektronika”
$ echo
VPT2
$ echo $VPT2
Jika variabel yang
dibuat berisi lebih dari satu kata, atau mengandung spasi, maka isi variabel
tersebut harus menggunakan tanda petik dua. Untuk memanggil sebuah variabel
menggunakan tanda $ diikuti dengan nama variabelnya. Pada contoh di atas, yaitu
memanggil variabel VPT2 menggunakan $VPT2.
3.
Menggabungkan dua variable atau
lebih
$ V1=poltek
$ V2=’:’
$ V3=elektronika
$ V4=$V1$V2$V3
$ echo $V4
Jika ingin menggabungkan variabel menggunakan tanda $ di
masing-masing nama variabelnya, seperti pada variabel V4 di atas.
4.
Menggabungkan isi variable dengan
string yang lain. Jika digabungkan dengan nama variable yang belum didefinisikan
(kosong) maka instruksi echo menghasilkan string kosong. Untuk menghindari kekeliruan, nama variable
perlu diproteksi dengan { } dan kemudian isi variable tersebut digabung dengan
string.
$ echo $V3
$ echo $V3ITS
$ echo ${V3}ITS
Pada gambar di atas yaitu
menampilkan variabel digabung dengan string baru. Nama variabelnya diproteksi
dengan kurung kurawal { }. Jika tidak diproteksi maka tidak akan menghasilkan
output apa-apa seperti pada gambar di atas, yaitu pada perintah $V3ITS.
5.
Variabel dapat berisi instruksi,
yang kemudian bila dijadikan input untuk shell, instruksi tersebut akan
dieksekusi.
$ CMD=who
$ $CMD
$ CMD=”ls –l”
$ $CMD
Variabel juga bisa berisi
instruksi. Sama seperti pada percobaan sebelumnya, jika isi variabel tersebut
berisi lebih dari satu kata, maka harus menggunakan tanda petik dua.
6.
Modifikasi file prog01.sh berikut
$ vi
prog01.sh
#!/bin/sh
V1=poltek
V2=’:’
V3=elektronika
echo “Pemrograman shell”
echo $V1$V2$V3
V3=ITS
echo
$V1$V2 di $V3
Gambar di atas
adalah tampilan di editor vi. Terdapat warna-warna yang menggambarkan arti
tertentu. Warna biru menandakan komentar, warna biru yang dicetak tebal adalah
variabel, warna ungu adalah string, warna oren adalah instruksi, warna putih
adalah isi variabel dan warna biru tua adalah memanggil variabel.
7. Cara sederhana mengeksekusi shell adalah dengan menggunakan
notasi titik di depan nama shell script tersebut. Bila direktori actual tidak terdaftar dalam
PATH, maka command tersebut tidak dapat ditemukan. Bila script belum executable, script tidak
dapat dieksekusi.
$ .
prog01.sh
$ prog01.sh (Terdapat pesan error)
$ ./prog01.sh (Terdapat pesan error)
$ chmod +x prog01.sh
$ ./prog01.sh
Mengeksekusi
shell menggunakan tanda titik, titik garis miring dan chmod. Jika hanya nama
filenya saja akan menghasilkan pesan error.
Percobaan 3 : Membaca
keyboard
1.
Menggunakan
instruksi read
$ read nama
amir
$ echo $nama
Percobaan ini
adalah untuk membaca keyboard dan memasukkannya ke variabel ‘nama’. Untuk
memanggil variabel ini menggunakan tanda ‘$’.
2.
Membaca
nama dan alamat dari keyboard
$ vi prog02.sh
#!/bin/sh
# prog02.sh
# membaca nama dan alamat
echo “Nama Anda : “
read nama
echo “Alamat : “
read alamat
echo “Kota : “
read kota
echo
echo “Hasil adalah : $nama, $alamat di $kota”
Setelah instruksi membaca input dari keyboard, input tersebut dimasukkan ke dalam variabel. Pada gambar di atas, variabel tersebut adalah ‘nama’, ‘alamat’, dan kota.
3.
Eksekusi
program prog02.sh
$ . prog02.sh
Nama Anda :
Amir
Alamat :
Jl semangka 67
Kota :
Surabaya
Hasil adalah : Amir, Jl semangka di Surabaya
Program yang
ditampilkan sesuai dengan instruksi yang telah dibuat sebelumnya. Yaitu
terdapat tiga inputan dari keyboard untuk nama, alamat dan kota.
4.
Instruksi
echo secara otomatis memberikan baris baru, maka untuk menghindari hal tersebut
disediakan opsi –n, yang menyatakan kepada echo untuk menghilangkan baris baru.
Modifikasi program prog02.sh
$ vi prog02.sh
#!/bin/sh
# prog02.sh
# membaca nama dan
alamat
echo –n “Nama Anda : “
read nama
echo –n “Alamat : “
read alamat
echo –n “Kota : “
read kota
echo
echo “Hasil adalah : $nama, $alamat di $kota”
Isi program shell
ini sama dengan percobaan sebelumnya. Yang membedakan hanya penambahan ‘-n’
setelah instruksi echo. Ini digunakan untuk mencegah pembuatan baris baru.
5.
Eksekusi
program prog02.sh
$ . prog02.sh
Nama Anda : Amir
Alamat : Jl semangka 67
Kota : Surabaya
Hasil adalah : Amir, Jl semangka di Surabaya
Program yang
ditampilkan sesuai dengan instruksi yang telah dibuat sebelumnya. Setelah
instruksi ‘echo’, input dari keyboard tidak menggunakan baris baru, namun
berada pada baris yang sama.
6.
Variabel
kosong adalah variable yang tidak mempunyai nilai. Variabel ini didapat atas
assignment atau membaca dari keyboard atau variable yang belum didefinisikan
$ read nama
<CR>
$ echo $nama
$ A=
$ B=””
$ C=$A$B
$ echo $C
Pada percobaan di
atas, variabel ‘nama’ tidak berisi kosong, sedangkan variabel A dan B adalah
variabel kosong.
7.
Variabel
dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi. Pada contoh
dibawah , instruksi pwd dieksekusi lebih dahulu dengan sepasang Back Quate
(tanda kutip terbalik). Hasil dari eksekusi tersebut akan masuk sebagai nilai
variable DIR
$ pwd
$ DIR=`pwd`
$ echo $DIR
Mengutip sebuah instruksi menggunakan tanda
kutip terbalik (back quote’. Pada contoh ini yaitu mengutip instruksi ‘pwd’
kemudian dimasukkan ke variabel bernama ‘DIR’.
8.
Buatlah
shell script prog03.sh
$ vi prog03.sh
#!/bin/sh
# prog03.sh
#
NAMA=`whoami`
echo Nama Pengguna Aktif adalah $NAMA
tanggal=`date | cut –c1-10`
echo Hari ini tanggal $tanggal
Gambar di atas
adalah tampilan editor vi dengan program sesuai pada yang diperintahkan.
9.
Eksekusi
prog03.sh
$ . prog03.sh
Ketika dieksekusi, outputnya sesuai dengan
program di dalamnya. Program ini mengutip instruksi $whoami dan $date
menggunakan tanda kutip terbalik.
Percobaan
4 : Parameter
1.
Membuat
shell script prog04.sh
$ vi prog04.sh
#!/bin/sh
# prog04.sh versi 1
# Parameter passing
#
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
Gambar di atas
adalah isi program di editor vi. Terdapat 4 parameter yang digunakan. Parameter
0 untuk nama program.
2.
Eksekusi
prog04.sh tanpa parameter,
dengan 2 parameter, dengan 4 parameter
$ . prog04.sh
$ . prog04.sh amir hasan
$ . prog04.sh amir hasan badu ali
Parameter dimasukkan langsung setelah nama
program ketika mengeksekusinya. Parameter 0 adalah nama program itu sendiri,
dan parameter selanjutnya berurutan sesuai nomornya. Jika tidak ada parameter
yang dimasukkan, maka program tetap akan dicetak namun parameternya kosong.
3.
Membuat
shell script prog04.sh versi
2 dengan memberikan jumlah parameter
$ vi prog04.sh
#!/bin/sh
# prog04.sh versi 2
# Parameter passing
#
echo “Jumlah parameter yang diberikan adalah $#”
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
Pada program di
atas, menghitung jumlah parameter menggunakan tanda pagar ‘#’.
4.
Eksekusi
prog04.sh tanpa parameter dan
dengan 4 parameter
$ . prog04.sh
$ . prog04.sh amir hasan badu ali
Dapat dilihat pada
gambar, ketika tidak ada parameter yang dimasukkan maka jumlah parameternya
adalah 0. Ketika jumlah parameter yang dimasukkan melebihi kebutuhan program,
maka sisa parameter tersebut tidak akan digunakan. Contohnya parameter ‘ali’
tidak digunakan di program.
5.
Membuat
shell script prog04.sh versi
3 dengan menambahkan total parameter dan nomor proses id (PID)
$ vi prog04.sh
#!/bin/sh
# prog04.sh versi 3
# Parameter passing
#
echo “Jumlah parameter yang diberikan adalah $#”
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
echo “Total parameter adalah $*”
echo “PID proses shell ini adalah $$”
Menghitung jumlah
parameter menggunakan tanda pagar $#, menampilkan parameter menggunakan
instruksi nomor parameter tersebut, menampilkan semua parameter menggunakan $*
dan menampilkan nomor PID menggunakan instruksi $$.
6.
Eksekusi
prog04.sh dengan 4 parameter
$ . prog04.sh amir hasan badu ali
Outputnya sesuai dengan program yang telah
diketikkan sebelumnya. Nomor PID proses ini adalah 2088.
Percobaan
5 : Status Exit
1.
String
tidak diketemukan, maka status exit adalah 1
$ grep xyz /etc/passwd
$ echo $?
Percobaan di atas
adalah untuk mencari string ‘xyz’ pada file /etc/passwd. Kemudian string
tersebut ditampilkan dengan instruksi $echo. Karena tidak ditemukan, sebagai
gantinya status exit ‘1’ ditampilkan.
2.
String
diketemukan, maka status exit adalah 0
$ grep <user> /etc/passwd
$ echo $?
Jika
pada percobaan sebelumnya status exit 1 ditampilkan ketika string yang dicari
tidak ditemukan, status exit 0 akan ditampilkan dika string yang dicari
ditemukan. Ketika mencari string ‘diah’ d file /etc/passwd dan ditemukan,
status exit 0 ditampilkan.
Percobaan 6 : Konstruksi if
1. Instruksi dengan exit status 0 $ who
$ who | grep <user>
$ echo $?
Percobaan ini adalah menggunakan instruksi $who untuk melihat informasi user. Kemudian dari informasi tersebut dicari kata kunci ‘diah’. Karena hasil ini ditemukan, maka status exit yang ditampilkan adalah 0.
2.
If
membandingkan exit status dengan 0, bila sama, maka blok program masuk ke dalam
blok then-fi
$ if [ $? = 0 ]
> then
> echo “Pemakai tersebut sedang
aktif”
> fi
Jika exit status
sama dengan 0, maka akan masuk ke blok then-fi dan mencetak kalimatt
menggunakan instruksi $ echo. Namun pada percobaan ini exit status di perintah
sebelumnya tidak 0, maka kalimat tersebut tidak ditampilkan.
3.
Nomor
(1) dan (2) diatas dapat disederhanakan dengan
$ if who|grep <user> >/dev/null
> then
>
echo okay
> fi
Program
ini adalah menggabungkan beberapa instruksi sebelumnya. Jika status exit sama
dengan 0, maka akan mencetak tulisan menggunakan $ echo. Pada gambar di atas,
exit statusnya adalah 0, maka tulisan ‘okay’ ditampilkan.
Percobaan 7 : Konstruksi if then else
1.
Membuat
shell script prog05.sh
$ vi prog05.sh
#!/bin/sh
# prog05.sh
# Program akan memberikankonfirmasi apakah nama
# user sedang aktif atau tidak
#
echo –n “Berikan nama pemakai : ”
read nama
if who | grep $nama > /dev/null
then
echo “$nama sedang aktif”
else
echo “$nama tidak aktif”
fi
Percobaan ini
adalah menggunakan konstruksi if dan else. Jika kondisi pertama tidak memenuhi,
maka akan dieksekusi perintah else.
2.
Jalankan
prog05.sh, masukkan nama
pemakai yang aktif yang tampil pada instruksi who dan coba juga untuk nama
pemakai yang tidak aktif
$ who
$ . prog05.sh [nama=<user>]
$ . prog05.sh [nama=studentOS]
Karena kondisi pertama memenuhi, maka perintah
pada then yang dijalankan, yaitu terdapat user di informasi $ who. User
‘studentOS’ tidak ada di informasi $who, maka perintah di bagian else yang
dijalankan.
Percobaan 8 : Instruksi Test
1.
Menggunakan instruksi test,
perhatikan spasi antara
$ NAMA=amir
$ test $NAMA = amir
$ echo $?
$ test $NAMA = boris
$ echo $?
2.
Aplikasi test dengan konstruksi if
$ vi prog06.sh
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if test “$NAMA” = amir
then
echo
“Selamat Datang $NAMA”
else
echo
“Anda bukan amir, sorry!”
fi
Program ini tidak
berbeda dengan percobaan sebelumnya. Namun percobaan ini menulis programnya di
editor vi. Untuk memanggil variabel menggunakan tanda ‘$’.
3.
Jalankan program prog06.sh
dengan memasukkan NAMA = amir dan NAMA = <CR> perhatikan hasil
tampilannya
$ .
prog06.sh [NAMA = amir]
$ . prog06.sh [NAMA = <CR>] (Terdapat pesan error)
Karena program ini
kondisi pertamanya hahnya untuk string ‘amir’, maka selain ‘amir’ program yang
dieksekusi adalah program else. Contohnya pada ‘rima’ dan ‘<CR>’.
4.
Modifikasi prog06.sh dengan menggunakan notasi untuk
test
$ vi
prog06.sh
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if
[ “$NAMA” = amir ]
then
echo
“Selamat Datang $NAMA”
else
echo
“Anda bukan amir, sorry!”
fi
Instruksi test diganti dengan notasi kurung
kotak.
5. Jalankan
program prog06.sh dengan
memasukkan NAMA = amir
$ . prog06.sh [NAMA = amir]
Outputnya akan sama dengan program sebelumnya karena hanya
mengganti notasi untuk instruksi test saja.
Percobaan 9 : Notasi && dan ||
1.
Bila file prog01.sh ada (TRUE), maka jalankan program berikutnya. File prog01.sh ada, karena itu exit
status adalah TRUE, hasil operasi AND masih tergantung pada hasil eksekusi
instruksi ke 2, dan dengan demikian instruksi echo akan dijalankan.
$ [ -f prog01.sh ] && echo “Prog01.sh ada”
Percobaan ini adalah melakukan ‘test’ menggunakan notasi
test yaitu kurung kotak. Jika program yang pertama sukses, atau menghasilkan
TRUE, maka instuksi berikutnya akan dieksekusi. Pada gambar di atas, instruksi
yang pertama menghasilkan TRUE, atau terdapat file prog01.sh.
2.
File prog99.sh tidak ada, karena itu exit status adalah FALSE
dan instruksi echo tidak dijalankan
$ [ -f prog99.sh ] && echo “Prog99.sh ada”
Instruksi $echo tidak dieksekusi karena instruksi
sebelumnya tidak menghasilkan TRUE. Atau pada percobaan ini, tidak ada file
bernama prog99.sh.
3.
Bila prog01.sh ada maka jalankan shell script tersebut
$ [ -f prog01.sh ] && . prog01.sh
File bernama prog01.sh ditemukan di
direktori yang sedang aktif, instruksi selanjutnya yaitu menjalankan file
prog01.sh.
4.
Bila prog01.sh ada maka jalankan program berikutnya. File prog01.sh memang ada, karena itu exit
status adalah TRUE, dan karena sudah TRUE maka instruksi echo tidak lagi
dijalankan
$ [ -f prog01.sh ] || echo “Dieksekusi tidak ?”
Penggunaan
tanda || berkebalikan dengan && pada percobaan sebelumnya. Jika
instruksi yang pertama TRUE, maka instrukssi yang kedua tidak dijalankan. Pada
gambar di atas instruksi pertama adalah TRUE sehingga perintah $ echo tidak
dijalankan.
5.
File prog99.sh tidak ada,
karena itu exit status adalah FALSE, hasil tergantung atas exit status
instruksi ke dua, karena itu instruksi echo dijalankan
$ [ -f prog99.sh ] || echo “Dieksekusi tidak ?”
Perintah $ echo
dijalankan, artinya instruksi pertama menghasilkan FALSE, atau tidak ada file
bernama prog99.sh.
6.
File prog99.sh tidak ada, maka tampilkan pesan error
$ [ -f prog99.sh ] || echo “Sorry, prog99.sh tidak ada”
Percobaan ini sama dengan percobaan nomor 5 sebelumnya,
namun kalimatnya yang berbeda.
Percobaan 10 : Operator bilangan bulat untuk test
1.
Menggunakan operator dengan notasi
test
$ i=5
$
test “$i” –eq 5
$ echo $?
Percobaan ini untuk
melihat exit status dari instruksi test sebuah variabel. –eq (equal) adalah
untuk bilangan yang sama. Hasil exit statusnya 0, karena variabel i sama dengan
5 (equal). Program ini berjalan sukses.
2.
Menggunakan operator dengan notasi
[ ] (penganti notasi test)
$ [ “$i” –eq 5 ]
$ echo $?
Percobaan ini sama dengan nomor sebelumnya, hanya mengganti
instruksi $ test dengan notasi kurung kotak.
Percobaan 11 : Operator
Logical dan konstruksi elif
1.
Buatlah file prog07.sh
$ vi prog07.sh
#!/bin/sh
# prog07.sh
echo –n “INCOME = “
read INCOME
if [ $INCOME –ge 0 –a
$INCOME –le 10000 ]
then
BIAYA=10
elif [ $INCOME –gt 10000 –a $INCOME –le 25000
]
then
BIAYA=25
else
BIAYA=35
fi
echo “Biaya = $BIAYA”
Gambar di atas adalah
tampilan program di editor vi. Kondisi yang pertama akan dieksekusi jika
nilainya lebih besar (-ge) dari 0 dan kurang dari sama dengan (-le) 10000.
Kondisi kedua berjalan jika nilainya lebih besar dari (-gt) 10000 dan kurang
dari sama dengan (-le) 25000.
2. Jalankan file prog07.sh dan masukkan untuk
INCOME=5000, 20000, 28000
$ .
prog07.sh [INCOME=5000]
$ .
prog07.sh [INCOME=20000]
$ . prog07.sh [INCOME=28000]
INCOME yang pertama (5000) berada pada range kondisi yang pertama, INCOME 20000 berada pada kondisi kedua, dan INCOME 28000 berada pada range kondisi ketiga.
Percobaan
12 : Hitungan aritmetika
1.
Menggunakan utilitas expr
$ expr 5 + 1
$ A=5
$ expr $A + 2
$ expr
$A – 4
$ expr
$A * 2 (Ada Pesan Error)
$ expr
$A \* 2
$ expr
$A / 6 +10
$ expr 17 % 5
Expr adalah perintah
untuk menghitung operasi matematika sederhana. Pertambahan (+), pengurangan
(-), perkalian (\*), pembagian (/) dan modulus (%). Tanda operasi dan angka
harus dipisah untuk menghindari error.
2.
Substitusi isi variable dengan
hasil utilitas expr
$ A=5
$ B=`expr
$A + 1`
$ echo $B
Jika sebuah variabel
ingin berisi suatu perintah, menggunakan notasi kutip terbalik atau back quote
(`). Variabel B berisi perintah penambahan variabel A dan 1.
Percobaan 13 : Instruksi
exit
1.
Buat shell script prog08.sh
$ vi prog08.sh
#!/bin/sh
if [ -f prog01.sh ]
then
exit 3
else
exit –1
fi
Gambar di atas adalah
tampilan program di dalam editor vi. Membuat komentar menggunakan tanda pagar
#. Jika terdapat file bernama prog01.sh maka program tersebut akan dieksekusi.
2.
Jalankan script prog08.sh dan periksa status exit
$ . prog08.sh
$ echo $?
Status exitnya bernilai 0, artinya program sukses berjalan.
Percobaan 14 : Konstruksi case - esac
1.
Buatlah file prog09.sh dengan editor vi
$ vi prog09.sh
#!/bin/sh
# Prog: prog09.sh
echo “1. Siapa yang aktif” echo “2. Tanggal hari ini” echo “3. Kalender bulan ini” echo –n “
Pilihan : “ read PILIH case $PILIH in
1) echo
“Yang aktif saat ini”
who
;;
2) echo
“Tanggal hari ini”
date
;;
3) echo
“Kalender bulan ini”
cal
;;
*)
echo “Salah pilih !!”
;;
Esac
Fungsi ‘case’ ditutup
dengan fungsi ‘esac’. Setiap pilihan di dalam fungsi ‘case’ di awal dengan
kurung buka dan diakhiri dengan titik koma dua kali. Pilihan tanda bintang *)
akan berjalan sebagai opsi terakhir.
2.
Jalankan program prog09.sh, cobalah beberapa kali dengan
inputan yang berbeda
$ . prog09.sh
Jika input yang dipilih
adalah nomor 1, maka case 1 akan dijalankan, begitu pula dengan nomor 2 dan 3.
Namun jika selain nomor-nomor tersebut, opsi bintang *) yang akan dieksekusi.
Opsi ini seperti ‘else’ pada perintah if.
3.
Buatlah file prog10.sh yang merupakan bentuk lain
dari case
$ vi prog10.sh
#!/bin/sh
# Prog: prog10.sh
echo
–n “Jawab (Y/T) : “
read
JWB
case
$JWB in
y
| Y | ya |Ya |YA ) JWB=y ;;
t
| T | tidak | Tidak | TIDAK ) JWB=t ;;
esac
Pada program ini
terdapat dua case bernilai y atau t. Case pertama yaitu bernilai y jika input
yang dimasukkan adalah y atau Y atau ya atau Ya atau YA. Case kedua akan
bernilai t jika inputnya adalah t atau T atau tidak atau Tidak atau TIDAK.
4.
Jalankan program prog10.sh, cobalah beberapa kali dengan
inputan yang berbeda
$ . prog10.sh
Inputan yang dicoba adalah y, TIDAK, YA dan t.
5.
Modifikasi file prog10.sh yang
merupakan bentuk lain dari case
$ vi prog10.sh
#!/bin/sh
# Prog: prog10.sh
echo
–n “Jawab (Y/T) : \c“
read
JWB
case $JWB in
[yY] | [yY][aA] ) JWB=y ;;
[tT] | [tT]idak ) JWB=t ;;
*)
JWB=? ;;
esac
Program di atas adalah
penyederhanaan dari program sebelumnya. Notasi | menandakan atau (pilihan).
6.
Jalankan program prog10.sh, cobalah beberapa kali dengan
inputan yang berbeda
$ . prog10.sh
Input
yang dicobakan adalah Ya, y, Tidak, dan t.
Percobaan 15 : Konstruksi for-do-done
1.
Buatlah file prog11.sh
$ vi prog11.sh
#!/bin/sh
#
Prog: prog11.sh
for NAMA in bambang harry kadir amir
do
echo “Nama adalah : $NAMA” done
2.
Jalankan program prog11.sh
$ . prog11.sh
3.
Buatlah file prog12.sh yang berisi konstruksi for dan wildcard, program ini akan
menampilkan nama file yang berada di current direktori
$ vi
prog12.sh
#!/bin/sh
# Prog:
prog12.sh
for F in *
do
echo
$F
done
4.
Jalankan program prog12.sh
$ . prog12.sh
Program
ini mencetak semua nama file yang berada di direktori yang sedang aktif.
5. Modifikasi file prog12.sh, program ini akan
menampilkan long list dari file yang mempunyai ekstensi lst
$ vi
prog12.sh
#!/bin/sh
#
Prog: prog12.sh
for F in *.lst
do
ls
–l $F
done
6.
Jalankan program prog12.sh
$ . prog12.sh
Ketika program
dijalankan, terdapat pesan error karena tidak ada file yang berekstensi .lst.
Percobaan 16 : Konstruksi while-do-done
1.
Buatlah file prog13.sh
$ vi prog13.sh
#!/bin/sh
# Prog: prog13.sh
PILIH=1
while [ $PILIH –ne 4 ]
do
echo “1. Siapa yang aktif”
echo “2. Tanggal hari ini”
echo “3. Kalender bulan ini”
echo “4. Keluar”
echo “
Pilihan : \c”
read PILIH
if [ $PILIH –eq 4 ]
then
break
fi
clear
done
echo “Program berlanjut di sini setelah break”
Selama opsi yang diketik
tidak sama dengan 4, maka program akan terus berjalan. Dan setiap program
selesai, akan dijalankan perintah $ clear.
2.
Jalankan program prog13.sh
$ . prog13.sh
Gambar
di atas adalah ketika opsi yang diketik adalah 4. Yaitu program akan berhenti
(break).
Percobaan 17 : Instruksi dummy
1.
Modifikasi file prog13.sh
$ vi prog13.sh
#!/bin/sh
# Prog: prog13.sh
PILIH=1
while :
do
echo
“1. Siapa yang aktif”
echo “2. Tanggal hari ini”
echo “3. Kalender bulan ini” echo
“4. Keluar”
echo “
Pilihan : \c”
read PILIH
if [ $PILIH –eq 4 ]
then break fi
clear
done
echo
“Program berlanjut di sini setelah break”
Gambar di atas adalah tampilan kode program di editor vi.
2.
Jalankan program prog13.sh
$ . prog13.sh
Gambar di atas adalah hasil program. Program akan terus
mengulang selama angka yang diketikkan bukan 4.
3.
Buatlah file prog14.sh yang berisi instruksi dummy untuk konstruksi if
$
vi prog14.sh
#!/bin/sh
# Prog: prog14.sh
echo –n “Masukkan nilai : “
read A
if [ $A –gt 100 ]
then
:
else
echo
“OK !”
fi
Instruksi dummy adalah instruksi yang tidak melakukan apa
-apa, namun instruksi ini memberikan status exit 0. Input dari keyboard
dimasukkan ke variabel A.
4.
Jalankan program prog14.sh beberapa kali dengan input yang berbeda
$ . prog14.sh
Dapat dilihat pada gambar, jika nilainya lebih besar dari
100, maka kondisi pertama akan dijalankan, sedangkan ‘else’ akan mencetak
tulisan ‘OK’ jika nilainya kurang dari atau sama dengan 100.
Percobaan 18 : Fungsi
1.
Buatlah file fungsi.sh
$ vi fungsi.sh
#!/bin/sh
# Prog: fungsi.sh
F1( ) {
echo “Fungsi F1”
return 1
}
echo “Menggunakan Fungsi”
F1
F1
echo $?
Fungsi yang dibuat
bernama F1. Cara memanggil fungsi adalah dengan mengetikkan nama fungsi
tersebut. Pada kode di atas, fungsi F1 dipanggil sebanyak dua kali kemudian
program menampilkan status exit tersebut.
2.
Jalankan program fungsi.sh
$ . fungsi.sh
Perintah terakhir
adalah menampilkan status exit, yaitu 1. Artinya program berjalan sukses.
3.
Menggunakan variable pada
fungsi dengan memodifikasi file fungsi.sh
$ vi fungsi.sh
#!/bin/sh
# Prog: fungsi.sh
F1( )
{
Honor=10000
echo “Fungsi F1”
return 1
}
echo “Menggunakan Fungsi”
F1
F1
echo “Nilai balik adalah $?”
echo “Honor = $Honor”
Gambar
di atas adalah tampilan program di editor vi.
4.
Jalankan program fungsi.sh
$ . fungsi.sh
Output yang ditampilkan sesuai dengan program yang
dituliskan sebelumnya.
5.
Menggunakan variable pada
fungsi dengan memodifikasi file fungsi.sh
$ vi
fungsi.sh
#!/bin/sh
# Prog: fungsi.sh
F1(
)
{
local Honor=10000
echo “Fungsi F1”
return 1
}
echo
“Menggunakan Fungsi”
F1
F1
echo
“Nilai balik adalah $?”
echo “Honor = $Honor”
Variabel Honor adalah variabel local. Fungsi F1 memiliki
nilai balik (return) 1.
6.
Jalankan programfungsi.sh
$ . fungsi.sh
Nilai
baliknya adalah 1 sesuai dengan instruksi yang berada di fungsi F1.
LATIHAN:
1.
Buatlah program salin.sh
yang menyalin file (copy ) sebagai berikut :
salin.sh file-asal file-tujuan
Dengan ketentuan :
• Bila file asal tidak ada, berikan pesan, salin gagal.
• Bila file tujuan ada dan file tersebut adalah directory, beri
pesan bahwa file tidak bisa disalin ke direktori
• Bila file tujuan ada dan file biasa, beri pesan apakan file
tersebut akan dihapus, bila dijawab dengan “Y”, maka copy file tersebut
• Bila file tujuan belum ada, lakukan copy
Untuk mengambil
nama file, gunakan parameter $1 dan $2.
Bila jumlah parameter tidak sama ($#) dengan 2, maka beri pesan exit =
-1
#!/bin/sh
#
file: salin.sh
# Usage: salin.sh fasal
ftujuan
if [ $# -ne 2]
then
echo
“Error, usage: salin.sh file-asal file-tujuan”
exit
–1
fi
fasal=$1
ftujuan=$2
echo
“salin.sh $fasal $ftujuan”
……
……
Berikut ini adalah kode program secara utuh.
Pada eksekusi yang pertama file
prog01.sh berhasil disalin ke file hasil2.sh. Pada eksekusi yang kedua terdapat
prtanyaan interaktif. Hal ini karena file tujuan sudah ada (hasil2.sh).
Sedangkan pada eksekusi yang ketika file gagal disalin karena file tujuan
merupakan direktori.
2. Buat program yang memeriksa nama direktori, jika parameter
tersebut adalah direktori, maka jalankan instruksi ls –ld pada direktori
tersebut. Namakan program tersebut checkdir.sh. Gunakan notasi [ -d NamaDirektori ] dan pilih
logic al && atau || pada level shell.
#!/bin/sh
#
file: checkdir.sh
#
Usage: checkdir.sh DirectoryName
# if [ $# -ne 1] then echo “Error, usage: checkdir.sh
DirectoryName” exit 1 fi
[
… ] && …
Berikut ini adalah kode program secara utuh.
Karena
nama direktori ‘direk’ ada, maka instruksi selanjutnya dieksekusi. Yaitu
menampilkan isi dari direktori ‘direk’.
3.
Dengan shell script pph.sh,
hitung PPH per tahun dengan ketentuan sebagai berikut:
-
10 juta pertama PPH 15%
-
25 juta berikutnya (sisa) PPH 25%
-
Bila masih ada sisa, maka sisa
tersebut PPH 35%
Contoh :
Gaji 8 juta
PPH = 15% * 8 juta
Gaji 12 juta
PPH =15% * 10 juta + 25% *
(12-10) juta
Gaji 60 juta
PPH = 15% * 10 juta + 25% * 25
juta + 25% * (60-10-25) juta
Debugging : untuk melakukan tracing (debug) gunakan opsi
–x pada eksekusi shell.
$ sh –x pph.sh
+ echo –n ‘Berikan gaji
dalam ribuan rupiah : ‘
Berikan gaji dalam ribuan
rupiah : + read gaji
20000
+ pkp=10000
+ ‘[‘ 20000 –le 10000 ‘]’
++ expr 20000 – 10000
+ gaji=10000
+ pph=1500
+ pkp=25000
+ ‘[‘ 10000 –le 25000 ‘]’
+ pkp=10000
++ expr 1500 + 10000 ‘*’
25 / 100 + pph=4000
+ echo ‘Pajak Penghasilan =
4000’
Pajak Penghasilan = 4000
Berikut ini adalah kode program secara utuh.
Perintah
$ sh adalah untuk melakukan tracing bash suatu file. Yaitu file akan
ditampilkan ke layar. Pada contoh di atas, gaji yang dihitung adalah 20000. PPH
yang dihasilkan sebesar 4000 (dalam ribuan rupiah).
4.
Buatlah program myprog.sh
yang memproses parameter $1, nilai parameter harus berupa string :
start stop status restart reload
Bila buka dari
string tersebut, maka berikan pesan error.
Sempurnakan program di bawah ini untuk keperluan tersebut
#!/bin/sh
#
See how we were called case “$1” in
start)
echo “Ini adalah start”
;;
stop)
echo “Ini adalah stop”
;;
*)
echo $”Usage:$0 {start|stop|restart|reload|status}”
;;
esac
return
Berikut ini adalah kode program secara utuh.
Jika
parameter yang diketikkan adalah start, stop, reload, status atau restart, maka
akan dimunculkan kalimat.
5.
Buat sebuah fungsi pada script confirm.sh
yang memberikan konfirmasi jawaban Yes,
No atau Continue. Jika jawaban Yes,
maka beri nilai balik 0, No = 1 dan Continue = 2.
Modifikasi kerangka program
berikut untuk memenuhi permintaan tersebut.
#!/bin/sh
#
Confirm whether we really want to run this service confirm() {
local YES=”Y”
local NO=”N”
local CONT=”C”
while
:
do
echo
–n “(Y)es/(N)o/(C)ontinue? {Y] “
read answer
answer=`echo “$answer” |
tr ‘[a-z]’ ‘[A-Z]’`
if [ “$answer” = “” –0 “$answer” = $YES ]
then
return 0
elif
….
then
return
2
elif
….
then
return
1
fi
done
}
Test fungsi diatas dengan program
berikut :
$ vi testp.sh
. confirm.sh
confirm
if [ $? –eq 0 ]
then
echo “Jawaban YES OK”
elif [ $? =eq 1 ]
then
echo “Jawaban NO” else echo “Jawaban CONTINUE” fi
Perhatikan baris
pertama, adalah loading dari fungsi confirm yang terdapat di script
confirm.sh. Setelah eksekusi script
tersebut, maka fungsi confirm dapat digunakan.
Berikut ini adalah kode program secara utuh.
Ketika inputnya
adalah C, output yang dihasilkan sama dengan output jika inputnya adalah N. Hal
ini dikarenakan jika inputnya C, nilai baliknya adalah 2. Semakin besar nilai
return, semakin besar pula kemungkinan terjadi error.
Kesimpulan
1.
Pemberian nama variabel bersifat
case sensitive, harus dimulai dengan abjad, dan tidak bisa mengandung spasi.
2.
Pemberian nilai variabel tidak
dipisahkan dengan spasi. String harus berada di dalam tanda kutip jika
berjumlah lebih dari satu kata. Jika nilai variabel berisi perintah atau
instruksi, isi variabel tersebut harus berada di dalam back quote.
3.
Parameter program shell memiliki
variabel $1, $2, $3, dan seterusnya. Jumlah parameter dinyatakan dengan $#,
menampilkan semua parameter menggunakan $*, dan nomor pid menggunakan $$.
4.
Menampilkan status exit menggunakan
$?. Program berakhir sukses jika statusnya 0.
5.
Logical operator terdiri dari AND
(-a), OR (-o), dan NOT (!).
6.
Fungsi untuk melakukan aritmatika
sederhana menggunakan fungsi expr.
Komentar
Posting Komentar