Anda di halaman 1dari 48

ii

Daftar Isi
Daftar Isi ....

ii

Bab 1 : Tujuan ................................................................................................ 1


Bab 2 : Dasar Teori ........................................................................................

Bab 3 : List Program ......................................................................................

13

Bab 4 : Analisa ...............................................................................................

27

Bab 5 : Kesimpulan ........................................................................................ 44


Daftar Pustaka ................................................................................................

45

BAB I
TUJUAN

Secara garis besar, program ini merupakan program dengan sistem auto
chatting dimana subjek pelaku adalah pengguna (visitor) dan linux (#NyuNyu).
Bagi visitor, program ini merupakan salah satu varian permainan chatting sebagai
sarana hiburan. Program dirancang memiliki jawaban yang konyol, sehingga
diharapkan visitor dapat terhibur dengan jawaban yang disediakan dalam
database. Selain itu, visitor juga dapat menambahkan database kosakata, sehingga
permainan dapat berkembang dengan bertambahnya database.
Program lain yang ditawarkan dalam permainan ini adalah permainan untuk
mengetahui tingkat kegalauan dan masih mengusung hiburan.

Program ini

disediakan oleh admin sebagai informasi kepada visitor tentang tempat-tempat


yang cocok untuk menghilangkan kegalauan (read. tempat hang out).
#NyuNyu merupakan salah satu program yang dapat mengembangkan
kemampuan mahasiswa untuk membuat program berdasarkan materi yang telah
diberikan. Selain itu, program ini dibuat untuk memenuhi tugas akhir mata kuliah
Shell Programming.

BAB II
DASAR TEORI

2.1. Pendahuluan
Shell adalah program (penterjemah perintah) yang menjembatani user dengan
sistem operasi dalam hal ini kernel (inti sistem operasi), umumnya shell
menyediakan prompt sebagai user interface, tempat dimana user mengetikkan
perintah-perintah yang diinginkan baik berupa perintah internal shell (internal
command), ataupun perintah eksekusi suatu file progam (eksternal command),
selain itu shell memungkinkan user menyusun sekumpulan perintah pada sebuah
atau beberapa file untuk dieksekusi sebagai program. Perintah-peritah yang
diketikkan oleh user dari input standart yaitu keyboard akan ditafsirkan oleh shell,
jika yang diketikkan oleh user merupakan program yang dapat di eksekusi maka
shell akan menjalankan program tersebut.
Contoh :
$ ls
test
$ hello
bash: hello: command not found
$
Berdasarkan contoh diatas dapat dilihat bahwa ketika user mengetikan ls
maka program ls dijalankan, sedangkan apabila user mengetikkan

hello dan

program hello memang tidak ada maka shell tidak dapat mengeksekusinya.

2.2. Filter
Filter adalah utilitas Linux yang

dapat memproses standard input (dari

keyboard) dan menampilkan hasilnya pada standard output (layar). Contoh filter
adalah cat, sort, grep, pr, head, tail, paste dan lainnya. Pada sebuah rangkaian
pipa :
P1

P2 ........

Pn-1

Pn

P2 sampai dengan Pn-1 mutlak harus utilitas Linux yang berfungsi sebagai
filter. P1 (awal) dan Pn (terakhir) boleh tidak filter. Utilitas yang bukan filter
misalnya who, ls, ps, lp, lpr, mail dan lainnya.

Beberapa perintah shell Linux yang digunakan untuk proses penyaringan


antara lain :
Perintah grep
Digunakan untuk menyaring masukannya dan menampilkan baris-baris
yang hanya mengandung pola yang ditentukan. Pola ini disebut regular
expression.
Perintah wc
Digunakan untuk menghitung jumlah baris, kata dan karakter dari barisbaris masukan yang diberikan kepadanya. Untuk mengetahui berapa baris
gunakan option l, untuk mengetahui berapa kata, gunakan option w dan
untuk mengetahui berapa karakter, gunakan option c. Jika salah satu
option tidak digunakan, maka tampilannya adalah jumlah baris, jumlah
kata dan jumlah karakter.
Perintah sort
Digunakan untuk mengurutkan masukannya berdasarkan urutan nomor
ASCII dari karakter.
Perintah cut
Digunakan

untuk

masukannya,

mengambil kolom

yang ditentukan

tertentu

dari baris-baris

pada option c.

Perintah uniq
Digunakan untuk menghilangkan baris-baris berurutan yang mengalami
duplikasi, biasanya digabungkan dalam pipeline dengan sort.
2.3. Perintah If Case
KONSTRUKSI if
Statement if berfungsi untuk melakukan seleksi berdasarkan suatu kondisi
tertentu. Secara umum ada dua bentuk umum sintak perintah if, seperti
ditunjukkan dibawah ini
Sintak :
if

[ kondisi ]

if

[ kondisi ]

then
statements
fi

then
statements

else
statements
fi
contoh :

contoh :

let hasil = "$b * $c"

let hasil = "$b * $c"

if [ "$hasil" = 10 ]

if [ "$hasil" = 10 ]

then

then
echo "Hasil perkalian

echo "Hasil perkalian kedua

kedua bilangan = $hasil"

bilangan = $hasil"

fi

else
echo "selesai"
fi

Perbedaan antara kedua bentuk adalah bentuk pertama mempunyai perintah


tunggal jika

ekspresi/kondisi yang

diuji benar,

sedangkan

bentuk

kedua

mempunyai banyak perintah yang akan dijalankan jika ekspresi yang diuji benar.
Kalau diperhatikan, perintah if

ini hampir sama dengan perintah if pada

bahasa-bahasa tingkat tinggi, seperti Pascal, C, dan juga hampir sama dengan
perintah if pada batch file-nya DOS. Pada bentuk pertama maupun bentuk kedua
dari sintak diatas adalah statement dalam blok if...fi akan dieksekusi apabila
kondisi if

terpenuhi. Dari kedua bentuk

diatas dapat pula ditambahkan perintah

untuk pengecekan kondisi dengan elif (else if), contoh sintaknya adalah sebagai
berikut:
if

[ kondisi ];

then
perintah1;

contoh :
if winter
then

elif [ kondisi2 ];

snowremoval

then
perintah2;
else

weatherstrip
elif spring
then

alternatif_perintah;

startgarden

fi

mowlawn

else
echo Something is wrong
fi

Klausa else akan dieksekusi jika if

tidak terpenuhi, sebaliknya jika if

terpenuhi maka else tidak akan dieksekusi.

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. Statement case juga digunakan untuk menyeleksi
kondisi majemuk, dibanding if, pemakaian case lebih efisien.
Sintak :
case

string

let hasil = $b * $c

pilihan)
commands

in contoh :

;;

case $hasil in
10)

pilihan)
commands

echo Hasil perkalian kedua bilangan


;;

= $hasil ;;

*)

*)

default commands

echo Selesai

;;

esac

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.

2.4. Subrutin atau Fungsi


Merupakan bagian script atau program yang berisi kumpulan beberapa
statement yang melaksanakan tugas tertentu. Dengan subrutin kode script
tentunya akan lebih sederhana dan terstruktur, karena sekali fungsi telah dibuat

