Program Chat Otomatis Dengan Shell Linux
Program Chat Otomatis Dengan Shell Linux
Daftar Isi
Daftar Isi ....
ii
13
27
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
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
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.
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 :
if [ "$hasil" = 10 ]
if [ "$hasil" = 10 ]
then
then
echo "Hasil perkalian
bilangan = $hasil"
fi
else
echo "selesai"
fi
ekspresi/kondisi yang
diuji benar,
sedangkan
bentuk
kedua
mempunyai banyak perintah yang akan dijalankan jika ekspresi yang diuji benar.
Kalau diperhatikan, perintah if
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
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
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
= $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.
dan berhasil maka akan dapat digunakan kapan saja bila diinginkan. Beberapa hal
mengenai fungsi ini adalah:
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;
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"
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.
"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
[]
List
{}
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
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
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
}
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 loading
yang muncul ketika
program pertama
kali dijalankan.
Gambar 1
menu_utama
else
zenity --error --title="#NyuNyu Said" --text="#NyuNyu
Gambar 2
Gambar 3
28
Gambar 1
Gambar 2
Gambar 3
dan
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
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
30
nama=$(zenity --title "Kenalan, Nyon :3" --entry --text "Nama
kakak?" --entry-text "nama" --ok-label="next" --cancellabel="back"
);
echo "$nama
$tanggal
if [ $? = 0 ]; then menu_visitor
else menu_utama
fi
}
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
}
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
Gambar 8
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
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
"-------------------------------------"
-->
\033[1;43;32m________________\033[42;1;33m______________\033[
0m"
echo -ne "\033[32mNyu, kamu ngomong gini, nih : \033[0m"
kurang
else kelebihan30
fi
}
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
}
35
Gambar 9
Gambar 10
Pilihan ramal tipe darahmu pada menu visitor akan membuka program
untuk memperkirakan tipe golongan darah dari paramater yang dibuat.
Gambar 11
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
}
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
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
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
Gambar 16
Dari pilihan tersebut, jika admin memilih menu lihat pengunjung, maka
program mengeluarkan gambar 17 di bawah ini.
Gambar 17
Gambar 18
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
}
Gambar 19
41
else
menu_admin
fi
}
Gambar 20
Gambar 21
Gambar 22
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.
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
banyak
jawaban
database
yang
yang
dimasukkan,
diberikan
oleh
program
ketika
visitor
45
DAFTAR PUSTAKA