Professional Documents
Culture Documents
15 Aplikasi Pemrograman Shell
15 Aplikasi Pemrograman Shell
KELAS : 2 D3 TELEKOMUNIKASI B
NRP : 7211030052
I. Tujuan
1. Membuat program aplikasi pengaturan warna dan fungsi random.
2. Membuat program aplikasi aritmatika, awk, fungsi, user interface dan dialog.
II. Percobaan
1. Program shell untuk aplikasi schedule reminder :
#!/bin/bash
clear
echo "**************************************"
echo "********* SCHEDULE REMINDER **********"
echo "**************************************"
echo "* Date today:`date | awk '{print $3,$2,$6}' ` | time
:`date | awk '{print $4}'` *"
echo "**************************************"
echo
echo -n " Massages = "
read pesan
echo
echo -n " Time (hh:mm:ss) = "
read waktu
echo
echo "**************************************"
echo "**** do not exit terminal untill *****"
echo "********** the bell rings ************"
echo "**************************************"
duration=2000
volume=$'\xff'
mute=$'\x80'
function mknote () {
for t in `seq 0 $duration`
do
test $(( $t % $1 )) = 0 && echo -n $volume || echo -n $mute
done
}
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)
do
cek="`date | awk '{print $4}'`";
if [ "$waktu" == "$cek" ]; then
echo -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=`echo "Time: $waktu Massages : $pesan" | zenity --text-info --title "***
SCHEDULE REMINDER ***" --height 50 --width 300`
echo $d
exit 0
fi
done
ubuntu@ubuntu:~# bash coba.sh
**************************************
********* SCHEDULE REMINDER **********
**************************************
* Date today:30 Dec 2012 | time
:11:44:24 *
**************************************
**************************************
**** do not exit terminal untill *****
********** the bell rings ************
**************************************
2. Penghitung nilai rangkaian resistor seri atau parallel
#!/bin/bash
clear
echo -e "\033[32m `date` \033[0m"
sleep 1
load(){
clear
tput cup 10 15
echo please_wait..!!
echo " "
tput cup 15 15
echo -n -e "\033[32m loading.\033[0m"
sleep 1
echo -n -e "\033[31m .\033[0m"
sleep 1
echo -n -e "\033[32m .\033[0m"
sleep 1
echo -n -e "\033[31m .\033[0m"
echo -n -e "\033[32m .\033[0m"
echo -e "\033[31m .\033[0m"
clear
}
seri(){
load
echo ""
echo -e "\033[34m RANGKAIAN SERI \033[0m"
echo ""
echo -n -e "\033[34m masukkan banyak resistor yang anda hitung :\033[0m"
read w
echo ""
echo -e "\033[2;33m resistor dalam satuan ohm\033[0m"
echo ""
let "x=1"
let "y=0"
g=0
while let "x <=$w"
do
let "x=x+1"
let "y=y+1"
echo -n -e "\033[34m masukkan resistor $y : \033[0m"
read a
g=`echo "$g+$a" | bc`;
done
echo
echo -e "\033[34m hasil perhitungan nilai rangkaian yang dirangkai seri adalah :
$g ohm \033[0m"
sleep 1.75
jawab=`zenity --title "" --width 400 --entry --text "apakah anda ingin
menjalankannya lagi(y/t)? : "`
case $jawab in
y | Y | ya | Ya | YA )
clear
echo "loading. ."
sleep 1
clear
dor;;
t | T | tidak | TIDAK | *)
echo
clear
tput cup 5 10
sleep 1
v=`zenity --title "== ttttttttt ==" --width 400 --entry --text "
*--*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
....TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI....
-*-**-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"`
echo $v;;
esac
return 0
}
par(){
load
echo ""
echo -e "\033[34mRANGKAIAN PARAREL \033[0m"
echo ""
echo -n -e "\033[1;35m masukkan banyak resistor yang anda hitung :\033[0m"
read w
echo ""
echo -e "\033[2;33m resistor dalam satuan ohm\033[0m"
echo ""
echo -n -e "\033[34m masukkan nilai resistor ke 1 : \033[0m"
read z
g=$z
let "x=1"
while let "x <=$w-1"
do
let "x=x+1"
echo -n -e "\033[34m masukkan nilai resistor ke $x : \033[0m"
read a
rum=`echo "$g*$a" | bc`;
rum2=`echo "$g" | bc`;
rum3=`echo "$rum2+$a" | bc`;
g=`echo "scale=2;$rum/$rum3" | bc`;
done
echo
echo -e "\033[34m Hasil perhitungan nilai rangkaian yang dirangkai pararel
adalah : $g ohm \033[0m"
sleep 1.75
jawab=`zenity --title "" --width 400 --entry --text "apakah anda ingin
menjalankannya lagi(y/t)? : "`
case $jawab in
y | Y | ya | Ya | YA )
clear
echo "loading. ."
sleep 1
clear
dor;;
t | T | tidak | TIDAK | *)
echo
clear
tput cup 5 10
sleep 1
v=`zenity --title "== tttttttt ==" --width 400 --entry --text "
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
....TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI....
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"`;;
esac
return 0
}
apik(){
h=`date`
f=`case $(date +%H) in
00|01|02|03|04|05|06|07|08|09)
echo "SELAMAT PAGI";;
10|11|12|13|14)
echo "SELAMAT SIANG";;
15|16|17|18)
echo "SELAMAT SORE";;
*)
echo "SELAMAT MALAM";;
esac`
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 : "`
echo $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 )
clear
echo "loading. ."
sleep 1
clear
dor;;
t | T | tidak | TIDAK | *)
echo
clear
tput cup 5 10
sleep 1
v=`zenity --title "== tttttttt ==" --width 400 --entry --text "
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
....TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI....
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"`
echo $v;;
esac;;
esac
}
dor(){
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 : "`
echo $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 )
clear
echo "loading. ."
sleep 1
clear
dor;;
t | T | tidak | TIDAK | *)
echo
clear
tput cup 5 10
sleep 1
v=`zenity -title "== ttttttttttt ==" -width 400 -entry- text "
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
....TERIMAKASIH TELAH MENGGUNAKAN PROGRAM INI....
*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*"`
echo $v;;
esac;;
esac
}
apik
loading. . . . . .
RANGKAIAN SERI
hasil perhitungan nilai rangkaian yang dirangkai seri adalah : 7200 ohm
Awal program
#!/bin/bash
back(){
init=40
while true
do
acak=$RANDOM
if [ $acak -le 7 ]; then
let no=$acak+$init
echo $no"m"
break
fi
done
}
hurufi(){
i=`back`
echo -e "\033[$i\033[0;0H \033[0m"
echo -e "\033[$i\033[1;0H \033[0m"
echo -e "\033[$i\033[2;0H \033[0m"
echo -e "\033[$i\033[3;0H \033[0m"
echo -e "\033[$i\033[4;0H \033[0m"
echo -e "\033[$i\033[5;0H \033[0m"
}
hurufl(){
i=`back`
echo -e "\033[$i\033[0;5H \033[0m"
echo -e "\033[$i\033[1;5H \033[0m"
echo -e "\033[$i\033[2;5H \033[0m"
echo -e "\033[$i\033[3;5H \033[0m"
echo -e "\033[$i\033[4;5H \033[0m"
echo -e "\033[$i\033[5;5H \033[0m"
echo -e "\033[$i\033[5;6H \033[0m"
echo -e "\033[$i\033[5;7H \033[0m"
echo -e "\033[$i\033[5;8H \033[0m"
}
hurufu(){
i=`back`
echo -e "\033[$i\033[3;10H \033[0m"
echo -e "\033[$i\033[3;13H \033[0m"
echo -e "\033[$i\033[4;10H \033[0m"
echo -e "\033[$i\033[4;13H \033[0m"
echo -e "\033[$i\033[5;10H \033[0m"
echo -e "\033[$i\033[5;11H \033[0m"
echo -e "\033[$i\033[5;12H \033[0m"
echo -e "\033[$i\033[5;13H \033[0m"
}
hurufp(){
i=`back`
echo -e "\033[$i\033[3;15H \033[0m"
echo -e "\033[$i\033[3;16H \033[0m"
echo -e "\033[$i\033[3;17H \033[0m"
echo -e "\033[$i\033[3;18H \033[0m"
echo -e "\033[$i\033[4;15H \033[0m"
echo -e "\033[$i\033[4;18H \033[0m"
echo -e "\033[$i\033[5;15H \033[0m"
echo -e "\033[$i\033[5;16H \033[0m"
echo -e "\033[$i\033[5;17H \033[0m"
echo -e "\033[$i\033[5;18H \033[0m"
echo -e "\033[$i\033[6;15H \033[0m"
echo -e "\033[$i\033[7;15H \033[0m"
}
hurufh(){
i=`back`
echo -e "\033[$i\033[0;20H \033[0m"
echo -e "\033[$i\033[1;20H \033[0m"
echo -e "\033[$i\033[2;20H \033[0m"
echo -e "\033[$i\033[3;20H \033[0m"
echo -e "\033[$i\033[3;21H \033[0m"
echo -e "\033[$i\033[3;22H \033[0m"
echo -e "\033[$i\033[4;20H \033[0m"
echo -e "\033[$i\033[4;22H \033[0m"
echo -e "\033[$i\033[5;20H \033[0m"
echo -e "\033[$i\033[5;22H \033[0m"
}
hurufU(){
i=`back`
echo -e "\033[$i\033[0;26H \033[0m"
echo -e "\033[$i\033[0;29H \033[0m"
echo -e "\033[$i\033[1;26H \033[0m"
echo -e "\033[$i\033[1;29H \033[0m"
echo -e "\033[$i\033[2;26H \033[0m"
echo -e "\033[$i\033[2;29H \033[0m"
echo -e "\033[$i\033[3;26H \033[0m"
echo -e "\033[$i\033[3;29H \033[0m"
echo -e "\033[$i\033[4;26H \033[0m"
echo -e "\033[$i\033[4;29H \033[0m"
echo -e "\033[$i\033[5;26H \033[0m"
echo -e "\033[$i\033[5;27H \033[0m"
echo -e "\033[$i\033[5;28H \033[0m"
echo -e "\033[$i\033[5;29H \033[0m"
}
clear
while true
do
hurufi
hurufl
hurufu
hurufp
hurufh
hurufU
sleep 1s
done
5.
#!/bin/bash
while true
do
clear
echo -e "\033[0;36mSelamat Datang\033[0m di \033[44;1;34mgaTel (Warga
Telkom) \033[0m \033[0;34mRestaurant\033[0m"
echo -e "\033[2;13H-------------"
echo -e "\033[1;35m\033[3;13HMENU HARI INI\033[0m"
echo -e "\033[4;13H-------------"
echo -e "\033[0;37m\033[5;4HMakanan\033[0m \
033[1;30m\033[5;29HMinuman\033[0m"
echo -e "1. Bakso \t\t 4. Es teh"
echo -e "2. Gado-gado \t\t 5. Es Jeruk"
echo -e "3. Rujak \t\t 6. Es Degan"
echo
while true
do
echo -n "Masukkan pilihan makanan anda (atau 't' untuk tidak memesan): "
read pil
case $pil in
1)
echo -n "Banyak Porsi = "
read jumma
let bayarma=jumma*5000;
pilma="Bakso $jumma piring"
break;;
2)
echo -n "Banyak Porsi = "
read jumma
let bayarma=jumma*4000;
pilma="Gado-gado $jumma piring"
break;;
3)
echo -n "Banyak Porsi = "
read jumma
let bayarma=jumma*6000;
pilma="Rujak $jumma piring"
break;;
t)
bayarma=0
pilma="tidak memesan makanan"
break;;
*)
echo "Pilihan 1-3 atau 't'"
echo;;
esac
done
echo
while true
do
echo -n "Masukkan pilihan minuman anda (atau 't' untuk tidak memesan): "
read pil
case $pil in
4)
echo -n "Banyak Gelas = "
read jummi
let bayarmi=jummi*1500
pilmi="Es teh $jummi gelas"
break;;
5)
echo -n "Banyak Gelas = "
read jummi
let bayarmi=jummi*2500
pilmi="Es jeruk $jummi gelas"
break;;
6)
echo -n "Banyak Gelas = "
read jummi
let bayarmi=jummi*3500
pilmi="Es degan $jummi gelas"
break;;
t)
bayarmi=0
pilmi="tidak memesan minuman"
break;;
*)
echo "Pilihan 4-6 atau 't'"
echo;;
esac
done
let total=$bayarma+$bayarmi
echo
echo -e "\033[0;31mBiaya yang harus anda bayar :\033[0m \
033[4;1;31m$total\033[0m"
echo
echo "Pada `date` pelanggan memesan : $pilma dan $pilmi dengan total Rp.
$total" | cat >> rekapQ.txt
echo -n "Apakah mau pesan lagi ? (Y/y/T/t) : "
read jawab
case $jawab in
Y|y)
echo "";;
T|t)
exit 0;;
esac
echo "*************************************"
echo
done
LATIHAN
1. Dengan menggunakan parameter posisi buatlah program aplikasi kamus Indonesia
ke jawa atau sebaliknya. Sebagai bantuan buatlah file database yang berisi
terjemahan setiap kata.
Program :
database.txt
saya kulo
kamu sampeyan
pergi lungo
tidur tilem
makan dhahar
minum ngombe
berangkat budhal
#!/bin/bash
proc=`awk 'BEGIN{i=0}
{
printf "indo["i"]="$1" ; jowo["i"]="$2" ;";
i+=1;
}' < "database.txt"`;
eval "$proc";
e=1;
for i in $(seq 0 $((${#indo[@]} - 1))); do
if [ "$kata" == "${indo[$i]}" ]; then
e=0; tmp=$i;
fi
done
echo $tmp;
if [ $e -eq 0 ]; then
zenity --info --title "Kata ditemukan" --text "$kata = ${jowo[$tmp]}";
else
zenity --error --text "Kata $kata tidak ditemukan";
fi
Jika kata
Program :
file data.txt
1:Bimantara:18:Surabaya:Sehat:Wal'afiat
2:Teddy:20:Surabaya:Parah:Sariawan
3:Roni:21:Semarang:Kritis:Jantung
#!/bin/bash
set_id(){
id=`awk 'BEGIN{i=1}
{
printf "ids="i";";
i+=1;
}' < "database.txt"`;
eval "$id";
}
daftar(){
data=`awk 'BEGIN{FS=":";i=0}
{
printf "d["i"]="$1" ;d["i+1"]=\""$2"\" ;d["i+2"]="$3"; d["i+3"]=\""$4"\";
d["i+4"]=\""$5"\"; d["i+5"]=\""$6"\";";
i+=6;
}' < "data.txt"`;
eval "$data";
zenity --list --width 600 --height 500 --title "Daftar Pasien" --text "Daftar Pasien" \
--column "id" --column "nama" --column "umur" --column "alamat" \
--column "keadaan" --column "diagnosa" "${d[@]}";
main;
}
tambah(){
nama=$(zenity --entry --text "Masukan nama :");
umur=$(zenity --entry --text "Masukan umur :");
almt=$(zenity --entry --text "Masukan alamat :");
kadn=$(zenity --entry --text "Masukan keadaan :");
diag=$(zenity --entry --text "Masukan diagnosa :");
set_id;
echo "$(($ids+1)):$nama:$umur:$almt:$kadn:$diag" >> "data.txt";
daftar;
}
main(){
pil=$(zenity --entry --cancel-label "exit" --title "Arsip Pasien" --text \
"pilihan :
1. Daftar Pasien
2. Entry Pasien");
if [ $? -eq 1 ]; then
exit;
fi
case $pil in
1) daftar;;
2) tambah;;
*) zenity --error --text "input salah";
main;;
esac;
}
main;
Percobaan pertama adalah pembuatan schedule reminder. Dalam program ini pesan
untuk pengingat diinputkan melalui keyboard dengan perintah read dan disimpan dalam
variable pesan. Kemudian diinputkan waktu dimana bell akan berbunyi dan disimpan
dalam variable waktu. Proses dalam program ini adalah menyamakan waktu computer
dengan waktu yang diinputkan, jika sama maka reminder akan berbunyi. Reminder ini
membunyikan nada yang disusun dengan mknote. Waktu dari computer diambil
menggunakan awk dan disimpan dalam variable cek. Setelah itu masuk ke fungsi if bila
“$waktu” == “$cek” maka nada dibunyikan, membunyikan nada cukup mencetak variable
nada yang disusun dari mknote menggunakan echo. Kemudian pesan yang ada dalam
variable pesan dicetak menggunakan zenity.
Percobaan kedua adalah program untuk menghitung nilai resistor yang dirangkai
seri maupun parallel. Program diawali dengan input jenis rangkaian yang akan dihitung,
yakni seri atau parallel. Untuk memilih dapat diinputkan angka 1 untuk seri, namun juga
dapat diinputkan string seri/Seri/SERI karna dalam inputnya disaring menggunakan case,
begitu juga parallel. Setelah didapat input kemudian fungsi langsung dijalankan
berdasarkan inputnya. Bila input 1 atau rangkaian seri maka akan dijalankan fungsi seri,
begitu juga dengan input parallel. Dalam fungsi seri atau parallel terdapat perintah untuk
menginputkan jumlah resistor yang akan dihitung, jumlah resistor tsb kemudian disimpan
dalam variable yang nantinya akan menjadi pembatas loop saat menginputkan nilai resistor
yaitu w(untuk seri) dan z(untuk parallel). Dalam loop diminta untk memasukkan nilai
resistor, loop ini dibatasi oleh variable w atau z. Kemudian dihitung nilai hasil seri atau
parallel dari ke-n resistor yang diinputkan tsb.
Percobaan ketiga adalah program aplikasi game tebak angka. Pada game ini input
hanyalah nama. Program dimulai dengan menginputkan nama. Kemudian masuk ke game.
Niali angka yang ditebak adalah random antara 1-10, sehingga perintahnya ‘rand=$
[($RANDOM %10) +1]’. $RANDOM %10 maka akan angka random yang akan muncul
adalah antara 0-9, karena yang diinginkan adalah 1-10 maka dijumlah dengan satu
($RANDOM %10)+1. Kemudian dilanjutkan dengan loop while a <= 5, loop ini membatasi
tebakan kita hanya boleh 5 kali, lebih dari itu maka akan kalah. Setelah itu dimunculkan
dialog dengan menggunakan zenity tipe entry, dalam dialog tsb diinputkan angka tebakan
kita dan disimpan dalam variable angka. Kemudian dilanjutkan dengan fungsi if dimana jika
$angka –eq $rand (variable angka sama dengan variable random) maka akan ditampilkan
dialog zenity ucapan selamat telah memenangkan game, namun jika tidak maka akan
muncul dialog zenity yang berisi ucapan kalau kita belum beruntung. Kemudian variable a
yang awalnya 1 berubah menjadi 2 dan loop kembali berulang. Jika sampai a = 5 nilai
randomnya masih tidak ditemukan maka akan dicetak kalau kita kalah.
Percobaan keempat adalah program aplikasi pengubah tampilan warna secara acak.
Dalam fungsi back nilai acak diambil dengan perintah ‘acak=$RANDOM’. Kemudian disaring
jika nilai variable acak lebih yang < 7 dijumlahkan dengan variable init yang nilainya 40.
Maka kemungkinan nilainya adalah 40-47. Nilai tersebut dikembalikan ke fungsi huruf yang
menjalankan fungsi acak, yakni kedalam variable i karena dalam fungsi huruf, fungsi back
dijalankan dengan menggunakan variable I (i=`back`). Dalam fungsi huruf dicetak banyak
karakter namun indeks warnanya diambil dari variable i ( yang nilainya dirandom).
Kemudian tiap proses dalam fungsi huruf diikuti perintah sleep 1. Itu artinya pergantian
warna akan berubah tiap 1 detik.