Praktikum 15 APLIKASI PEMROGRAMAN SHELL A. T U J U A N 1. Membuat program aplikasi pengaturan warna dan fungsi ranm. 2. Membuat program aplikasi aritmatika, awk, fungsi, user interface dan dialog. B. DASAR TEORI Pembuatan program aplikasi ini berdasarkan pada teori-teori yang sudah dibahas di bab atau praktikum sebelumnya, seperti: teori tentang expresi dan test untuk operasi aritmatika, fungsi pada materi praktikum 9, awk juga telah dijelaskan pada praktikum 11 dan 12, sedangkan pembahasan user interface/gui dan dialog pada modul praktikum 14 dan modul praktikum yang lainnya. Sekedar untuk mengingatkan kembali berikut penulisan sintak dari perintah/statement yang banyak digunakan dalam pembuatan program aplikasi: Sintak: Nama_fungsi () { command; command; Function nama_fungsi { command; command; Function nama_fungsi () { command; command; Sintak: awk -f {awk program file filename Pernyataan didalam program awk: Pattern { action 1 action 2 action N 133
Untuk pewarnaan tampilan di layar dapat menggunakan kode ANSI (American National Standards Institute). Sintaknya sebagai berikut : \033[colorm Ket : m menandakan setting color Color Foreground Background Black 30 40 red 31 41 green 32 42 yellow 33 43 blue 34 44 magenta 35 45 cyan 36 46 white 37 47 C. PROSEDUR 1. Masuk ke sistem operasi Linux. 2. Login sebagai user yang telah ditentukan. 3. Buatlah program seperti pada percobaan dan program latihan. 4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan sementara. D. PERCOBAAN 1. Pemrograman shell untuk aplikasi schedule reminder : #!/bin/bash ************************************** ********* SCHEDULE REMINDER ********** ************************************** * Date today:`date awk {print $3,$2,$6 ` time :`date awk '{print $4'` * ************************************** -n Massages = read pesan -n Time (hh:mm:ss) = read waktu "**************************************" "**** not exit terminal untill *****" "********** the bell rings ************" "**************************************" duration=2000 volume=$'\xff' 134
mute=$'\x80' function mknote () { for t in `seq 0 $duration` test $(( $t % $1 )) = 0 && -n $volume -n $mute e=`mknote 50` g=`mknote 45` a=`mknote 36` b=`mknote 32` c=`mknote 30` cis=`mknote 29` d=`mknote 27` e2=`mknote 24` n=`mknote 32767` a=1 while (a==1) cek="`date awk '{print $4'`"; if [ "$waktu" == "$cek" ] then -n "$n$n$n$n$e2$c$c$c$$c$c$c$e2$e2$c$c$c$n$n$n$n$e2$c$c$c$ " > /dev/dsp #nada bisa diubah sesuai keinginan d=` "Time : $waktu Massages : $pesan" zenity --text-info --title "*** SCHEDULE REMINDER ***" --height 50 --width 300` $d exit 0 fi 2. Perhitungan Nilai Rangkaian Resistor Seri Atau Pararel. #!/bin/bash -e " \033[32m `date` \033[0m" load(){ tput cup 10 15 please_wait..!! " " tput cup 15 15 -n -e "\033[32m loading.\033[0m" -n -e "\033[31m.\033[0m" -n -e "\033[32m.\033[0m" -n -e "\033[31m.\033[0m" -n -e "\033[32m.\033[0m" -e "\033[31m.\033[0m" 135
seri(){ load "" -e " \033[34m RANGKAIAN SERI \033[0m" "" -n -e "\033[34m masukkan banyak resistor yang anda hitung : \033[0m" read w "" -e "\033[2;33m resistor dalam satuan ohm\033[0m" "" let "x=1" let "y=0" g=0 while let "x <=$w" let "x=x+1" let "y=y+1" -n -e "\033[34m masukkan resistor $y : \033[0m" read a g=` "$g+$a" bc`; -e "\033[34m hasil perhitungan nilai rangkaian yang di rangkai seri adalah : $g ohm \033[0m".75 jawab=`zenity --title "" --width 400 --entry --text " apakah anda ingin menjalankannya lagi(y/t)? : "` case $jawab in y Y ya Ya YA ) "loading.." r t T tidak TIDAK *) tput cup 5 10 v=`zenity --title "== ttttttttt ==" --width 400 --entry --text " *--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*...TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI... -*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"` $v return 0 par(){ load "" -e " \033[34m RANGKAIAN PARAREL \033[0m" "" -n -e "\033[1;35m masukkan banyak resistor yang anda hitung : 136
\033[0m" read w "" -e "\033[2;33m resistor dalam satuan ohm\033[0m" "" -n -e "\033[34m masukkan nilai resistor ke 1 : \033[0m" read z g=$z let "x=1" while let "x <=$w-1" let "x=x+1" -n -e "\033[34m masukkan nilai resistor ke $x : \033[0m" read a rum=` "$g*$a" bc`; rum2=` "$g" bc`; rum3=` "$rum2+$a" bc`; g=` "scale=2;$rum/$rum3" bc`; -e "\033[34m Hasil perhitungan nilai rangkaian yang di rangkai pararel adalah : $g ohm \033[0m".75 jawab=`zenity --title "" --width 400 --entry --text " apakah anda ingin menjalankannya lagi(y/t)? : "` case $jawab in y Y ya Ya YA ) "loading.." r t T tidak TIDAK *) tput cup 5 10 v=`zenity --title "== tttttttt ==" --width 400 --entry --text " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*...TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI... *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"` return 0 apik(){ h=`date` f=`case $(date +%H) in 00 01 02 03 04 05 06 07 08 09) "SELAMAT PAGI" 10 11 12 13 14) "SELAMAT SIANG" 15 16 17 18) "SELAMAT SORE" 137
*) "SELAMAT MALAM" ` b=`zenity --title "=== $f ===" --width 400 --entry --text " $h ----------------------------------------------------------------- *******-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-******* * ANDA MEMASUKI PROGRAM UNTUK MENGHITUNG NILAI RESISTOR * *******-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-******* ----------------------------------------------------------------- *-*-*-*-*-* pilihlah model rangkaianya *-*-*-*-*-* ==> dirangkai seri pil no 1 <== ==> dirangkai pararel pil no 2 <== ==> lainnya selesai <== PILIHAN ANDA : "` $b case $b in 1 seri Seri SERI) seri 2 PARAREL PARALEL pararel paralel Pararel Paralel ) par * ) ab=`zenity -title " ingat hanya no 1&2" -width 400 -entry -text " apakah anda ingin menjalankannya lagi(y/t)? : "` case $ab in y Y ya Ya YA ) "loading.." r t T tidak TIDAK *) tput cup 5 10 v=`zenity --title "== tttttttt ==" --width 400 --entry --text " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*...TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI... *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"` $v r(){ b=`zenity -title "== PILIHAN ANDA ==" -width 400 -entry -text " *-*-*-*-*-* pilihlah model rangkaianya *-*-*-*-*-* ==> dirangkai seri pil no 1 <== ==> dirangkai pararel pil no 2 <== ==> lainnya selesai <== PILIHAN ANDA : "` $b case $b in 1 seri Seri SERI) seri 2 PARAREL PARALEL pararel paralel Pararel Paralel ) par 138
* ) ab=`zenity -title " ingat hanya no 1&2" -width 400 -entry- text " apakah anda ingin menjalankannya lagi(y/t)? : "` case $ab in y Y ya Ya YA ) "loading.." r t T tidak TIDAK *) tput cup 5 10 v=`zenity -title "== ttttttttttt ==" -width 400 -entry- text " *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*...TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI... *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"` $v apik 3. Program aplikasi game tebak angka. #!/bin/bash nama=`zenity title WELCOME TO THE NUMBER S GAME width 400 entry text RULES OF GAME: 1. Number between 1 to 10 2. Game will until 5 times Enter your name: ` $nama lagi () { jwb=`zenity --title "$nama's Game" --entry --text "Play again:y/t?" --height 200` case $jwb in y Y ya YA Ya) rand=$[($random %10) +1] let a=1; while let "$a <= 5" angka=`zenity --title "$nama's Game" --entry --text "Enter a number:"`; $angka; let a=$a+1; if [ $angka -eq $rani ]; then zenity --title "Haha...$name winner" --warning --text "$nama...!!you Win" --height 200 --width 250 lagi; else kalah=`zenity --title "$nama Try again" --warning --text "$nama...!!you are not lucky" --height 200 --width 300`; $kalah; fi Zenity --title "Hehe..$name loser" --warning --text "Sorry...$nama...You lose" --height 200 --width 300 lagi; 139
t T tidak Tidak TIDAK) zenity --title "Bye-bye $nama" --warning --text "Ok..thank you See you..." --height 200 --width 250 exit 0 maen() { rand=$[($random %10) +1] let a=1; while let "$a <= 5" angka=`zenity --title "$nama's Game" --entry --text "Enter a number:"`; $angka; let a=$a+1; if [ $angka -eq $rani ]; then zenity --title "Haha...$nama winner" --warning --text "$nama...!!you Win" --height 200 --width 250 lagi; else kalah=`zenity --title "$nama Try again" --warning --text "$nama...!!you are not lucky" --height 200 --width 300`; $kalah; fi maen; zenity --title "Hehe..$nama loser" --warning --text "Sorry...$nama...You lose" --height 200 --width 300 lagi; 4. Program aplikasi perubahan tampilan warna secara acak #!/bin/bash back(){ init=40 while true acak=$random if [ $acak -le 7 ]; then let no=$acak+$init $no"m" fi hurufi(){ i=`back` -e "\033[$i\033[0;0H \033[0m" -e "\033[$i\033[1;0H \033[0m" -e "\033[$i\033[2;0H \033[0m" -e "\033[$i\033[3;0H \033[0m" -e "\033[$i\033[4;0H \033[0m" -e "\033[$i\033[5;0H \033[0m" hurufl(){ i=`back` -e "\033[$i\033[0;5H \033[0m" 140
-e "\033[$i\033[1;5H \033[0m" -e "\033[$i\033[2;5H \033[0m" -e "\033[$i\033[3;5H \033[0m" -e "\033[$i\033[4;5H \033[0m" -e "\033[$i\033[5;5H \033[0m" -e "\033[$i\033[5;6H \033[0m" -e "\033[$i\033[5;7H \033[0m" -e "\033[$i\033[5;8H \033[0m" hurufu(){ i=`back` -e "\033[$i\033[3;10H \033[0m" -e "\033[$i\033[3;13H \033[0m" -e "\033[$i\033[4;10H \033[0m" -e "\033[$i\033[4;13H \033[0m" -e "\033[$i\033[5;10H \033[0m" -e "\033[$i\033[5;11H \033[0m" -e "\033[$i\033[5;12H \033[0m" -e "\033[$i\033[5;13H \033[0m" hurufp(){ i=`back` -e "\033[$i\033[3;15H \033[0m" -e "\033[$i\033[3;16H \033[0m" -e "\033[$i\033[3;17H \033[0m" -e "\033[$i\033[3;18H \033[0m" -e "\033[$i\033[4;15H \033[0m" -e "\033[$i\033[4;18H \033[0m" -e "\033[$i\033[5;15H \033[0m" -e "\033[$i\033[5;16H \033[0m" -e "\033[$i\033[5;17H \033[0m" -e "\033[$i\033[5;18H \033[0m" -e "\033[$i\033[6;15H \033[0m" -e "\033[$i\033[7;15H \033[0m" hurufh(){ i=`back` -e "\033[$i\033[0;20H \033[0m" -e "\033[$i\033[1;20H \033[0m" -e "\033[$i\033[2;20H \033[0m" -e "\033[$i\033[3;20H \033[0m" -e "\033[$i\033[3;21H \033[0m" -e "\033[$i\033[3;22H \033[0m" -e "\033[$i\033[4;20H \033[0m" -e "\033[$i\033[4;22H \033[0m" -e "\033[$i\033[5;20H \033[0m" -e "\033[$i\033[5;22H \033[0m" hurufu(){ i=`back` -e "\033[$i\033[0;26H \033[0m" -e "\033[$i\033[0;29H \033[0m" -e "\033[$i\033[1;26H \033[0m" -e "\033[$i\033[1;29H \033[0m" -e "\033[$i\033[2;26H \033[0m" -e "\033[$i\033[2;29H \033[0m" -e "\033[$i\033[3;26H \033[0m" 141
-e "\033[$i\033[3;29H \033[0m" -e "\033[$i\033[4;26H \033[0m" -e "\033[$i\033[4;29H \033[0m" -e "\033[$i\033[5;26H \033[0m" -e "\033[$i\033[5;27H \033[0m" -e "\033[$i\033[5;28H \033[0m" -e "\033[$i\033[5;29H \033[0m" while true hurufi hurufl hurufu hurufp hurufh hurufu s 5. Membuat rekapitulasi tranksaksi #!/bin/bash while true -e "\033[0;36mSelamat Datang\033[0m di \033[44;1;34mgaTel (Warga Telkom) \033[0m \033[0;34mRestaurant\033[0m" -e "\033[2;13H-------------" -e "\033[1;35m\033[3;13HMENU HARI INI\033[0m" -e "\033[4;13H-------------" -e "\033[0;37m\033[5;4HMakanan\033[0m \033[1;30m\033[5;29HMinuman\033[0m" -e "1. Bakso \t\t 4. Es teh" -e "2. Ga-ga \t\t 5. Es Jeruk" -e "3. Rujak \t\t 6. Es Degan" while true -n "Masukkan pilihan makanan anda (atau 't' untuk tidak memesan): " read pil case $pil in 1) -n "Banyak Porsi = " read jumma let bayarma=jumma*5000; pilma="bakso $jumma piring" 2) -n "Banyak Porsi = " read jumma let bayarma=jumma*4000; pilma="ga-ga $jumma piring" 3) -n "Banyak Porsi = " read jumma 142
t) let bayarma=jumma*6000; pilma="rujak $jumma piring" bayarma=0 pilma="tidak memesan makanan" *) "Pilihan 1-3 atau 't'" while true -n "Masukkan pilihan minuman anda (atau 't' untuk tidak memesan): " read pil case $pil in 4) -n "Banyak Gelas = " read jummi let bayarmi=jummi*1500 pilmi="es teh $jummi gelas" 5) -n "Banyak Gelas = " read jummi let bayarmi=jummi*2500 pilmi="es jeruk $jummi gelas" 6) -n "Banyak Gelas = " read jummi let bayarmi=jummi*3500 pilmi="es degan $jummi gelas t) bayarmi=0 pilmi="tidak memesan minuman" *) "Pilihan 4-6 atau 't'" let total=$bayarma+$bayarmi -e "\033[0;31mBiaya yang harus anda bayar :\033[0m \033[4;1;31m$total\033[0m" 143
"Pada `date` pelanggan memesan : $pilma dan $pilmi dengan total Rp.$total" cat >> rekapq.txt -n "Apakah mau pesan lagi? (Y/y/T/t) : " read jawab case $jawab in Y y ) "" T t ) exit 0 "*************************************" E. Latihan 1. Dengan menggunakan parameter posisi buatlah program aplikasi kamus Insia ke jawa atau sebaliknya, sebagai bantuan buatlah file database yang berisi terjemahan setiap kata. 2. Buatlah program aplikasi database sederhana tentang biodata pasien baru maupun lama pada sebuah rumah sakit yang berisi data sebagai berikut : - ID, Nama, Umur, Alamat, Keadaan dan Diagnosa pasien. Gunakan user interface dan dialog untuk Entry data pasien, menyimpan data, dan tampilan daftar pasien. 144