dan berhasil maka akan dapat digunakan kapan saja bila diinginkan. Beberapa hal
mengenai fungsi ini adalah:

Memungkinkan penyusunan kode script ke dalam bentuk modul-modul


kecil yang lebih efisien dengan tugasnya masing- masing.

Mencegah penulisan kode yang berulang - ulang.

Di dalam shell fungsi juga bisa didefinisikan interaktif maupun secara script
program, dan meskipun didefinisikan secara interaktif, sebuah fungsi juga bisa
dipanggil melalui script yang dibuat dalam sebuah file dengan catatan fungsi
tersebut sudah di export. Setelah melalui mekanisme export ini sub-shell juga bisa
memanggil fungsi tersebut. Jadi 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.
Untuk membuat subrutin shell telah menyediakan keyword function seperti pada
bahasa C, akan tetapi ini bersifat optional (artinya boleh digunakan boleh tidak).
Bentuk umum dalam mendefinisikan fungsi dalam bash shell adalah sebagai
berikut:
Sintak:
Nama_fungsi () { command; command; }
Function nama_fungsi { command; command; }
Function nama_fungsi () { command; command; }
nama_fungsi adalah pengenal (identifier) yang aturan penamaannya sama
seperti pemberian nama variabel, setelah fungsi dideklarasikan atau dibuat dapat
dipanggil dengan menyebutkan nama fungsinya. lebih jelasnya lihat contoh script
berikut:
#!/bin/bash
function hai_hello() {
echo "Hello, apa kbabar"
}

#panggil fungsi
hai_hello;

jika keyword function

disertakan maka boleh tidak menggunakan tanda

kurung (), tetapi jika keyword function tidak disertakan maka tanda kurung harus
digunakan, lihat contoh berikut:
function hai_hello{
echo "Hello,apa khabar"
}

balas(){
echo "Baik-baik saja";
echo "Bagaimana dengan anda ?";
}
Mengirim argumen sebagai parameter ke fungsi
Tentunya suatu fungsi lebih berdaya guna apabila dapat menerima argumen
yang dikirim oleh pemanggilnya dan memproses argumen tersebut didalam
fungsinya, fungsi yang telah dibuat pada bash shell tentunya harus dapat
melakukan hal tersebut, apabila pada pemanggilan fungsi disertakan argumen
untuk diproses fungsi tersebut, maka bash akan menyimpan argumen - argumen
tersebut pada parameter posisi 1,2,3,dan seterusnya..., dengan memanfaatkan
parameter posisi tersebut tentunya dapat diambil nilai yang telah dikirim. lebih
jelasnya lihat contoh berikut:
#!/bin/bash
function hello{
if [ -z $1 ]; then
echo "Hello, apa khabar anda"
else
echo "Hello $1, apa khabar";
fi
}
#masukkan nama anda disini
echo -n "Nama anda :";
read nama

#panggil fungsi dan kirim isi variabel nama ke fungsi untuk dicetak
hello $nama;
Perhatikan fungsi hello, sebelum mencetak pesan terlebih dahulu melakukan
pemeriksaan dengan if terhadap parameter posisi $1 apabila kosong maka pesan
"Hello, apa khabar anda"

yang akan ditampilkan, tetapi jika ada string yang di

inputkan maka string tersebut akan dicetak di dalam blok else pada fungsi.
argumen pertama diteruskan ke variabel 1, argumen kedua pada variabel 2, dan
seterusnya ... jika argumen yang dikirim lebih dari satu.

2.5. Filter (Awk)


Filter Fi
Awk adalah sebuah perograman

filter untuk teks, seperti halnya perintah

"grep". Awk dapat digunakan untuk mencari bentuk/model dalam sebuah file
teks. Awk juga dapat mengganti bentuk satu teks ke dalam bentuk teks lain. Awk
dapat juga digunakan untuk melakukan proses aritmatika seperti yang dilakukan
oleh perintah "expr". Awk adalah sebuah pemrograman seperti pada shell atau C
yang memiliki karakteristik yaitu sebagai tool yang cocok untuk jobs juga sebagai
pelengkap (complicated) untuk filter standard. Jika kecepatan merupakan hal yang
pokok, awk adalah sesuatu produk bahasa yang sangat sesuai. Tetapi hanya untuk
even jobs dimana kecepatan menjadi sesuatu hal yang esensial/pokok atau utama,
maka awk dapat digunakan sebagai bentuk prototipe-nya. Meskipun awk dan shell
keduanya adalah bahasa pemrograman, keduanya adalah spesialis untuk aplikasi
yang berbeda. Awk sangat baik untuk manipulasi file teks, sedangkan shell sangat
baik untuk pelaksana perintah UNIX.
Awk sangat cocok untuk menyelesaikan tugas sederhana, seperti halnya
penyuntingan sebuah kata untuk dicetak oleh perintah date atau tugas komplek
lainnya seperti pelayanan pengolahan sebuah data base sederhana atau paket
statistik. Adapun contoh awk untuk aplikasi sederhana yaitu sebuah program
untuk menampilkan hari dan bulan, untuk lebih jelasnya perhatikan printahperintah berikut.
$ cat daymonth
date | awk '{print $3}'
$ date

$ daymonth
Simple Script
Sebuah awk script terdiri dari 2 bagian; yaitu "pattern dan action". Pattern
adalah serupa dengan regular expressions, dan action sama seperti bahasa C yaitu
aksi dari hasil sebuah perintah. Pattern dengan regular ekspresi diperlihatkan pada
tabel dibawah ini.
Tabel 1. Pattern awk
Metacharacter
. (Dot)

Meaning
Match any character

Match zero or more character

Match beginning of line

Match end of line

Escape character following

[]

List

{}

Match range of instance

Match one more preceding

Match zero or one preceding

Separate choices to match

Sedangkan sintak umum dari script awk adalah sebagai berikut:


Sintak:

awk -f {awk program file} filename

Pernyataan didalam program awk:


Pattern {
action 1
action 2
action N
}
Di dalam program awk, pattern diikuti oleh action, dengan tanda kurung
kurawal { } yang mengelilingi setiap action. Sebuah action adalah pelaksana jika
pattern sesuai dengan sesuatu yang ada didalam baris input. Jika bagian pattern

10

tidak ada, action akan melakukan aksi untuk tiap-tiap baris dalam file. Jika action
absen/tidak ada, maka default action yaitu mencetak baris dilaksanakan. Bentuk
pattern "paris" didalam standard input diperlihatkan pada contoh berikut:
$ cat findparis
awk /paris/
$ echo an american in Georgia | findparis
$ echo an american in paris | findparis

Diperlihatkan pada contoh program diatas, terdiri dari sebuah pattern |paris|
dan tidak ada action. Ekuivalen program dengan menggunakan default action
(print) seperti contoh dibawah ini.
$ cat findparis
awk '/paris/ {print}'
$ echo an american in Georgia | findparis
$ echo an american in paris | findparis

