Praktikum 6-B Pemrograman Shell
Praktikum 6-B Pemrograman Shell
POKOK BAHASAN:
ü
Pemrograman Shell
TUJUAN BELAJAR:
Setelah
mempelajari materi dalam bab ini, mahasiswa diharapkan mampu:
ü
Menggunakan struktur case – esac.
ü
Loop dengan while, for, do while.
ü Membuat fungsi dan mengetahui cara memanggil fungsi tersebut.
DASAR TEORI:
1
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 |
Identical |
|
string1 != |
string2 |
Not identical |
|
-n string |
|
String is
not null |
|
-z
string |
|
|
·
Test untuk files dan directory
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.
2
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 mengeksekusi instruksi1, bila exit sta tus 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.
3
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 |
Bilangan sama |
|
i1 |
–ge |
i2 |
Lebih besar atau sama dengan |
|
i1 |
–gt |
i2 |
Lebih
besar |
|
i1 i1 i1 |
–le –lt –ne |
i2 i2 i2 |
Lebih kecil atau sama dengan Lebih kecil Bilangan tidak sama |
4
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 |
5 KONSTRUKSI IF THEN ELSE IF
Bila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
6
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.
7
INSTRUKSI EXIT
Program dapat dihentikan (terminated/selesai) dengan instruksi exit. Sebagai nilai default program tersebut akan memberikan status exit 0.
8
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 diakhiri denan esac dan pada setiap kelompok instruksi
diakhiri dengan ;;. Pada akhir pilihan
yaitu *) yang berarti adalah
“default”, bila kondisi tidak
memenuhi pola sebelumnya
9
KONSTRUKSI FOR
For digunakan untuk pengulangan dengan menggunakan var yang pada setiap pengulangan akan diganti dengan nilai yang berada pada daftar (list).
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.
11
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 Þ :
12 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 sam adi 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
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
3. Jalankan program prog06.sh dengan memasukan NAMA = amir dan NAMA = <CR> perhatikan hasil tampilannya
$ . prog06.sh [NAMA = <CR>] (Terdapat pesan error)
4. Modifikasi prog06.sh dengan menggunakan notasi untuk test
5. Jalankan program prog06.sh dengan memasukan NAMA = azizah
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
3. Bila prog01.sh ada maka jalankan shell script tersebut
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
5. File prog99.sh tidak ada, karena itu exit status adalah FALSE, hasil masih tergantung atas exit status instruksi ke dua, karena itu instruksi echo dijalankan
6. File prog99.sh tidak ada, maka tampilkan pesan error
Percobaan
10 : Operator bilangan bulat untuk test
1. Menggunakan operator dengan notasi test
$ test “$i” -eq 5
$ echo $?
2. Menggunakan operator dengan notasi [] (pengganti notasi test)
$ echo $?
Percobaan 11 : Operator Logical dan konstruksi elif
1. Buatlah file prog07.sh
#!/bin/sh
# prog07.sh
echo –n “INCOME = “
read INCOME
if [ $INCOME –ge 0 –a $INCOME -1e 10000 ]
then
elif [ $INCOME –gt 10000 –a $INCOME -1e 25000 ]
then
BIAYA=25
else
BIAYA=35
echo “Biaya = $BIAYA”
Analisa : Pada gambar di atas merupakan perintah operator logika dan konstruksi elif. Perintah $ vi prog07.sh berfungsi untuk membuat Shell script prog07.sh yang berisi perintah if dengan variabel income. Ada 3 perintah yaitu BIAYA=10, BIAYA=25 dan BIAYA=35 dan akan dieksekusi pada berikutnya.
2. Jalankan file prog07.sh dan masukan untuk INCOME=5000, 20000, 28000
$ . prog07.sh [INCOME=20000]
$ . prog07.sh [INCOME=28000]
Percobaan 12 : Hitungan aritmetika
1. Menggunakan utilitas expr
$ A=5
$ expr $A + 2
$ expr $A – 4
$ expr $A * 2 (Ada pesan error)
$ expr $A \* 2
$ expr $A / 6 + 10
$ expr 17 % 5
2. Subtitusi isi variable denga hasil utilitas expr
$ B=’expr $A + 1’
$ echo $B
Percobaan 13 : Instruksi exit
1. Buat shell script prog08.sh
#!/bin/sh
if [ -f prog01.sh ]
then
exit 3
else
exit -1
fi
2. Jalankan Prog08.sh
$ echo $?
Percobaan 14 : Konstruksi case - esac
1. Buatlah file prog09.sh dengan editor vi
#!/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
echo “Yang aktif saat ini”
who
;;
2)
echo “”Tanggal hari ini”
date
;;
3)
echo “Kalender bulan ini”
cal
;;
*)
echo “Salah pilih !!”
;;
2. Jalankan perintah prog09.sh
3. Buatlah file prog10.sh yang merupakan bentuk lain dari case
#!/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 ;;
4. Jalankan program prog10.sh
5. Modifikasi file prog10.sh yang merupakan bentuk lain dari case
#!/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 ;;
esac
6. Jalankan program prog10.sh
1. Buatlah file prog11.sh
#!/bin/sh
# Prog: prog11.Sh
for NAMA in azizah azzahra poetri sampar
do
echo “Nama adalah : $NAMA”
done
2. Jalankan program prog11.sh
3. Buatlah file prog12.sh yang berisi konstruksi for dan wildcard
#!/bin/sh
# Prog: prog12.sh
for F in *
do
echo $F
done
4. Jalankan program prog12.sh
5. Modifikasi file prog12.sh.
#!/bin/sh
# prog: prog 12. Sh
for F in *.1st
do
1s -1 $F
done
6. Jalankan prog12.sh
Percobaan 16 : Konstruksi while-do-done
1. Buatlah program prog13.sh
#!/bin/sh
# Prog: prog13.sh
PILIH=1
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 ]
break
fi
clear
echo "Program berlanjut di sini setelah break"
2. Jalankan prog13.sh
Percobaan 17 : Instruksi Dummy
1. Modifikasi file prog13.sh, kemudian jalankan!
2. Jalankan prog13.sh
3. Buatlah file prog14.sh yang berisi instruksi dummy untuk konstruksi if, kemudian jalankan!
#!/bin/sh
# Prog : prog14.sh
echo –n “masukan nilai : “
read A
if [ $A –gt 100 ]
then
:
else
echo “ ok !”
fi
4. Jalankan prog14.sh
Percobaan 18 : Fungsi
1. Buatlah file fungsi.sh, kemudian jalankan!
#!/bin/sh
# Prog : fungsi.sh
F1 ( ) {
echo “Fungsi F1”
return 1
}
echo “Menggunakan fungsi”
F1
F1
echo $?
2. Jalankan fungsi.sh
3. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh, kemudian jalankan!
#!/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”
4. Jalankan fungsi.sh
5. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh, kemudian jalankan!
#!/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”
6. Jalankan fungsi.sh
LATIHAN:
1. Buatlah program salin.sh yang menyalin f
ile (copy) sebagai berikut : Salin.sh file –asal file-tujuan Dengan ketentuan :
a. Bila file asal tidak ada, berikan pesan, salin gagal.
b. Bila file tujuan ada tersebut directory, beri pesan bahwa file tidak bisa disalin ke direktori
c. Bila file tujuan ada dan file biasa, beri pesan apakah file tersebut akan dihapus, bila dijawab dengan “Y”, maka copy file tersebut
d. 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”
……
……
Analisa : Pada gambar di atas merupakan program copy file, dimana pada gambar di atas jika file tidak berhasil ditemukan maka nantinya akan langsung di close. Untuk pilihan digunakan perintah if else then, tetapi karena perintah pertama pada shell script salin.sh menyatakan jika file tidak ada maka akan di close, dan memang si file ini tidak ada, sehingga perintah yang dikerjakannya pada saat shell script dieksekusi menggunakan perintah . Salin.sh adalah perintah pilihan nomor 1 yaitu “keluar” karena tidak ada filenya dan tampil seperti gambar di atas.
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 logical && 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
[ … ] && …
Analisa : Pada gambar di atas merupakan program memeriksa nama direktori. Seperti yang terjadi pada latihan no. 1 tadi, ketika dijalankan program checkdir.sh ini tidak menemukan directory yang di cari sehingga secara otomatis akan di “closed” atau exit dan tampil seperti gambar di atas.
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.
Analisa : Pada gambar di atas merupakan shell script pph.sh, menghitung PPH per tahun dengan ketentuan 10 juta pertama PPH 15%, 25 juta berikutnya (sisa) PPH 25%, bila masih ada sisa, maka sisa tersebut PPH 35%. Untuk membuat sebuah file pph.sh gunakan perintah vi pph.sh. masuk ke shell dan buat sebuah perintah dalam vi pph.sh dengan memasukan perintah yang ada pada gambar di atas. Gunaka tombol Esc ‘:’ dan wq untuk keluar dari shell dan menyimpan. Kemudian jalankan pph.sh dengan \ perintah bash pph.sh dan untuk debugging untuk melakukan tracing (debug) gunakan opsi –x pada eksekusi shell, maka hasilnya tampil seperti gambar di atas.
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 dibawah ini!
Analisa : Pada gambar di atas merupakan tahapan membuat program myprog.sh yang memproses parameter $1, nilai parameter harus berupa string start, stop, status, restart, dan reload. Isi dari file myprog.sh dengan perintah untuk melakukan seleksi terhadap inputan yang dimasukan. Jika inputan yang dimasukan start, stop, status, restart, atau reload maka akan muncul output seperti gambar di atas dan jika tidak, akan muncul informasi kesalahan dan tampil seperti gambar di atas.
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 program!
#!/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
}
Perhatikan baris pertama, adalah loading dari fungsi confirm yang terdapat di script confirm.sh. Setelah eksekusi script tersebut, maka fungsi confirm dapat digunakan.
Analisa : Pada gambar di atas merupakan latihan nomer 5 yaitu membuat 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 serta memodifikasi program tersebut. Pada perintah yang terdapat di modul tidak bisa dijalankan, sehingga digunakan modifikasi terhadap isi perintah. Lalu digunakan perintah elif seperti yang terlihat pada gambar di atas, dan ketika dijalankan hasilnya akan tampil seperti di atas dengan output tulisan “Jawaban YES OK”.
Kesimpulan:
- Shell script dibuat dengan editor teks (ASCII editor) dan umumnya diberikan ekstensi “.sh”.serta Variable shell adalah variable yang dapat mempunyai nilai berupa nilai String. Variable harus dimulai dengan alfabet, disusul dengan alfanumerik dan karakter lain. Variabel dapat ditulis dalam huruf kecil atau huruf besar atau campuran keduanya. Nilai variable dapat diisi melalui keyboard (stdin) dengan instruksi read.
- Setiap program setelah selesai dieksekusi akan memberikan informasi melalui variable spesial $?. Indikasi yang diberikan adalah :
o Bila program berakhir dengan sukses, $? = 0
o Bila program berakhir dengan error, $? = 1 - 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
- Ada beberapa jenis Operator yaitu
· Operator untuk test
· Test untuk file dan direktori
· LOGICAL && dan ||
· Operator bilangan bulat
· Operator Logical - Dalam pemrograman shell kita juga bisa menggunakan perintah percabangan if,case dan perulangan while in.selain itu kita juga bisa membuat sebuah fungsi yang nantinya bisa dipanggil oleh file lain.


























































Komentar
Posting Komentar