Praktikum 6-A dan 6-B Pemrograman Shell

 

Fara Aurin Salsabila

BM5A

 Praktikum 6-A dan 6-B Pemrograman Shell

 

POKOK BAHASAN :

ü  Pemrograman Shell

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.         INSTRUKSI TEST

Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi. Ekspresi terdiri dari factori dan operator yang dipisahkan oleh spasi. Hasil test akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasilnya adalah tidak sama dengan nol.



Tanda [ 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 alternative dari if then else. Notasi && dan || sering ditemukan pada 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 karna itu instruksi2 tidak dijalankan. Sebaliknya bila hasil instruksi1 adalah true/0, maka instruksi2 dijalankan.

- instruksi1 || instruksi2

shell akan mengeksekusi instruksi1, dan 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.

 

3.         OPERATOR BILANGAN BULAT UNTUK TEST

Untuk membandingkan 2 buah bilangan, test memerlukan operator yang berbeda dengan string.



 

4.         OPERATOR LOGICAL (TEST LEVEL)

Logical operator terdiri dari AND(-a), OR(-o), dan NOT(!). Operator ini menggabungkan hasil ekspresi sebagai berikut :

 



 

 







 

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 ARITMATIKA

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 antara lain:





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`.

 

7.         INSTRUKSI EXIT

Program dapat dihentikan (terminated/selesai) dengan intruksi exit. Sebagai nilai default program tersebut akan memberikan status exit 0.

 

8.         KONSTRUKSI CASE

Case digunakan untuk menyerdehanakan pemakaian if yang berantai, sehingga dengan case, kondisi dapat dikelompokkan secara logis dengan lebih jelas dan mudah untuk ditulis.





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.

 

9.         KONSTRUKSI FOR

For digunakan untuk perulangan dengan menggunakan variable yang ada pada setiap perulangan akan diganti dengan nilai yang berada pada daftar (list).



 

 

10.       KONSTRUKSI WHILE

Pernyataan perulangan ini umumnya digunakan untuk melakukan perulangan dengan kondisi tertentu, di mana perulangan akan terus dilakukan dalam blok while selama ekspresi yang menjadi syarat masih dipenuhi (bernilai benar). Untuk ilustrasi, dapat dilihat pada gambar Sedangkan mengenai bentuk dari pernyataan ini adalah:



While digunakan untuk perulangan instruksi, yang umumnya dibatasi dengan sustu kondisi. Selama kondisi tersebut true, maka pengulangan akan terus dilakukan. Loop akan berhenti, bila kondisi false, atau program keluar dari blok while melalui exit atau break.



 

11.       INSTRUKSI DUMMY

Instruksi dummy adalah instruksi yang tidak melakukan apa-apa, namun isntruksi ini memberikan status exit 0 (TRUE). Oleh karna itu, instruksi dummy dapat digunakan sebagai kondisi forever pada loop (misalnya while).

Symbol instruksi dummy adalah =>  :

 

12.       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. 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 :





Variabel dapat di definisikan dalam fungsi sebagai variabel local atau global. Hal yang perlu diperhatikan, nama variable yang digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang sama di luar fungssi, sehingga tidak terjadi isi variable berubah. 

 

 

PERCOBAAN

Percobaan 1 : Membuat Shell Script

1.        Buatlah file prog01.sh dengan editor vi

$ vi prog01.sh

#!/bin/sh

#Program shel

l#

var1=x

var2=8





Analisa :  Membuat file dengan editor vi. Lalu inputkan code program sesuai modul pada file prog01. Untuk keluar dari editor tekan esc, lalu ketik :wq! dan enter.

 

2.        Untuk menjalankan shell, gunakan notasi TITIK di depan nama program

$ . prog01.sh



Analisa :  Untuk menjalankan file tersebut, gunakan .(spasi)nama file.sh

 

3.        Untuk menjalankan shell, dapat juga dengan membuat executable file dan dieksekusi relatif dari current directory

$ chmod +x prog01.sh

$ ./prog-1.sh



Analisa :

·         Gunakan perintah $ chmod +x untuk membuat file menjadi executable

·         Gunakan perintah $ ./ untuk menjalankan file yang executable

 

Percobaan 2 : Variabel

1.        Contoh menggunakan variable pada shell interaktif

$ VPT=poltek

$ echo $VPT



Analisa :

·         Perintah VPT  untuk mengisi file VPT

·         Perintah echo $VPT digunakan untuk melihat isi VPT

 

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 negeri Jakarta (Terdapat pesan error)

$ VPT2=”poltek negeri Jakarta”

$ echo VPT2

$ echo $VPT2



Analisa : Terdapat pesan error sebab pemisahan dengan spasi tanda menandakan 2 buah instruksi. Agar dibaca sebagai variable, gunakan tanda petik. 

 

3.        Menggabungkan dua variable atau lebih

$ V1=poltek

$ V2=’:’

$ V3=jakarta

$ V4=$V1$V2$V3

$ echo $V4



Analisa :

·         Membuat 3 variable dengan nama V1,V2, dan V3.

·         Untuk menggabungkan ketiga variable diatas, buat variable ke-4 yang isinya ialah gabungan dari variable V1,V2,V3 dengan perintah $V4=$V1,$V2,$V3.

·         Gunakan perintah $echo $V$ untuk membaca file V4.

 

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



Analisa : Perintah $ echo $V3 digunakan untuk membaca isi file V3. Untuk menggabungkan isi file V3 dengan string”ITS” variable V3 harus diproteksi dengan {} dan digabungkan dengan string. Jadi perintahnya ${V3}ITS.

 

5.      Variabel dapat berisi instruksi, yang kemudian bila dijadikan input untuk shell, instruksi tersebut akan dieksekusi

$ CMD=who

$ $CMD

$ CMD=”ls –l”

$ $CMD

 





Analisa : CMD dapat diisi dengan perintah, tidak harus variable. Karena kita masukkan who, maka output nya ialah perintah who.

 

6.      Modifikasi file prog01.sh berikut

$ vi prog01.sh

#!/bin/sh

V1=poltek

V2=’:’

V3=jakarta

echo “Pemrograman shell”

echo $V1$V2$V3

V3=ITS

echo $V1$V2 di $V3





 

Analisa : Untuk menginputkan code program, gunakan cara yang sama pada percobaan 1. Arti dari program diatas ialah pertama akan mencetak “Pemrograman shell”. Lalu membuat variable V1, V2, dan V3. Kemudian membuat variable V3(ITS). Gabungkan variable V1 dengan V2 dan ditambah dengan V3.

 

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



Analisa : Terdapat pesan error sebab perintah tersebut bukan untuk mengeksekusi file .sh.

 

Percobaan 3 : Membaca keyboard

1.        Menggunakan instruksi read

$ read nama

amir

$ echo $nama



Analisa :

Untuk memasukkan nilai kedalam variable juga bisa melalui keyboard dengan menggunakan instruksi read. Bisa juga membaca isi variable nama dengan perintah echo $(nama variable)

 

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”





Analisa :

·      Pertama kita mencetak “nama anda :”. Kemudian kita akan disuruh memasukkan nama kita yang akan disimpan dalam variable nama(perintah read nama).

·   Selanjutnya program akan mencetak “alamat:”. Lalu masukkan alamat kita yang akan disimpang didalam variable alamat(perintah read alamat). Maka program akan mencetak “kota:”.

·    Kemudian kita akan disuruh memasukkan kota kita yang akan disimpan didalam variable kota (perintah read kota). Hasil akhir program akan mencetak “hasil adalah: (nama yang kita inputkan),(alamat yang kita inputkan), di kota  kota yang kita inputkan)”

 

3.        Eksekusi program prog02.sh

$ . prog02.sh

Nama Anda :

Amir

Alamat :

Jl Margonda 67

Kota :

Depok

Hasil adalah : Amir, Jl Margonda di Depok



Analisa :  Outputnya sesuai dengan yang kita harapkan di percobaan 3 nomor 2.

 

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”



 



Analisa : Program ini sama dengan sebelumnya, hanya saja ditambahkan –n. Artinya menghilangkan baris baru setelah mencetak kata.

 

5.        Eksekusi program prog02.sh

$ . prog02.sh

Nama Anda : Amir

Alamat : Jl Margonda 67

Kota : Depok

 

Hasil adalah : Amir, Jl Margonda di Depok



Analisa : Dapat dilihat outputnya kita menginputkan nama, alamat, dan kota berada di samping.

 

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

 



Analisa :

  • Read nama adalah untuk mengisi variable nama, kemudina kita menginputkan <CR>dan saat kita baca dengan echo $nama ternyata isinya adalah <CR>. Variable tersebut bukan termasuk variable kosong.
  • Kemudian kita membuat variable A tanpa isi, dan variable b tanpa isi juga. Membuat variable kosong bisa dengan 2 cara diatas. Pertama tanpa ditulisi sama sekali, yang kedua diapit tanda petik 2 tanpa ada isi.
  • Kita gabung variable A dan B dengan cara diatas. Kita masukkan keduanya kedalam variable C.
  • Setelah variable C dibaca ternyata tidak ada isinya karena memang variable C terdiri dari variable A dan variable B yang tidak ada isi nya

 

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



Analisa : Variable dapat disubtitusi dengan hasil suatu instruksi. Contohnya kita menuliskan $ DIR=`pwd`, artinya kita menginputkan perintah pwd dan hasilnya akan disimpan di dalam variable 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





Analisa :

·    Output dari perintah whoami akan disimpandidalam variable NAMA dan kemudian kita mencetak “Nama pengguna aktif adalah (output whoami)”

·     Output dari perintah date | cut -c1 -10 ialah perintah tersebut akan disimpan didalam variable tanggal. Kemudian kita mencetak “hari initanggal (output dari date | cut -c -10).

 

9.        Eksekusi prog03.sh

$ . prog03.sh



Analisa :  Output dari whoami adalah Salsabilla dan output dari date | cut –c1-10 adalah Sel Okt 27.

 

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”





Analisa :

·         Membuaat file prog04.sh

·         Arti dari $0 ialah menampilkan parameter nol yaitu berupa nama program. Program yang kita gunakan adalah program bash, maka outputnya adalah bash.

·         Arti dari $1$2, dan $3 ialah menampilkan parameter kesatu, kedua, dan ketiga.

 

2.        Eksekusi prog04.sh tanpa parameter, dengan 2 parameter, dengan 4 parameter

$ . prog04.sh

$ . prog04.sh amir hasan

$ . prog04.sh amir hasan badu ali



Analisa :

·         Mengeksekusi program prog04.sh

·         Terlihat outputnya. $0 menunjukan nama program.

·         Saat kita menginputkan 2 parameter yaitu Amir dan Hasan  maka parameter tersebut akan ditampilkan sebagai $1 dan $2, sedangkan lainnya kosong.

·         Saat kita menginputkan 4 parameter yaitu AmirHasanBadu, dan Ali maka keempat variable nya akan terisi berurutan.

 

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”





Analisa :  Arti dari $# ialah menghitung parameter yang kita berikan.

 

4.        Eksekusi prog04.sh tanpa parameter dan dengan 4 parameter

$ . prog04.sh

$ . prog04.sh amir hasan badu ali



Analisa :

·         Mengeksekusi program prog04.sh

·         Output “jumlah parameter yang diberikan 0” sebab kita tidak menginputkan parameter sama sekali.

·         Output “jumlah parameter yang diberikan 4” sebab kita menginputkan 3 parameter yaitu amir, hasan, badu, dan ali.

 

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 $$”



Analisa :

·         Arti dari $* adalah menampilkan seluruh parameter yang diberikan.

·         Arti dari $$ adalah menampilkan nomor PID proses program tersebut.

 

6.        Eksekusi prog04.sh dengan 4 parameter

$ . prog04.sh amir hasan badu ali



Analisa : Mengeksekusi file prog04.sh dengan memberikan parameter amir, hasan, badu, dan ali. Sehingga outputnya :

·         Jumlah parameter ialah 4, parameter 1 adalah amir, parameter 2 adalah hasan, parameter 3 adalah badu

·         Total parameter ialah amir hasan badu ali dan nomor PID nya ialah 2019.

 

Percobaan 5 : Status Exit

1.        String tidak diketemukan, maka status exit adalah 1

$ grep xyz /etc/passwd

$ echo $?



Analisa :

·         Arti perintah $ grep xyz /etc/passwd ialah mencari file xyz di dalam direktori etc di dalam passswd

·         Arti dari perintah $ echo $? adalah jika file yang kita cari ditemukan maka status exitnya ialah 1.

 

2.        String diketemukan, maka status exit adalah 0

$ grep <user> /etc/passwd

$ echo $?



Analisa : Saat kita mencari “salsabilla” dietc/passwd dan ketemu. Maka saat kita cek status exit menunjukkan 0.

 

Percobaan 6 : Konstruksi If

1.        Instruksi dengan exit status 0
$ who
$ who | grep <user>
$ echo $?





Analisa : Arti perintah program diatas ialah perintah who | grep <user> akan mencari kata “salsabilla” didalam output dari perintah who, dan ternyata kata “salsabilla” ditemukan dari who, sehingga saat kita cek status exitnya 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



Analisa : Arti dari perintah program diatas ialah jika status exit 0, maka akan mencetak pemakai tersebut sedang aktif.

 

3.        Nomor (1) dan (2) diatas dapat disederhanakan dengan
$ if who|grep <user> >/dev/null
>then
>echo okay
>fi



Analisa : Arti perintah program diatas ialah, mencari kata “test” yaitu user yang sedang aktif pada direktori /dev/null. Jika ketemu, maka akan mencetak okey.

 

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





Analisa :

·    Arti Perintah echo -n“berikan nama pemakai” ialah kita memasukkan nama pemakai. Nama yang kita inputkan akan disimpan di dalam variable nama.

·     Kemudian jika nama yang kita inputkan sama dengan nama user yang sedang aktif maka program akan mencetak“(user) sedang aktif ”

·     Sedangkan jika nama yang kita inputkan bukan user yang sedang aktif maka program akan mencetak“(nama yang diinputkan) tidak aktif”

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]



Analisa : Program akan menjalankan sesuai perintah. Karena user yang sedang aktif ialah salsabilla, maka outputnya ialah salsabilla sedang aktif.

 

 

Percobaan 8 : Instruksi Test

1.        Menggunakan instruksi test, perhatikan spasi antara
$ NAMA=amir
$ test $NAMA = amir
$ echo $?
$ test $NAMA = boris
$ echo $?



Analisa : Perintah diatas merupakan perintah instruksi test. Variable NAMA diisi dengan amir. Untuk memanggil variable NAMA, gunakan perintah test dengan $NAMA dan didefinisikan amir maka status exit bernilai 0. Sedangkan jika berisi boris, status exit berisi 1. Artinya, nama boris belum diinputkan.

 

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





 

Analisa : Variable NAMA didefinisikan sebagai amir. Jika kita memasukkan kata amir maka program akan mencetak “Selamat datang amir”. Namun jika kita menginputkan kata selain amir, maka akan mencetak “Anda bukan amir, sorry”.


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)



Analisa :

·   Kita mengeksekusi dengan memberi isi variable NAMA=amir, sehingga menghasilkan output NAMA = Selamat datang amir.

·       Sedangkan saat kita memasukkan <CR>, menghasilkan output NAMA = Anda bukan amir, sorry.

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





Analisa : Perintah diatas sama seperti nomor sebelumnya. Bedanya, perintah test diganti dengan perintah [ ], dan akan di eksekusi pada percobaan berikutnya.


5.        Jalankan program prog06.sh dengan memasukkan NAMA = amir
$ . prog06.sh [NAMA = amir]



Analisa : Meskipun perintah if didefiniskan dengan perintah [ ] tapi hasil eksekusi prog06.sh akan menampilkan hasil yang sama dengan perintah test sebelumnya.


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”



Analisa : Karena pada percobaan ini prog01.sh ada,  maka program selanjutnya dijalankan yaitu mencetak  “prog01.sh ada”.


2.        File prog99.sh tidak ada, karena itu exit status adalah FALSE dan instruksi echo tidak dijalankan
$ [ -f prog99.sh ] && echo “Prog99.sh ada”



Analisa : Karena pada percobaan ini prog99.sh ada,  maka program selanjutnya dijalankan yaitu mencetak  “prog99.sh ada”.


3.        Bila prog01.sh ada maka jalankan shell script tersebut
$ [ -f prog01.sh ] && . prog01.sh



Analisa :  Jika pada percobaan ini prog01.sh ada,  maka akan menjalankan program .  prog01.sh dan outputnya adalah program 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 ?”



 

Analisa : Jika prog01.sh ada maka akan menjalankan program berikutnya. File prog01.sh memang ada, karena itu exit status adalah TRUE, dank arena sudah TRUE maka instruksi echo tidak lagi dijalankan.


5.     File prog99.sh tidak ada, karena itu exit status adalah FALSE, hasil m tergantung atas exit status instruksi ke dua, karena itu instruksi echo dijalankan
$ [ -f prog99.sh ] || echo “Dieksekusi tidak ?”

                           


Analisa : 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 (dieksekusi).

6.        File prog99.sh tidak ada, maka tampilkan pesan error
$ [ -f prog99.sh ] || echo “Sorry, prog99.sh tidak ada”



Analisa : File prog99.sh tidak ada, maka tampilkan pesan error seperti perintah di atas.

 

Percobaan 10 : Operator bilangan bulat untuk test

1.        Menggunakan operator dengan notasi test
$ i=5
$ test “$i” –eq 5
$ echo $?



Analisa : Perintah diatas merupakan perintah operator bilangan bulat. Variable i berisi 5 maka dengan notasi test, variable i –eq (sama dengan) 5 dan apabila dijalankan instruksi echo $? status exit bernilai 0 karena i memang berisi dengan nilai 5.


2.        Menggunakan operator dengan notasi [ ] (penganti notasi test)
$ [ “$i” –eq 5 ]
$ echo $?



Analisa : Sama seperti perintah nomor 1, bedanya diganti dengan notasi [ ] maka status exit tetap akan bernilai 0.


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”





Analisa : Perintah diatas ialah 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 yang kemudian akan dieksekusi pada berikutnya.

2.      Jalankan file prog07.sh dan masukkan untuk INCOME=5000, 20000, 28000
$ . prog07.sh [INCOME=5000]
$ . prog07.sh [INCOME=20000]
$ . prog07.sh [INCOME=28000]



Analisa :

·         Jika variabel income diisi dengan INCOME antara 0 sampai dengan 10000, biaya yang ditampilkan adalah 10.

·         Jika variabel  income berisi nilai antara 10000 sampai dengan 25000, biaya yang ditampilkan adalah 25.

·         Jika variabel income berisi lebih dari 25000 maka ditampilkan BIAYA 35.

 

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



Analisa : Perintah diatas merupakan perintah hitungan aritmatika. Untuk perhitungan aritmatika dapat menggunakan utilitas expr.

·         Simbol dari penjumlahan adalah +

·         Simbol dari pengurangan –

·         Untuk perkalian bukan menggunakan perintah * tetapi \*

·         Untuk pembagian menggunakan / dan % digunakan untuk expr mod atau sisa hasil bagi dan tampil seperti gambar di atas.

2.        Substitusi isi variable dengan hasil utilitas expr
$ A=5
$ B=`expr $A + 1`
$ echo $B



Analisa : Variabel A diisi dengan 5 kemudian variabel 5 berisi subtitusi dari perintah expr $A + 1 maka apabila variabel B dipanggil akan berisi hasil dari aritmatika tersebut.


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





Analisa : Perintah diatas merupakan perintah instruksi exit. Script diatas berisi instruksi if untuk notasi [ ] prog01.sh berisi instruksi exit dan akan dieksekusi pada percobaan berikutnya.

 

2.        Jalankan script prog08.sh dan periksa status exit
$ . prog08.sh
$ echo $?



Analisa : Jika prog08.sh dieksekusi dengan . prog08.sh kemudian status exit di tampilkan akan menampilkan nilai 0 dan tampil seperti gambar di atas.

 

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





Analisa : Perintah diatas merupakan perintah konstruksi case-esac. Dengan variabel pemilihan PILIH melalui keyboard.

·         Format penulisan case ini diawali dengan case kemudian variabel pilih diikuti dengan in.

·         Lalu definisikan untuk nomor 1 hingga 3 setiap nomor ditutup dengan simbol ;;.

·         Untuk pemilihan terakhir apabila memilih selain nomor 1 2 3 digunkan perintah *).

·         Kemudian ditutup dengan esac dan akan dieksekusi pada percobaan berikutnya

 

2.        Jalankan program prog09.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog09.sh



Analisa :

·         Jika memilih nomor 1 maka akan ditampilkan siapa user yang sedang aktif.

·         Jika memilih nomor 2 akan ditampilkan tanggal hari ini.

·         Jika memilih nomer 3 akan tampil kalender bulan ini.

·         Jika memilih selai nomor 1 2 atau 3 maka akan ditampilkan echo Salah pilih !!.

·         Kemudian ditutup dengan esac.

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





Analisa : Perintah diatas merupakan bentuk lain dari perintah case.

·         Variabel JWB dapat dijawab dengan perintah y/Y/ya?Ya/YA untuk y.

·   Variabel JWB=t dapat ditulis dengan t/T/tidak/Tidak/TIDAK dan akan dieksekusi pada percobaan berikutnya.

4.        Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh



Analisa : Merupakan eksekusi dari prog10.sh. saya menggunakan 3 buah contoh untuk nilai JWB yaitu y, T dan YA.


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





Analisa : Perintah case untuk jawaban juga dapat ditulis seperti diatas.

·         y dapat ditulis huruf kecil atau besar.

·         kemudian untuk “ya” bisa y nya bisa huruf besar/kecil. Begitupula dengan a nya.

·         “tidak” juga sama seperti “ya”.

6.        Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh



Analisa : Merupakan eksekusi dari program shell script prog10.sh untuk modifikasi nya dan tampil seperti gambar di atas.

 

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







Analisa : Perintah diatas merupakan perintah konstruksi for-do-done. Shell script ini berisi konstruksi for-do-done, dimana for untuk variabel nama bambang harry kadir amir. Kemudian dijalankan dengan perintah do dan ditutup dengan done dan akan dieksekusi pada percobaan berikutnya.

 

2.        Jalankan program prog11.sh
$ . prog11.sh





Analisa : Jika prog11.sh ini dijalankan perintah echo akan ditampilkan untuk setiap NAMA karena menggunakan pengulangan for dan tampil seperti tampilan di atas.

 

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





Analisa : Shell script prog12.sh ini berisi konstrusi for dan wild card. Program ini akan menampilkan nama file yang berada pada current directory dan akan dieksekusi pada percobaan berikutnya.

 

4.        Jalankan program prog12.sh
$ . prog12.sh





Analisa : Jika prog12.sh ini dijalankan maka seluruh nama direktori pada current directory akan ditampilkan dan tampil seperti gambar.


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






Analisa : Perubahan pada prog12.sh ini akan menampilkan long list dari file yang mempunyai ekstensi file .lst dan akan dieksekusi pada percobaan berikutnya.


6.        Jalankan program prog12.sh
$ . prog12.sh



Analisa : Tidak ditemukan file/direktori dengan ekstensi .lst pada current directory ini sehingga ditampilkan pesan error dan tampil seperti gambar.


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”






Analisa :  Perintah diatas merupakan perintah kontruksi while-do-done. Program shell script untuk prog13.sh berisi perintah pengulangan serta terdapat 4 pilihan. Variabelnya adalah PILIH –ne 4 dan akan dieksekusi pada percobaan berikutnya.


2.        Jalankan program prog13.sh
$ . prog13.sh

 



Analisa : Ketika prog13.sh dijalankan :

·      Jika memilih nomor 1 2 atau 3 maka akan diulangi atau ditampilkan lagi pilihan tersebut karena perintahnya tidak berisi.

·     Jika memilih nomor 4 maka pengulangan akan berhenti kemudian tampil tulisan dan tampil seperti gambar.

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”





Analisa : Modifikasi ini terlihat pada penulisan while : sebelumnya ditambahkan dengan notasi [ $PILIH –ne 4]. Sedangkan pada prog14.sh sekarang tidak ada dan akan dieksekusi pada percobaan berikutnya.

 

2.        Jalankan program prog13.sh
$ . prog13.sh



Analisa : Hasil dari eksekusi modifikasi prog13.sh ini akan sama dengan perintah sebelumnya yaitu pada percobaan 17 dan tampil seperti gambar


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





Analisa : Pada program prog14.sh berisi instruksi dummy untuk konstruksi if. Variabel A dinyatakan dengan nilai –ne 100. Then echo OK dan akan dieksekusi pada percobaan berikutnya

 

4.        Jalankan program prog14.sh beberapa kali dengan input yang berbeda
$ . prog14.sh



Analisa : Ketika program dijalankan :

·         Jika nilai yang dimasukan masih kurang dari 100 maka ditampilkan OK !

·         Jika nilai lebih dari 100 maka tidak akan ada pesan OK !

 

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 $?





Analisa : Perintah diatas merupakan perintah fungsi. File fungsi.sh pada shell script ini berisi perintah fungsi untuk return 1 dan status exit setalah menjalankan fungsi dan akan dieksekusi pada percobaan berikutnya.


2.        Jalankan program fungsi.sh
$ . fungsi.sh



Analisa : File fungsi.sh ini apabila dijalankan akan berstatus exit 1 karena bernilai false.


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”





Analisa : Modifikasi file fungsi.sh ini hanya ditambah variabel Honor dengan 10000 dan echo Nilai balik adalah $? dan akan dieksekusi pada percobaan berikutnya.


4.        Jalankan program fungsi.sh
$ . fungsi.sh



Analisa : Tidak ada perbedaan fungsi dalam file.sh hasil modifikasi ini hanya penambahan nilai dari variabel Honor.


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”





Analisa : Percobaan ini juga masih merupakan modifikasi dari file fungsi.sh dengan penambahan local sebelum pendefinisian variabel Honor=10000 dan akan dieksekusi pada percobaan berikutnya.


6.        Jalankan program fungsi.sh
$ . fungsi.sh



Analisa : Hasilnya pun tidak ada perubahan dari modifikasi file fungsi.sh sebelumnya. Hasilnya sama dengan percobaan 18 nomor 3.

 

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”
……
……





        Analisa :

·       Perintah diatas merupakan program memeriksa nama direktori. Ketika dijalankan program checkdir.sh dan tidak menemukan direktori yang dicari, maka secara otomatis akan di tutup / exit.

·  Untuk pilihan digunakan perintah if else then, tetapi karena perintah pertama pada salin.sh menyatakan jika file tidak ada maka akan di close.

·   Karena 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 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
[ … ] && …





Analisa : Perintah diatas merupakan program memeriksa nama direktori. Ketika dijalankan program checkdir.sh dan tidak menemukan direktori yang dicari, maka secara otomatis akan di tutup / exit. 

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







Analisa : Program diatas untuk 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.

·         Gunakan 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.

 

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







Analisa : Perintah diatas 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.

·         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 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











 Analisa : Perintah diatas berfungsi untuk 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, gunakan modifikasi terhadap isi perintah.

·         Lalu gunakan 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

Berdasarkan kedua praktikum yang saya lakukan diatas terdapat Shell Script, Variable, Membaca Keyboard, Parameter, Status Exit, Konsntruksi If Then Else, Logical && dan || (Shell Level), Operator Bilangan Bulat, Operator logical, Konstruksi If Then Else If, Hitungan Aritmetika, Instruksi Exit, Konstruksi Case, Konstruksi For, Konstruksi While, Instruksi Dummy, dan Membuat dan Mengetahui cara memanggil Fungsi.

 

 

Komentar

Postingan populer dari blog ini

Laporan Praktikum 3 Operasi File dan Struktur Directory

Praktikum 12 Manajemen Aplikasi