Tanda kutip didaerah sekitar awk script merupakan suatu kebutuhan, sebab
script akan bernilai kosong jika tanpa tanda kutip. Salah satu tanda kutip tunggal
atau ganda sudah mencukupi untuk contoh diatas. Perintah print didalam program
"findparis" untuk mencetak seluruh baris mungkin juga bisa untuk mencetak
konstanta, karakter dari baris input, dan juga mencetak argument, disamping itu
pada program ini tidak memiliki parameter.
Sebuah contoh print dengan argument dalam awk yang menggunakan
parameter $3 adalah sebagai berikut:
$ date | awk '{print $3}'

Program awk untuk mengambil argumen dari sebuah file seperti berikut ini:
$ cat prarg.awk
{ print $3 }
$ date | awk f prarg.awk
Pada argumen flag f dan menyertakan nama file yang berisi awk digunakan
untuk menampilkan isi file program awk. { print $3 } membuat awk membaca
input dari nama file atau dari input standard (keyboard).

11

2.6. GUI
Zenity
Zenity mempunyai peran sebagai pembuat GUI pada shell programing atau
yang disebut Grafik User Interface dimana mempunyai fungsi mempermudah
user untuk mengoperasikan programnya melalui grafis secara interaktif. Zenity
mempunyai banyak opsi seperti:
--entry : meminta input dari keyboard
--info : menampilkan text yang dimana berfungsi sebagai sebuah info
--list : membuat list berdasarkan column dan row secara tertabel dll.
Dengan opsi seperti diatas zenity dapat digunakan untuk membuat sebuah
question dialog box. Disamping itu zenity juga dapat digunakan untuk aplikasi
yang lain seperti calendar, entry, error, info, file selection, list, notification,
progress, warning, scale dan text info. Pada bab ini akan di ilustrasikan
bagaimana membuat aplikasi zenity dialog.
Contoh sintak zenity :

List Dialog
Menggunakan opsi --list

Untuk membuat list dialog. Zenity akan

mengembalikan entry dalam kolom pertama baris teks yang dipilih ke output
standar.

Data untuk dialog kolom harus ditentukan menurut kolom, baris demi

baris. Data dapat disediakan untuk dialog melalui input standar. Setiap entri harus
dipisahkan oleh karakter baris baru. Jika menggunakan opsi --checklist atau -radiolist, setiap baris harus dimulai dengan TRUE atau FALSE. List dialog
memiliki opsi berikut:
--column=column

12

Menentukan header kolom yang ditampilkan dalam list dialog. Harus


ditentukan opsi colomn untuk setiap kolom yang ingin ditampilkan dalam dialog.
--checklist
Menentukan bahwa kolom pertama pada list dialog berisi kotak cek.
--radiolist
Menentukan bahwa kolom pertama pada list dialog berisi kotak radio.
--editable
Memungkinkan ditampilkan item yang akan diedit.
--separator=separator
Menentukan string apa yang digunakan ketika dialog mengembalikan daftar
entry yang dipilih.
--print-column=column
Menentukan apakah kolom harus dicetak pada seleksi. Default kolom adalah
'1 '. ALL yang dapat digunakan untuk encetak semua kolom dalam list.

Untuk melihat penjelasan lebih detail tentang penggunaan zenity, dapat


dilihat di terminal dengan mengetik man zenity, maka akan muncul
penggunaan zenity.

petunjuk

13

BAB III
LIST PROGRAM

#!/bin/sh
tanggal=`date +%d/%m/20%y`
waktu=`date +%H:%M:%S`
############################################################
ISI MENU ADMIN
############################################################
editkata(){
edit=$(zenity --list --radiolist --title "Edit Kosakata" -text "Pilih proses edit kosakata:" --column "Pick" --column
"Pilihan" FALSE "edit gedit" FALSE "edit perbaris");
case $edit in
"edit gedit")
gedit nyunyu.txt
menu_admin;
;;
"edit perbaris")
cari2=`zenity --title "Cari Kata" --entry --text "Masukkan
baris kata yang akan diedit:" --ok-label="next" --cancellabel="cancel"`
while [ -z $cari2 ];
do
zenity --warning --title "Cari Kata" --text "Input tidak
boleh kosong"
cari2=`zenity --title "Cari Kata" --entry --text "Masukkan
baris kata yang akan diedit:" --ok-label="next" --cancellabel="cancel"`
done
if [ $? = 0 ]; then
if [ $? != 0 ]; then
dbkata
else
kata2=`zenity --title "Cari Kata" --width="500" --entry
--text "Ganti kalimat pada baris $cari2 dengan:" --oklabel="next" --cancel-label="cancel"`
if [ $? = 0 ]; then
sed ''$cari2' c\'"$kata2"'' nyunyu.txt > temu34.txt
cat temu34.txt > nyunyu.txt
rm temu34.txt
(
echo "25" ; sleep 0.1
echo "# Saving..." ; sleep 0.1
echo "50" ; sleep 0.1
echo "# Saving..." ; sleep 0.1
echo "75" ; sleep 0.1
echo "Saving..." ; sleep 0.1
echo "100" ; sleep 0.2

14
) | zenity --progress --width 230\
--title="Welcome to #NyuNyu" \
--text="Loading..." \
--percentage=0
dbkata
else
zenity --warning --text "Kata tidak ditemukan" -timeout 1;
editkata
fi
fi
else
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
fi
;;
*) menu_admin ;
;;
esac
}
dbkata(){
clear
cat nyunyu.txt | awk '{print $1" "$2" "$3" "$4" "$5" "$7"
"$8" "$9" " $10 }' | zenity --title "Database Kosakata" -height 150 --ok-label="edit data" --cancel-label="back" -text-info --width=1000 --height=1500
if [ $? = 0 ]; then
editkata
else
menu_admin
fi
}
cari(){
cari=$(zenity --title "Cari Kata" --entry --text "Masukkan
kata yang dicari :")
while [ -z $cari ];
do
zenity --warning --title "Cari Kata" --text "Input tidak
boleh kosong"
cari=$(zenity --title "Cari Kata" --entry --text "Masukkan
Kata yang dicari : ")
done
if found=`grep $cari nyunyu.txt -i`;
then
echo "$found " > temu2.txt
cat temu2.txt | zenity --title "Cari Kata" --text-info --

15
width=600 --height=1000 --ok-label "edit data" --cancellabel "menu admin"
if [ $? = 0 ]; then
editkata
else
menu_admin
fi
else
zenity --warning --text "Data tidak ditemukan" --timeout 1;
menu_admin
fi
}
lihat_pengunjung(){
awk '{{printf"%s\n",$1; printf"%s\n",$2; printf"%s\n",$3;}}'
nyunyu_visitor.txt | zenity --list --title="Menu Admin" -text="Database Pengunjung" --ok-label="edit data" --cancellabel="back" --column="Nama" --column="Tanggal Pakai" -column="Jam Pakai" --width 320 --height 500;
if [ $? = 0 ]; then
gedit nyunyu_visitor.txt
menu_admin
else
menu_admin
fi
}
menu_admin(){
clear
zenity --list --title="Menu Admin" --text "Select item
from the list" --ok-label="ok" --cancel-label="menu utama" -height 260 --width 265 --column "Kode" --column "Pilihan"
1 "Lihat Pengunjung" 2 "Lihat Database Kosakata" 3 "Edit
Kosakata" 4 "Cari Kata" 5 "Keluar" > pilih;
pil=`cat pilih`
if [ $? = 0 ]; then
case $pil in
"1") lihat_pengunjung;
;;
"2") dbkata;
;;
"3")editkata;
;;
"4")
cari;
;;
"5")
zenity --question --width 100 --text "Wanna exit ?";
if [ $? = 0 ]; then
clear
echo ""

16
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
else menu_admin
fi;;
*) menu_utama;;
esac
else menu_utama
fi
}
pass(){
clear
pass=$(zenity --entry --ok-label="ok" --cancel-label="menu
utama" --title="Wanna login Admin?" --text="Entry your
_password:" --hide-text);
if [ $? = 0 ]; then
case $pass in
"4994" )
echo "Admin
$tanggal
$waktu" >> nyunyu_visitor.txt
menu_admin
;;
* )
zenity --info --title="#NyuNyu Said" --text="Welcome
back" --timeout 1
menu_utama;;
esac
else
zenity --info --title="#NyuNyu Said" --text="Welcome
back" --timeout 1
menu_utama
fi
}
#<---end menu admin--->#
############################################################
MENU CHATTING
############################################################
chat(){
#!/bin/bash
clear
echo -e " \033[32m
Hello, kakak kece. Ada
\033[31m#NyuNyu\033[0m\033[32m di sini !!!\033[0m" ; sleep
0.45
sleep 0.45
tput cup 1 17
echo -n "Time
: $tanggal" ; sleep 0.45
tput cup 2 17
echo -n "Visitor Login : `whoami`";sleep 0.45
tput cup 3 7
echo -e "\033[31m--> type : \033[32m_mv\033[0m (Menu
Visitor); \033[32m_ad\033[0m (Login Admin) \033[31m;
\033[32m_ex\033[0m (Exit Program) \033[31m<--\033[0m" ;
sleep 0.45

17
tput cup 4 1
echo -e " \033[31m
=======================================\033[0m" ; sleep 1
jawab() {
kosong=" ";
mv="_mv"
ad="_ad"
ex="_ex"
MAXLEN=30
read na no ni nu ne
grepna=`grep $na nyunyu.txt`
if [ $grepna == $kosong ]; then
echo ""
echo -e "\033[32mnyunyu bingung jawab apa kak $nama - '\033[0m";
zenity --question --width 100 --text "Ajarin #NyuNyu, Kak
$nama :'(?";
if [ $? = 0 ]; then
teach
else
echo -e "\033[32mselamat datang lagi, kak $nama\033[0m";
jawab
fi
elif [ $na == "_mv" ]; then
clear
menu_visitor
elif [ $na == "_ad" ]; then
clear
pass
elif [ $na == "_ex" ]; then
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
else
echo ""
len=${#grepna}
if [ "$len" -gt "$MAXLEN" ]
then
echo -e "\033[32mkakaknya kepo bingid, syih :3\033[0m";
else
echo -e "\033[32m$grepna \033[0m";
fi
fi
jawab
}

18
tput cup 5 0
echo -e "\033[32mHallu, Kak $nama \033[0m ";
jawab
}
#<---end chatting--->#
############################################################
MENU RAMAL
############################################################
#!/bin/bash
totaldarah(){
let totala=a1+a2+a3+a4+a5;
let totalo=o1+o2+o3+o4+o5;
let totalab=ab1+ab2+ab3+ab4+ab5;
let totalb=b1+b2+b3+b4+b5;
if [ $totala -le $totalb ] && [ $totala -le $totalab ] && [
$totala -le $totalo ]; then
cat daraha.txt | zenity --text-info --title "Tipe golongan
darahmu : A" --height 400 --width 400 --ok-label="menu
visitor" --cancel-label="hitung lagi";
if [ $? = 0 ]; then
menu_visitor
else
ramal
fi
elif [ $totalb -le $totala ] && [ $totalb -le $totalab ] &&
[ $totalb -le $totalo ]; then
cat darahb.txt | zenity --text-info --title "Tipe golongan
darahmu : B" --height 400 --width 400 --ok-label="menu
visitor" --cancel-label="hitung lagi";
if [ $? = 0 ]; then
menu_visitor
else
ramal
fi
elif [ $totalo -le $totalb ] && [ $totalo -le $totalab ] &&
[ $totalo -le $totala ]; then
cat daraho.txt | zenity --text-info --title "Tipe golongan
darahmu : O" --height 400 --width 400 --ok-label="menu
visitor" --cancel-label="hitung lagi";
if [ $? = 0 ]; then
menu_visitor
else
ramal
fi
elif [ $totalab -le $totalb ] && [ $totalab -le $totala ] &&
[ $totalab -le $totalo ]; then
cat darahab.txt | zenity --text-info --title "Tipe golongan

19
darahmu : AB" --height 400 --width 400 --ok-label="menu
visitor" --cancel-label="hitung lagi";
if [ $? = 0 ]; then
menu_visitor
else
ramal
fi
fi
}
nilai5(){
nilai5=`zenity --scale --title "Ramal Tipe Darahmu" --text
"<i>Nilai seberapa mudah kamu kesasar ketika di jalan yang
pertama kali kamu lewati
(ps : semakin tinggi, semakin mudah kesasar)</i>" --value=5
--ok-label="diagnose" --cancel-label="menu visitor"`;
if [ $? = 0 ]; then
if [ $nilai5 -ge 0 ] &&
let b5=1;
elif [ $nilai5 -ge 26 ]
let a5=1;
elif [ $nilai5 -ge 51 ]
let o5=1;
elif [ $nilai5 -ge 76 ]
let ab5=1;
fi
totaldarah
else
menu_visitor
fi
}

[ $nilai5 -le 25 ]; then


&& [ $nilai5 -le 50 ]; then
&& [ $nilai5 -le 75 ]; then
&& [ $nilai5 -le 100 ]; then

nilai4(){
nilai4=`zenity --scale --title "Ramal Tipe Darahmu" --text
"<i>Nilai seberapa mudah kamu susah dibangungin
(ps : semakin tinggi, semakin susah)</i>" --value=5 --oklabel="next" --cancel-label="menu visitor"`;
if [ $? = 0 ]; then
if [ $nilai4 -ge 0 ] && [ $nilai4 -le 25 ]; then
let o4=1;
elif [ $nilai4 -ge 26 ] && [ $nilai4 -le 50 ]; then
let a4=1;
elif [ $nilai4 -ge 51 ] && [ $nilai4 -le 75 ]; then
let ab4=1;
elif [ $nilai4 -ge 76 ] && [ $nilai4 -le 100 ]; then
let b4=1;
fi
nilai5
else
menu_visitor
fi
}

20

nilai3(){
nilai3=`zenity --scale --title "Ramal Tipe Darahmu" --text
"<i>Nilai seberapa mudah kamu bisa dipercaya
(ps : semakin tinggi, semakin mudah dipercaya)</i>" -value=5 --ok-label="next" --cancel-label="menu visitor"`;
if [ $? = 0 ]; then
if [ $nilai3 -ge 0 ] && [ $nilai3 -le 25 ]; then
let ab3=1;
elif [ $nilai3 -ge 26 ] && [ $nilai3 -le 50 ]; then
let b3=1;
elif [ $nilai3 -ge 51 ] && [ $nilai3 -le 75 ]; then
let o3=1;
elif [ $nilai3 -ge 76 ] && [ $nilai3 -le 100 ]; then
let a3=1;
fi
nilai4
else
menu_visitor
fi
}
nilai2(){
nilai2=`zenity --scale --title "Ramal Tipe Darahmu" --text
"<i>Nilai seberapa mudah kamu mentolerir kesalahan orang
(ps : semakin tinggi, semakin mudah mentolerir)</i>" -value=5 --ok-label="next" --cancel-label="menu visitor"`;
if [ $? = 0 ]; then
if [ $nilai2 -ge 0 ] && [ $nilai2 -le 25 ]; then
let a2=1;
elif [ $nilai2 -ge 26 ] && [ $nilai2 -le 50 ]; then
let b2=1;
elif [ $nilai2 -ge 51 ] && [ $nilai2 -le 75 ]; then
let ab2=1;
elif [ $nilai2 -ge 76 ] && [ $nilai2 -le 100 ]; then
let o2=1;
fi
nilai3
else
menu_visitor
fi
}
ramal(){
clear
nilai=`zenity --scale --title "Ramal Tipe Darahmu" --text
"<i>Nilai seberapa mudah kamu tepat waktu
(ps : semakin tinggi, semakin tepat waktu)</i>" --value=5 -ok-label="next" --cancel-label="menu visitor"`;
if [ $? = 0 ]; then
if [ $nilai -ge 0 ] && [ $nilai -le 25 ]; then
let b1=1;

21
elif [ $nilai -ge 26 ] && [ $nilai -le 50 ]; then
let o1=1;
elif [ $nilai -ge 51 ] && [ $nilai -le 75 ]; then
let ab1=1;
elif [ $nilai -ge 76 ] && [ $nilai -le 100 ]; then
let a1=1;
fi
nilai2
else
menu_visitor
fi
}
############################################################
MENU TEACHING
############################################################
teach(){
#!/bin/bash
nyimpen(){
echo ""
(
echo "25" ; sleep 1
echo "# Saving..." ; sleep 0.1
echo "50" ; sleep 0.1
echo "# Saving..." ; sleep 0.1
echo "75" ; sleep 0.1
echo "Saving..." ; sleep 0.1
echo "100" ; sleep 0.2
) | zenity --progress --width 230\
--title="Welcome to #NyuNyu" \
--text="Loading..." \
--percentage=0
echo ""
mari
}
kelebihan30(){
if [ "$len" -le "$MAXLEN" ]
then
echo "";
echo "$line" >> nyunyu.txt;
chmod 755 nyunyu.txt;
nyimpen
else
echo -e "\033[31m--> karakter lebih dari 30, nyon :3 <-\033[0m"
echo -e "\033[1;33m-------------------------------------\033[0m"
echo ""
echo -e "\033[32mAjarin NyuNyu lagi, nyon :3\033[0m"
echo -e "\033[31mBatas karakter
-->
\033[1;43;32m________________\033[42;1;33m______________\033
[0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih : \033[0m"
kurang
fi

22
}
kurang(){
MINLEN=16
MAXLEN=30
nol=0
read line
len=${#line}
if [ "$len" -le "$nol" ] || [ "$len" -le "$MINLEN" ]; then
echo -e "\033[31m--> karakter kurang <--\033[0m"
echo
"-------------------------------------"
echo -e "\033[32mAjarin NyuNyu lagi, nyon :3\033[0m"
echo -e "\033[31mBatas karakter
-->
\033[1;43;32m________________\033[42;1;33m______________\033
[0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih :
\033[0m"
kurang
else kelebihan30
fi
}
end_teach(){
case $zen in
1) chat ;;
2)
echo
"-------------------------------------"
echo -e "\033[32mAjarin NyuNyu lagi, nyon :3\033[0m"
echo -e "\033[31mBatas karakter
-->
\033[1;43;32m________________\033[42;1;33m______________\033
[0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih :
\033[0m"
kurang;;
3) clear
ramal
;;
4) clear
pass
;;
5) eog nyunyu.jpg
menu_visitor ;;
6)
zenity --question --width 100 --text "Mau keluar beneran,
Kak $nama :'(?";
if [ $? = 0 ]; then
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""

23
exit 0
else
mari
fi;;
*) clear mari ;;
esac
}
mari(){
zen=`zenity --title "#NyuNyu Said" --width 100 --entry -text "
Makasih udah ngajarin #NyuNyu, Kak :D
Mau ke mana habis ini, Kak?
1. Talk
2. Teach
3. Ramal Tipe Darahmu
4. Login Admin
5. Info
6. Exit
Kakak milih no. ? "`
if [ $? = 0 ]; then
end_teach
else
echo
"-------------------------------------"
echo -e "\033[32mAjarin #NyuNyu lagi, nyon :3\033[0m"
echo -e "\033[31mBatas karakter
-->
\033[1;43;32m________________\033[42;1;33m______________\033
[0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih :
\033[0m"
kurang
fi
}
clear
tput cup 1 10
echo -e "\033[32mKetikkan yang Kak $nama pengen #NyuNyu
ngomongin :D\033[0m"
tput cup 2 17
echo -e "\033[31m(min=16 karakter; maks=30 karakter,
Nyon)\033[0m"
tput cup 3 10
echo -e "\033[1;33m-------------------------------------------\033[0m"
echo ""
echo -e "\033[31mBatas karakter
-->
\033[1;43;32m________________\033[42;1;33m______________\033
[0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih : \033[0m"
kurang
}
#<---end teach-->#
############################################################
MENU AWAL (zenity - menu)

24
############################################################
menu_utama(){
clear
zenity --list --title "Menu Utama" --text "Select item
from the list" --column "Kode" --column "Pilihan" 1
"Visitor" 2 "Admin" 3 "Keluar" > pilih;
pil=`cat pilih`
if [ $? = 0 ]; then
case $pil in
"1") nama;
;;
"2") pass;
;;
"3")
zenity --question --width 100 --text "Mau keluar
beneran, Kak $nama :'(?";
if [ $? = 0 ]; then
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
else
menu_utama
fi;;
*)
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
;;
esac
else
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
fi
}
loading1(){
clear
(
echo "25" ; sleep 1
echo "# Loading..." ; sleep 0.1

25
echo "50" ; sleep 0.1
echo "# Loading..." ; sleep 0.1
echo "75" ; sleep 0.1
echo "Loading..." ; sleep 0.1
echo "100" ; sleep 0.2
) | zenity --progress --width 230\
--title="Welcome to #NyuNyu" \
--text="Loading..." \
--percentage=0
if [ $? = 0 ]; then
menu_utama
else
zenity --error --title="#NyuNyu Said" --text="#NyuNyu
belom beraksi, nih, Kak :'(" --timeout 2
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
fi
}
nama(){
clear
nama=$(zenity --title "Kenalan, Nyon :3" --entry --text
"Nama kakak?" --entry-text "nama" --ok-label="next" -cancel-label="back"
);
echo "$nama
$tanggal
$waktu" >> nyunyu_visitor.txt
if [ $? = 0 ]; then menu_visitor
else menu_utama
fi
}
menu_visitor(){
clear
jam=`case $(date +%H) in
00|01|02|03|04|05|06|07|08|09)
echo "Pagi"
;;
10|11|12|13|14)
echo
"Siang"
;;
15|16|17|18)
echo
"Sore"
;;
*)
echo
"Malam"
;;
esac`

26
zenity --list --title "Menu Visitor" --height 245 --width
240 --text "$jam, Kak $nama !!!" --ok-label="ok" --cancellabel="login Admin" --column "Kode" --column "Pilihan" 1
"Talk" 2 "Teach" 3 "Ramal Tipe Darahmu" 4 "Info" 5 "Keluar"
> pilih2;
pil2=`cat pilih2`
if [ $? = 0 ]; then
case $pil2 in
"1") chat;
;;
"2") teach;
;;
"3") ramal;
;;
"4") eog nyunyu.jpg; menu_visitor
;;
"5")
zenity --question --width 100 --text "Mau keluar
beneran, Kak $nama :'(?";
if [ $? = 0 ]; then
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
else menu_visitor
fi;;
*) pass
esac
else pass
fi
}
############################################################
START HERE
############################################################
clear
loading1
#<---end menu awal--->#

27

BAB IV
ANALISA
Menu Pembuka
Pada awal program dijalankan, tampilan yang akan dijumpai adalah :

Tampilan tersebut merupakan tampilan dari list program :


loading1(){
clear
(
echo "25" ; sleep 1
echo "# Loading..." ; sleep 0.1
echo "50" ; sleep 0.1
echo "# Loading..." ; sleep 0.1

Tampilan loading
yang muncul ketika
program pertama
kali dijalankan.

echo "75" ; sleep 0.1


echo "Loading..." ; sleep 0.1
echo "100" ; sleep 0.2
) | zenity --progress --width 230\
--title="Welcome to #NyuNyu" \
--text="Loading..." \
--percentage=0
if [ $? = 0 ]; then

Gambar 1

menu_utama
else
zenity --error --title="#NyuNyu Said" --text="#NyuNyu

Gambar 2

belom beraksi, nih, Kak :'(" --timeout 2


clear
echo ""
sleep 0.5

Gambar 3

echo -e "\033[31m--> Terimakasih telah menggunakan program


#NyuNyu :) <--\033[0m"
echo ""
exit 0
fi
}

28

Gambar 1

Gambar 2

Gambar 3

Script di atas merupakan script yang menggunakan perintah zenity untuk


menampilkan GUI.
progress.

Pada script loading,

menggunakan tipe zenity --

Pengaturan lebar diatur dengan perintah --width

dan

ketinggian diatur dengan perintah --height.


Pemakaian sleep 0.1 berfungsi untuk mengatur delay, sehingga perintah
selanjutnya akan keluar setelah terjadi delay selama 0.1 second.
Untuk melakukan pengaturan pada button ok dan cancel, dimasukkan
perintah di bawah ini :
if [ $? = 0 ]; then
perintah;
else
perintah;
fi

pada perintah di atas, button ok dianggap memiliki nilai 0, sehingga ketika


button ok dipilih, akan keluar menu_utama. Sedangkan, ketika cancel dipilih,
maka akan muncul GUI seperti yang dicantumkan di atas. Pengaturan yang
terjadi pada cancel, berlaku pula ketika user menekan tombol (x) di pojok kiri
GUI. Dengan kata lain, pengaturan yang terjadi untuk tombol cancel akan
berlaku pula pada tombol (x). Hal ini terjadi pula pada script-script selanjutnya.

29

Pada menu utama, akan menampilkan pilihan untuk user masuk sebagai
visitor, admin,atau memilih keluar. Script yang digunakan pada menu utama
adalah sebagai berikut :
menu_utama(){
clear
zenity

--list

--title "Menu Utama" --text "Select item from

the list" --column "Kode" --column "Pilihan" 1 "Visitor" 2


"Admin" 3 "Keluar" > pilih;
pil=`cat pilih`
if [ $? = 0 ]; then
case $pil in
"1") nama;
....
}

Dari script tersebut, diketahui bahwa zenity yang digunakan menggunakan


type --list

dengan dua kolom. Pilihan yang diambil oleh user akan

diredirection ke pilih. Kemudian, dibuat variabel pil yang berisi perintah `cat
pilih`. Cat akan memfilter data dari pilih dan dari hasil filter tersebut, akan
dilakukan pengkondisian menggunakan perintah case.
Menu Visitor :
Jika pada menu utama, user memilih menu visitor, maka program akan
menampilkan tampilan sebagai berikut :

Gambar 4

Gambar 5

Pada program ini, visitor diminta untuk menginputkan $nama terlebih


dahulu. Kemudian, nama tersebut akan disimpan dalam database
nyunyu_visitor.txt. Nama yang dimasukkan ini juga akan muncul pada
program-program selanjutnya. Script yang digunakan adalah :
nama(){
clear

30
nama=$(zenity --title "Kenalan, Nyon :3" --entry --text "Nama
kakak?" --entry-text "nama" --ok-label="next" --cancellabel="back"
);
echo "$nama

$tanggal

$waktu" >> nyunyu_visitor.txt

if [ $? = 0 ]; then menu_visitor
else menu_utama
fi
}

Penambahan nama pada database dilakukan dengan perintah redirection


(>>) yang ditunjukkan di bagian echo "$nama$tanggal $waktu" >>
nyunyu_visitor.txt. Script ini memerintahkan input nama, tanggal,
dan waktu untuk ditambahkan pada database nyunyu_visitor.txt.
Kemudian, program akan menampilkan tampilan menu visitor di bawah ini.

Gambar 6

Pilihan talk pada menu visitor merupakan program auto chatting. Pada
program ini, ditampilkan prompt untuk mengetik chatting-an. Tampilan yang
ditampilkan adalah :

Gambar 7

31

Dari tampilan prompt tersebut, ketika data yang dimasukkan oleh visitor
terdata pada database kosakata dan jumlah karakter tidak melebihi 30
karakter, maka program akan mengeluarkan kalimat jawaban. Program ini
mendeteksi jawaban pada kata pertama dan dengan perintah grep, data input
dicari pada nyunyu.txt yang merupakan letak database kosakata.
Script yang digunakan adalah sebagai berikut :
jawab() {
kosong=" ";
mv="_mv"
ad="_ad"
ex="_ex"
MAXLEN=30
read na no ni nu ne
grepna=`grep $na nyunyu.txt`
if [ $grepna == $kosong ]; then
echo ""
echo -e "\033[32mnyunyu bingung jawab apa kak $nama - '\033[0m";
zenity --question --width 100 --text "Ajarin #NyuNyu, Kak
$nama :'(?";
if [ $? = 0 ]; then
teach
else
echo -e "\033[32mselamat datang lagi, kak $nama\033[0m";
jawab
fi
elif [ $na == "_mv" ]; then
clear
menu_visitor
elif [ $na == "_ad" ]; then
clear
pass
elif [ $na == "_ex" ]; then
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan program
#NyuNyu :) <--\033[0m"
echo ""
exit 0

32
else
echo ""
len=${#grepna}
if [ "$len" -gt "$MAXLEN" ]
then
echo -e "\033[32mkakaknya kepo bingid, syih :3\033[0m";
else
echo -e "\033[32m$grepna \033[0m";
fi
fi
jawab
}

Script tersebut mendeskripsikan karakter kosong dengan variabel kosong


dan panjang maksimal karakter dengan variabel MAXLEN. Cara kerja dari
script tersebut adalah :

Visitor mengingputkan kalimat jawaban. Kemudian, program akan


membaca jawaban tersebut sebagai na no ni nu ne. Dengan
kata lain, program membaca hanya lima kalimat inputan visitor.

Program akan melakukan pengecekan pada kalimat pertama yang


diinputkan visitor, yaitu na. Di sini, program melakukan
pengecekan di database kosakata dengan perintah `grep $na
nyunyu.txt`. Ketika pengecekan menghasilkan data kosong, maka
program akan menjalankan perintah selanjutnya yang tercantum
pada script.

Jika program menemukan kalimat yang lebih dari 30 karakter, maka


program akan mengeluarkan kalimat kakaknya kepo bingid, syih
:3.

Ketika visitor memasukkan kalimat dan program tidak menemukan


kalimat yang sesuai, maka program akan menawarkan pada visitor
untuk menambahkan database kosakata. Dengan kata lain,
penambahan database dilakukan dengan menjalankan program
teach.

Program akan merespon kata _mv untuk membuka menu visitor,


_ad untuk login admin, dan _ex untuk keluar dari program.

Pilihan teach pada menu visitor akan membuka program teach di mana
visitor dapat menginput kalimat dan menambah database kosakata. Menu ini
membuat visitor tidak hanya merasakan output yang disediakan oleh admin,
tapi dapat turut aktif dalam membuat jawaban.

33

Output yang dikeluarkan adalah sebagai berikut :

Gambar 8

Pada output tersebut, terdapat persyaratan dimana karakter diberi batasan


minimal 16 karakter dan maksimal 30 karakter. Dalam pengeksekusiannya,
pembatasan ini menggunakan perintah pengkondisian if. Source code dari
pengkondisian tersebut adalah :
kelebihan30(){
if [ "$len" -le "$MAXLEN" ]
then
echo "";
echo "$line" >> nyunyu.txt;
chmod 755 nyunyu.txt;

Menjalankan fungsi nyimpen jika karakter


memenuhi syarat.

nyimpen

Fungsi yang
mengkondisikan
ketika karakter
yang
dimasukkan
lebih dari 30
karakter.

else
echo -e "\033[31m--> karakter lebih dari 30, nyon :3 <-\033[0m"
echo -e "\033[1;33m-------------------------------------\033[0m"
echo ""
echo -e "\033[32mAjarin NyuNyu lagi, nyon :3\033[0m"
echo -e "\033[31mBatas karakter

-->

\033[1;43;32m________________\033[42;1;33m______________\033[
0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih : \033[0m"
kurang
fi
}
kurang(){
MINLEN=16

Menjalankan fungsi kurang.

34
MAXLEN=30
nol=0
read line
len=${#line}
if [ "$len" -le "$nol" ] || [ "$len" -le "$MINLEN" ]; then
echo -e "\033[31m--> karakter kurang <--\033[0m"
echo

"-------------------------------------"

echo -e "\033[32mAjarin NyuNyu lagi, nyon :3\033[0m"


echo -e "\033[31mBatas karakter

-->

\033[1;43;32m________________\033[42;1;33m______________\033[
0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih : \033[0m"
kurang
else kelebihan30

Menjalankan fungsi kelebihan30.

fi
}

Ketika karakter yang dimasukkan telah memenuhi persyaratan, maka


program akan menyimpan data dan menjalankan fungsi nyimpen. Source code
dari fungsi tersebut adalah :
nyimpen(){

echo ""
(
echo "25" ; sleep 1
echo "# Saving..." ; sleep 0.1
echo "50" ; sleep 0.1
echo "# Saving..." ; sleep 0.1
echo "75" ; sleep 0.1
echo "Saving..." ; sleep 0.1
echo "100" ; sleep 0.2
) | zenity --progress --width 230\
--title="Welcome to #NyuNyu" \
--text="Loading..." \
--percentage=0
echo ""
mari
}

Ouput dari fungsi nyimpen tersebut adalah:

35

Gambar 9

Fungsi nyimpen tersebut akan menjalankan fungsi mari dimana akan


mengeluarkan zenity yang berisi pilihan untuk ke program selanjutnya. Output
zenity yang dikeluarkan adalah sebagai berikut :

Kembali ke program teach.

Gambar 10

Pilihan ramal tipe darahmu pada menu visitor akan membuka program
untuk memperkirakan tipe golongan darah dari paramater yang dibuat.

Gambar 11

Source code dari tampilan tersebut adalah :


Source code untuk
menampilkan
skala.

ramal(){
clear
nilai=`zenity --scale --title "Ramal Tipe Darahmu" -text "<i>Nilai ...</i>" --value=5 --ok-label="next" -cancel-label="menu visitor"`;
Nilai default
kurva.

36

Dari skala tersebut, dibuat range penilaian. Di sini, range yang digunakan
adalah 0 s/d 25; 26 s/d 50; 51 s/d 75; dan 76 s/d 100. Pembuatan range tersebut
menggunakan perintah case di bawah ini:
case $? in
1) menu_visitor;

Perintah pemilihan
skala range dengan
pengkondisian case.

;;
*) if [ $nilai -ge 0
...
fi
elif [ $nilai -ge 26
...
fi
elif [ $nilai -ge 51
...
fi
elif [ $nilai -ge 76
...
fi
else
clear;
fi
;;
esac
}

] && [ $nilai -le 25 ]; then


] && [ $nilai -le 50 ]; then

] && [ $nilai -le 75 ]; then


] && [ $nilai -le 100 ]; then

Dari perintah di atas, nantinya akan disimpan nilai untuk masing-masing


golongan darah. Kemudian, akan ditotal dan akan dikeluarkan zenity yang
berisi hasil dari ramalan golongan darah. Potongan dari source code tersebut
adalah :
Menjumlah nilai dari
perintah case pada
perintah
sebelumnya.

totaldarah(){
let totala=a1+a2+a3+a4+a5;
let totalo=o1+o2+o3+o4+o5;
let totalab=ab1+ab2+ab3+ab4+ab5;
let totalb=b1+b2+b3+b4+b5;
if [ $totala -le $totalb ] && [ $totala -le $totalab ]
&& [ $totala -le $totalo ]; then
cat daraha.txt |
zenity --text-info --title "Tipe
golongan darahmu : A" --height 400 --width 400 --oklabel="menu visitor" --cancel-label="hitung lagi";

37

Output yang dikeluarkan dari potongan code di atas adalah :

Gambar 12

Pilihan info pada menu visitor akan mengeluarkan gambar di bawah ini:

Gambar 13

38

Menu Admin :
Jika pada menu utama, user memilih menu admin, maka program akan
menampilkan tampilan sebagai berikut :

Gambar 14

Gambar 15

Script yang digunakan untuk mengeluarkan output password tersebut


adalah:
pass(){
clear
pass=$(zenity --entry --ok-label="ok" --cancellabel="menu utama" --title="Wanna login Admin?" -text="Entry your _password:" --hide-text);
if [ $? = 0 ]; then

Menyebabkan text tercetak


dalam bentuk bullets.

case $pass in
"4994" )
echo "Admin

$tanggal

$waktu" >>

nyunyu_visitor.txt
menu_admin
;;
* )
zenity --info --title="#NyuNyu Said" -text="Welcome back" --timeout 1
menu_utama;;
esac
else
zenity --info --title="#NyuNyu Said" -text="Welcome back" --timeout 1
menu_utama
fi
}

39

Jika password yang dimasukkan benar, maka program akan menjalankan


menut_admin. Sedangkan, jika password tidak sesuai, program menjalankan
menu_utama. Menu admin yang akan muncul adalah :

Gambar 16

Dari pilihan tersebut, jika admin memilih menu lihat pengunjung, maka
program mengeluarkan gambar 17 di bawah ini.

Gambar 17

Gambar 18

Gambar 18 menunjukkan tampilan ketika admin memilih edit data. Source


code yang digunakan untuk dua tampilan tersebut adalah :

40
lihat_pengunjung(){
awk '{{printf"%s\n",$1; printf"%s\n",$2;
printf"%s\n",$3;}}' nyunyu_visitor.txt | zenity --list
--title="Menu Admin" --text="Database Pengunjung" --oklabel="edit data" --cancel-label="back" --column="Nama"
--column="Tanggal Pakai" --column="Jam Pakai" --width
320 --height 500;
if [ $? = 0 ]; then
gedit nyunyu_visitor.txt
Perintah untuk mengedit data
menu_admin
dengan membuka gedit.
else
menu_admin
fi
}

Pilihan Lihat Database Kosakata akan mengeluarkan database kosakata di


file nyunyu.txt. Database inilah yang menjadi sumber dalam program chatting.
Tampilan yang dikeluarkan adalah sebagai berikut :

Gambar 19

Source code yang digunakan untuk menampilkan database kosakata tersebut


adalah :
dbkata(){
clear
cat nyunyu.txt | awk '{print $1" "$2" "$3" "$4" "$5"
"$7" "$8" "$9" " $10 }' | zenity --title "Database
Kosakata" --height 150 --ok-label="edit data" --cancellabel="back" --text-info --width=1000 --height=1500
if [ $? = 0 ]; then
editkata

41
else
menu_admin
fi
}

Pada source code tersebut, terdapat perintah pemanggilan fungsi editkata.


Fungsi tersebut dipanggil ketika admin memilih button edit data. Tampilan
yang dikeluarkan sama ketika admin memilih perintah edit kosakata di menu
admin.

Gambar 20

Gambar 21

Gambar 22

Source code yang digunakan adalah sebagai berikut :


editkata(){
edit=$(zenity --list --radiolist --title "Edit
Kosakata" --text "Pilih proses edit kosakata:" --column
"Pick" --column "Pilihan" FALSE "edit gedit" FALSE
"edit perbaris");
case $edit in
"edit gedit")
gedit nyunyu.txt
Menampilkan edit data
menu_admin;
;;
melalui gedit.
"edit perbaris")

42
cari2=`zenity --title "Cari Kata" --entry --text
"Masukkan baris kata yang akan diedit:" --oklabel="next" --cancel-label="cancel"`
Perintah perulangan
untuk pengecekan
data. Jika data
kosong, maka
admin diminta
kembali
menginputkan data.

Mengambil data yang


berada di temu34.txt
dan mengcopy
kembali ke
nyunyu.txt

Perintah yang
dijalankan ketika
kata yang akan
diedit tidak
ditemukan dalam
database.

while [ -z $cari2 ];
do
zenity --warning --title "Cari Kata" --text "Input
tidak boleh kosong"
cari2=`zenity --title "Cari Kata" --entry --text
"Masukkan baris kata yang akan diedit:" --oklabel="next" --cancel-label="cancel"`
done
if [ $? = 0 ]; then
if [ $? != 0 ]; then
dbkata
else
kata2=`zenity --title "Cari Kata" --width="500" -entry --text "Ganti kalimat pada baris $cari2 dengan:"
--ok-label="next" --cancel-label="cancel"`
if [ $? = 0 ]; then
sed ''$cari2' c\'"$kata2"'' nyunyu.txt > temu34.txt
cat temu34.txt > nyunyu.txt
rm temu34.txt #menghapus data di temu34.txt
(
Baris kata yang ditemukan di
...
nyunyu.txt, di copy ke
temu34.txt dengan redirection
else
zenity --warning --text "Kata tidak ditemukan" -timeout 1;
editkata
fi
fi
else
clear
echo ""
sleep 0.5
echo -e "\033[31m--> Terimakasih telah menggunakan
program #NyuNyu :) <--\033[0m"
echo ""
exit 0
fi
;;
*) menu_admin ;
;;
esac
}

Jika admin memilih menu cari kata, maka tampilan yang keluar adalah :

43

Gambar 23

Gambar 24

Dari program tersebut, admin dapat memilih untuk kembali ke menu admin
atau melakukan edit data. Jika admin memilih menu edit data, program akan
menjalankan fungsi editkata(), seperti penjelasan sebelumnya.

44

BAB V
KESIMPULAN

Kesimpulan yang dapat diambil dari program #NyuNyu adalah :


Program ini menggunakan perintah set dan grep untuk pengambilan data;
perintah if dan case digunakan untuk pengecekan suatu kondisi; perintah
while digunakan untuk melakukan pengecekan dengan sistem looping;
perintah fungsi untuk mempermudah pembuatan program; juga digunakan
GUI berupa zenity untuk menampilkan menu ataupun menginput data.
Semakin
bervariasi

banyak
jawaban

database
yang

yang

dimasukkan,

diberikan

oleh

menginputkan kalimat pada program chatting.

maka akan semakin

program

ketika

visitor

45

DAFTAR PUSTAKA

n.n. 2013. Tipe Kepribadian menurut Golongan Darah. http://tahupedia.com


(diakses 20 Desember 2013).
Jamazy, Achmad Aflah. 2011. Pendataan dan Penjualan Celana Jeans. Tugas
Akhir. Surabaya : Program D4 Teknik Telekomunikasi.
Saleh, Akuwan. n.d. Modul Praktikum Shell Programming. Bahan Ajar. Surabaya
: Program D4 Teknik Telekomunikasi.
____________. n.d. Modul Teori Shell Programming. Bahan Ajar. Surabaya :
Program D4 Teknik Telekomunikasi.

Anda mungkin juga menyukai