Anda di halaman 1dari 85

TUGAS

SISTEM OPERASI

Dosen: Rohman Dijaya, S.Kom., M.Kom.

Disusun Oleh:

Eranio Mukti Lazuardi


171080200059
INFORMATIKA 4A1

PROGRAM STUDI INFORMATIKA

FAKULTAS SAINS DAN TEKNOLOGI

UNIVERSITAS MUHAMMADIYAH SIDOARJO

2019
Praktikum
Pemrograman Filter
11 (awk)

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

C. PROSEDUR
1. Masuk ke sistem operasi Linux.
2. Login sebagai stD3XXYYY.
3. Gunakan perintah awk pada pemrograman shell untuk aplikasi filter file teks
dan operasi aritmatika.
4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan
sementara.

D. PERCOBAAN
1. Mencari pattern "paris" pada sebuah file menggunakan awk tanpa action.
$ cat > findparis
awk /paris/
^d
$ chmod u+x findparis
$ echo an american in georgia | ./findparis
$ echo an American in paris | ./findparis

2. Mencari pattern "paris" pada sebuah file menggunakan awk dengan default
action (print).
$ cat > findparis
awk '/paris/ { print }'
^d
$ echo an american in georgia | ./findparis
$ echo an American in paris | ./findparis

3. Mencetak informasi tanggal dengan parameter posisi ($3) dari perintah


"date" menggunakan awk.
$ cat > dayofmonth
date | awk '{ print $3 }'
^d
$ chmod u+x dayofmonth
$ date
$ ./dayofmonth

4. Menggunakan parameter, default action dan tanpa pattern dalam program


awk.
$ cat > par.awk
{ print $3 }
^d
$ date | awk –f par.awk

5. Menggunakan perintah awk untuk operasi arimatika


$ cat > ave
awk '{
n = n + 1
X = X + $1
Y = Y + $2
Z = Z + $3
Print X/n, Y/n, Z/n
}'
^d
$chmod u+x ave
$ cat > test
1 2 3
4 5 6
7 8 9
0 1 2
^d
$ ./ave < test ("<" input redirection)
6. Menggunakan perintah awk dan BEGIN_END untuk operasi arimatika
$ cat > ave2
awk '
BEGIN { n = 0 ; X = 0 ; Y = 0 ; Z = 0 }
{
n = n + 1
X = X + $1
Y = Y + $2
Z = Z + $3
}
END { Print X/n, Y/n, Z/n }'
^d
$ chmod u+x ave2
$ ave2 < test
7. Menggunakan perintah awk dengan opsi –f untuk operasi arimatika
$ cat > math
{
print $1 " + " $2 " = " $1 + $2 "\t"
print $1 " - " $2 " = " $1 - $2 "\t"
print $1 " / " $2 " = " $1 / $2 "\t"
print $1 " x " $2 " = " $1 * $2 \t"
print $1 " mod " $2 " = " $1 % $2 "\t"
}
$ awk -f math
5 2

8. Memilih/manipulasi data dalam sebuah file berdasarkan pattern "good"


menggunakan perintah awk.
$ cat > pilih
egg order 4
cacke order 10
cheese okay 4
pen good 12
floppy good 5
^d
$ awk '/good/ { print $3 }' pilih
9. Manipulasi data dalam sebuah file dan operasi aritmatika dengan awk.
$ cat > invent
1. Pen 5 20.00
2. Pencil 10 2.00
3. Rubber 3 3.50
4. Cock 2 45.50
^d
$ awk '{ print $1 $2 "--> Rp." $3 * $4 }' invent
$ awk '{ print $2 }' invent
$ awk '{ print $2 $4}' invent
$ awk '{ print $0 }' invent
$ cat > prn_pen
/Pen/ { print $3 }
^d
$ awk -f prn_pen invent

10. Manipulasi data dalam sebuah file dan mencetak dengan awk.

$ cat > progsh


BEGIN {
printf "Program Shell awk 2007.\n"
printf "Lab. Jarkom PENS.\n"
printf "-------------------------\n"
}

{
total = $3 * $4
recno = $1
item = $2
gtotal += total
printf "%d %s Rs.%f\n", recno, item, total
}

END {
printf "---------------------------\n"
printf "Total Rs. %f\n" ,gtotal
printf "===========================\n"
}
$ awk -f progsh invent

11. Menampilkan daftar user pada system menggunakan awk


$ vi awk1.sh
#!/bin/bash
PASSWORD_FILE=/etc/passwd
n=1
for name in $(awk 'BEGIN{FS=":"}{print $1}' <
"$PASSWORD_FILE" )
do
echo "USER #$n = $name"
let "n += 1"
done
exit 0
$ ./awk1.sh
12. Penggunaan perintah awk untuk mengetahui informasi file
$ vi awk2.sh
#!/bin/bash
FILES="/usr/sbin/accept
/usr/sbin/pwck
/usr/sbin/chroot
/usr/bin/fakefile
/sbin/badblocks
/sbin/ypbind"
echo
for file in $FILES
do
if [ ! -e "$file" ]
then
echo "$file does not exist."; echo
continue # On to next.
fi

ls -l $file | awk '{ print $9 " file size:


" $5 }'
whatis `basename $file`
echo
done
exit 0
$ ./awk2.sh
E. Latihan

1. Diketahui tabel karakter ASCII dengan data dimulai dari 33 kode desimal
hingga 125 seperti dibawah ini.
Desimal Hex Character
------- --- ---------
33 21 !
34 22 "
35 23 #
. . .
. . .
. . .
125 7d }
Buatlah program shell untuk menampilkan tabel karakter ASCII seperti
diatas dengan awk.
2. Buatlah program shell untuk membangkitkan bilangan random
menggunakan awk dengan banyak data tiap barisnya adalah 25 data.
3. Buatlah program shell untuk membangkitkan bilangan pseudo random
diantara 0 sampai dengan 1 menggunakan awk.
4. Buatlah program shell dengan awk untuk menghitung sisi miring dari
sebuah segitiga (c) seperti ditunjukkan pada gambar dibawah, jika nilai
kedua sisi-sisi yang lain (misal: 3 dan 5) disertakan ketika script dijalankan.

c
3
5
Praktikum
Statement Control
12 (awk)

C. PROSEDUR
1. Masuk ke sistem operasi Linux.
2. Login sebagai stD3XXYYY.
3. Gunakan statement control awk pada pemrograman shell.
4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan
sementara.

D. PERCOBAAN
1. Menggunakan statement control dengan perintah pengkondisian (if).
$ vi tri.awk
awk '
{ if ($4 != "2")
print $0
else {
print $1, $2+12, $3, "0"
print $1+10, $2-6, $3, "1"
print $1-10, $2-6, $3, "1"
print $1, $2+12, $3, "1"
print $1, $2, $3, "0" }
}' $*

$ chmod u+x tri.awk


$ cat > sdata
200 200 18 0
200 -200 18 1
-100 -200 18 1
-100 200 18 1
200 200 18 1
50 0 18 2
^d
$ ./tri.awk sdata
2. Menggunakan variabel NF pada program awk untuk operasi aritmatika.
$ vi aveline
awk '
{ if (NF > 0) {
sum = 0
n = 1
while (n <= NF) {
sum = sum + $n
n = n + 1
}
print sum/NF
}
else
print
}' $*

$ chmod u+x aveline


$ cat > hits
11 3 44 10
13 -7
20 30

18 -18
^d
$ ./aveline hits
3. Menggunakan array dan variable built-in NR pada program awk
$ vi rmdups
awk '
{ found = 0
for ( i=I; i<=NR; i++ )
if (lines[i] == $0) {
found = 1
break
}
if ( found != 1 ) {
lines[NR] = $0 print
}
}' $*
$ chmod u+x rmdups
$ $ cat > dups
Now
is
the
time for men and women
of the
Principle to unite.
^d
$ ./rmdups dups
4. Menggunakan statemen for dan array pada program awk untuk mengetahui
user yang login.
$ vi nlogins
who | awk '{
logins[$1] = logins[$1] + 1
}
END {
for (i in logins)
print logins[i], i
}'
$ chmod u+x nlogins
$ ./nlogins
5. Menggunakan array dua dimensi pada program awk untuk membalik posisi
data dari sebuah file.
$ vi rev.awk
awk '{
for(i=1; i<=NF; i++)
x[NR "." i] = $i
if (NFIELDS < NF)
NFIELDS = NF
}
END {
for (i=1; i<=NFIELDS; i++) {
line = ""
for(j=1; j<=NR; j++)
line = line " " x[j "." i]
print line
}
}'

$ chmod u+x rev.awk$ cat > data


92 18 17
28 09 13
47 43 18
^d
$ ./rev.awk < data
6. Menggunakan fungsi eksponensial pada program awk.
$ vi exp.awk
awk '
BEGIN {
Print "i e**i"
for(i=0;i<10;i++)
print i, exp(i)
exit
}'
$ chmod u+x exp.awk
$ ./exp.awk
7. Menggunakan fungsi index pada program awk
$ vi index.awk
awk 'BEGIN {
print "substr", "sub", index("substr", "sub")
print "sub", "substr", index("sub", "substr")
print "substr", "str", index("substr", "str")
exit
}'
$ chmod u+x index.awk
$ ./index.awk

8. Menggunakan fungsi split pada program awk


$ vi split.awk
awk 'BEGIN {
v = "This:is:a split demo"
n = split(v,word,":")
for(i=1; i<=n; i++)
print i, word[i]
exit
}'
$ chmod u+x split.awk
$ ./split.awk

9. Menggunakan variabel built-in NF untuk menampilkan data string.


$ cat > for_loop
BEGIN {
printf "To test for loop\n"
printf "Press CTRL + C to stop\n"
}
{
for(i=0;i<NF;i++)
{
printf "Welcome %s, %d times.\n" ,ENVIRON["USER"], i
}
}
^d
$ awk -f for_loop
To test for loop
Press CTRL + C to Stop
ketik "Welcome to Linux!" dan catat hasilnya
10. Menggunakan perintah perulangan while pada program awk.
cat > while_loop
{
no = $1
remn = 0
while ( no > 1 )
{
remn = no % 10
no /= 10
printf "%d" ,remn
}
printf "\nNext number please (CTRL+D to stop):";
}
^d
$ awk -f while_loop
5 (enter) catat hasilnya
65 (enter) catat hasilnya

11. Menampilkan informasi system menggunakan awk


$ cat > tryrmsys
{
dcmd = "rm " $1
if ( system(dcmd) != 0 )
printf "rm command not successful\n"
else
printf "rm command is successful and %s file
is removed \n", $1
}
^d
$ awk -f tryrmsys
ketik nama file yang akan dihapus misal:coba.sh
untuk stop tekan ^c

12. Menggunakan fungsi getline untuk membaca input standard (keyboard).

$ cat > getlin BEGIN {


printf "Your name please:"
getline na < "-"
printf "%s your age please:",na
getline age < "-"
print "Hello " na, ", next year you will be " age + 1
}
^d
$ awk -f getlin

E. Latihan

1. Buatlah program shell menggunakan awk jika hasil running programnya


adalah sebagai berikut.
n nfact
1 1
2 2
3 6
4 24
5 120
6 720
7 5040
8 40320
9 362880
10 3628800
2. Dengan menggunakan fungsi getline pada awk, buatlah program untuk
menampilkan informasi tanggal, bulan, waktu (jam:mnt:dtk) dan tahun
sekarang.
3. Buatlah program awk untuk mencopy file dengan ketentuan sebagai
berikut:
- Jika program dijalankan dengan perintah
$ awk –f lat3.awk
nama_file_sumber nama_file_tujuan (coba.awk latih.awk)
Hasilnya:
Coping nama_file_sumber to nama_file_tujuan
(Coping coba.awk to latih.awk)
- Jika nama file sumber tidak ada pada direktori maka ditampilkan komentar
nama_file_sumber tidak ada dan tidak dapat ditampilkan
(coba.awk tidak ada dan tidak dapat ditampilkan)
- Jika nama file sumber yang dicopy sudah pernah disalin/copy akan
ditampilkan komentar

nama_file_sumber overwrite (y/N)?


(coba.awk overwrite (y/N)?)
4. Buatlah program awk dengan nama col.awk dan file berisi data yang akan
diakses oleh program awk dengan nama data . Adapun file data isinya
adalah sebagai berikut:
1 2 3
4 5 6
7 8 9
10 11 12
program awk diatas dapat dijalankan dengan perintah-perintah dan hasil
eksekusi seperti dibawah ini
$ ./col.awk data
$ ls data.?
Hasilnya :
data.1 data.2 data.3
$ cat data.1 $ cat data.2 $ cat data.2
Hasilnya : Hasilnya : Hasilnya :
1 2 3
4 5 6
7 8 9
10 11 12

Praktikum
Perintah Sed
13

C. PROSEDUR
1. Masuk ke sistem operasi Linux.
2. Login sebagai user yang telah ditentukan.
3. Gunakan perintah sed pada pemrograman shell.
4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan
sementara.
D. PERCOBAAN
1. Menggunakan perintah script sed dari terminal.
Buat file baru dengan nama word sebagai berikut :
$ cat > word
agus
irma
afiludin
candra
^d
simpan file word ini pada direktori sbb:
/home/nama user/word
$ sed –n –f /home/nama user/word

2. Menggunakan perintah sed dari terminal dengan opsi –f dan -e.


$ cat > remind
Jan today at 4
Call DEC
Add serial line for Brad
Home at five sharp
^d
$ cat > script
s/DEC/Dept. Environ. Cons./
/Jan/s/today/tomorrow/
1i\
Werner and Raquel this weekend\
Feed polly for adam
4d
^d
$ sed –f script remind
$ sed –e /DEC/d –e s/five/four/ remind
3. Menggunakan perintah sed dari terminal dengan beberapa opsi.
$ cat > f1
.CX 3
.DS
Twas Sol and solstice
Ad and Astra
Til Hic saw Sum
In Corporate
.DE
^d
$ cat > script1
/DS/b fail
/KS/b fail
/EQ/,/EN/p
b
: fail
s/.*/No displays allowed at start/p
q
^d
$ sed –n –f script1 f1
$ sed –e s/DS/EQ/ -e s/DE/EN/ -n –f script1 f1
4. Menggunakan perintah sed untuk menampilkan bilangan random 10 digit.
$ cat > sed4.sh
head -c4 /dev/urandom | od -N4 -tu4 | sed -ne '1s/.* //p'
exit 0
$./sed4.sh
5. Menggunakan perintah sed untuk mencari data string.
$ vi sed5.s
#!/bin/bash
directory=/usr/bin/
fstring="Free Software Foundation"
for file in $( find $directory -type f -name '*' | sort )
do
strings -f $file | grep "$fstring" | sed -e
"s%$directory%%"
done
exit 0
$ ./sed5.sh
6. Perintah sed untuk menampilkan data baris.
$cat > lines
10
2
30
^d
$ sed –n –e ‘p (enter)
>g
>p’ lines (enter)

7. Perintah sed untuk mengambil data dari suatu file dan disimpan ke file lain.
$cat >script
s/CUXBASIC/3/g
s/SCMDARGS/CSHONE.2/g
s/SMETA/CSHONE.8/g
s/CSHONE/4/g
^d
$cat >doc
Chapter CUXBASIC covers the fundamental
Feature of the URC language. However two
important features - - arguments and meta-
arguments - - aren’t discussed until
Section SCMDARGS and section SMETA
^d
$ sed –f script doc

8. Sed untuk membaca semua baris pada sebuah file dan delete baris tertentu
$ vi sed8.sh
#!/bin/bash
sed -e /^s/d "$1"
exit 0
$ ./sed8.sh file1.txt

v
9. Menggunakan perintah sed untuk subtitusi pattern
$ vi sed9.sh
#!/bin/bash
ARGS=3
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
echo "Usage: `basename $0` old-pattern new-pattern
filename"
exit $E_BADARGS
fi

old_pattern=$1
new_pattern=$2

if [ -f "$3" ]
then
file_name=$3
else
echo "File \"$3\" does not exist."
exit $E_BADARGS
fi

sed -e "s/$old_pattern/$new_pattern/g" $file_name


exit 0
$ cat word
$ ./sed9.sh agus candra word
$ ./sed9.sh candra agus word
10. Menggunakan perintah sed sebagai implementasi perintah grep
$ vi sedb.sh
#!/bin/bash
E_BADARGS=65

if [ -z "$1" ]
then
echo "Usage: `basename $0` pattern"
exit $E_BADARGS
fi
echo
for file in *
do
output=$(sed -n /"$1"/p $file)
if [ ! -z "$output" ]
then
echo -n "$file: "
echo $output
fi
echo
done
echo
exit 0
$ ./sedb.sh afiludin (afiludin => isi file word prog. No.1)
$ ./sedb.sh 200 (200 => isi file sdata di praktikum 12 prog. No.1)
11. Menggunakan perintah sed untuk pembuatan kolom
$ sedc.sh
#!/bin/bash
(printf "PERMISSIONS LINKS OWNER GROUP SIZE MONTH DAY
HH:MM PROG-NAME\n" \;
ls -l | sed 1d) | column -t
exit 0
$ ./sedc.sh
Bandingkan hasilnya dengan perintah ls –l.

E. Latihan

1. Gunakan perintah sed untuk membuat program aplikasi ”Message filter”


yang berfungsi membantu penyaringan kata-kata yang tidak diinginkan
agar tidak muncul atau diganti dengan karakter lain.
Misalnya kata porno dan seks seperti contoh berikut:
Meskipun sudah ada sangsi hukumnya, orang yang sudah
kebiasaan pornoaksi ya tetap saja melakukan seks
bebas.
Hasil penyaringan:
Meskipun sudah ada sangsi hukumnya, orang yang sudah
kebiasaan #####aksi ya tetap saja melakukan ####
bebas.
2. Pada sebuah toko elektronika menjual barangnya dengan beberapa nomor
item dan harga, untuk membeli barang pembeli harus memasukan nomor
item barang dan harga barang tersebut. Selanjutnya akan muncul informasi
tentang tipe, spesifikasi, dan harga barang yang telah dipilih oleh pembeli.
Dari kasus diatas buatlah programnya dengan menggunakan perintah sed
untuk menampilkan informasi tipe, spesifikasi dan harga barang yang
terdapat pada sebuah file teks ( .txt ) berdasarkan masukan nomor item
dan harga barang.

14
Praktikum
GRAPH USER INTERFACE
ICAL (GUI)

C. PROSEDUR

1. Masuk ke sistem operasi Linux.


2. Login sebagai user yang telah ditentukan.
3. Gunakan gedit/text editor untuk editor penulisan program, perintah eog,
dan zenity pada pemrograman shell.
4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan
sementara.

D. PERCOBAAN

Percobaan 1 : Kalender Dialog


1. Membuat kalender dialog melalui baris perintah pada prompt.
$ szDate=$(zenity --calendar --text "Pick a day" --
title "Medical Leave" --day 23 --month 5 --year
2008); echo $szDate

2. Membuat kalender dialog dengan program shell.


#!/bin/bash
szDate=$(zenity --calendar --text "Pick a day" --
title "Medical Leave" --day 23 --month 5 --year
2008); echo $szDate
3. Menggunakan perintah if pada program kalender dialog.
#!/bin/bash
if zenity --calendar \
--title="Select a Date" \
--text="Click on a date to select that date." \
--day=20 --month=8 --year=2010
then echo $?
else echo "No date selected"
fi
Percobaan 2 : File Selection Dialog
1. Membuat file selection dialog melalui baris perintah pada prompt.
$ szSavePath=$(zenity --file-selection --save --
confirm-overwrite);echo $szSavePath

2. Membuat file selection dialog untuk memilih file.


#!/bin/bash
FILE=$(zenity --file-selection --confirm-

overwrite);echo $FILE

3. Membuat file selection dialog untuk memilih dan menyimpan file.


#!/bin/bash
FILE=$(zenity --file-selection –-save --confirm-
overwrite);echo $FILE
4. Membuat file selection dialog untuk memilih file dengan statement case.
#!/bin/bash
FILE=`zenity --file-selection --title="Select a File"
case $? in
0)
echo "\"$FILE\" selected.";;
1)
echo "No file selected.";;
-1)
echo "No file selected.";;
Esac
Percobaan 3 : Entry Dialog

1. Memasukan teks jawaban pada entry dialog dan menampilkan pada


terminal.

$ jawab=$(zenity --entry --text "di mana kamu?" --


entry-text "di rumah"); echo $jawab
2. Memasukan password/teks tersembunyi pada entry dialog dan
menampilkan pada terminal.
#!/bin/sh
if zenity --entry \
--title="Add an Entry" \
--text="Enter your _password:" \
--entry-text "password" \
--hide-text
then echo $?
else echo "No password entered"
fi
Percobaan 4 : Information Dialog

1. Menampilkan script zenity berupa informasi pada info dialog.

a. $ zenity --info --text "Join us at http//:www.eepis-


its.edu. Shell programming #2Telkom."

b. $ gksudo lsof | zenity --text-info --width 530

2. Memilih file dan menampilkan sebagai informasi kemudian perubahan


isinya disimpan pada file baru (tmp.txt)

#!/bin/bash
FILE=`zenity --file-selection \
--title="Select a File"`
case $? in
0)
zenity --text-info \
--title=$FILE \
--filename=$FILE \
--editable >/home/student/tmp.txt;;
1)
echo "No file selected.";;
-1)
echo "No file selected.";;
esac
Jalankan program, pilih satu file untuk ditampilkan isinya pada info dialog,
edit isi file tersebut kemudian close info dialognya. Bandingkan isi file yang
telah diedit dengan file tmp.txt.

Percobaan 5 : Error Dialog

1. Menampilkan pesan error pada proses instalasi.


$ zenity --error --text "Installation failed!"

2. Menampilkan pesan error penulisan program.


#!/bin/bash
zenity --error \
--text="bash: ./zenity3.sh: /bin/hash: bad
interpreter: No such file or directory."
Percobaan 6 : Question Dialog
1. Menampilkan pertanyaan pada proses shutdown.
$ zenity --question --text "Are you sure you want to
shutdown?"; echo $?

2. Menampilkan pertanyaan suatu proses.


#!/bin/bash
zenity --question \
--text="Are you sure you wish to proceed?"
Percobaan 7 : Warning Dialog
1. Menampilkan peringatan untuk menghentikan proses.
$ zenity --warning --text "This will kill, are you
sure?";echo $?

2. Menampilkan peringatan untuk koneksi kabel.


#!/bin/bash
zenity --warning \
--text="Disconnect the power cable to avoid
electrical shock."
Percobaan 8 : Progress Dialog
1. Menampilkan progres hasil perintah gksudo lsof pada file lsof.txt.
$ gksudo lsof | tee >(zenity --progress --pulsate)
>lsof.txt

2. Menampilkan progres update sistem log.


#!/bin/sh
(
echo "10" ; sleep 1
echo "# Updating mail logs" ; sleep 1
echo "20" ; sleep 1
echo "# Resetting cron jobs" ; sleep 1
echo "50" ; sleep 1
echo "This line will just be ignored" ; sleep 1
echo "75" ; sleep 1
echo "# Rebooting system" ; sleep 1
echo "100" ; sleep 1
) | zenity --progress \
--title="Update System Logs" \
--text="Scanning mail logs..." \
--percentage=0
if [ "$?" = -1 ] ; then
zenity --error \
--text="Update canceled."
Fi

Percobaan 9 : Notification Icon Dialog


1. Menampilkan file gambar sebagai notification icon.
a. dari prompt
$ zenity --notification --window-icon="bich6.gif"
--text "Please update your system."

b. dari program .sh


#!/bin/bash
zenity --notification --window-icon="bich6.gif" --
text "Please update your system."

2. Menampilkan info sebagai notification icon.


#!/bin/bash
zenity --notification\
--window-icon="info" \
--text "There are system updates necessary!"
Percobaan 10 : Scale dan List Dialog
1. Menampilkan dialog untuk pengaturan nilai skala.
#!/bin/bash
ans=$(zenity --scale --text "pick a number" --min-
value=2 --max-value=100 --value=2 --step 2);echo $ans

2. Menampilkan list dialog dalam bentuk radio (radiolist).


#!/bin/bash
ans=$(zenity --list --text "Is linux.byexamples.com
helpful?" --radiolist --column "Pick" --column
"Opinion" TRUE Amazing FALSE Average FALSE "Difficult
to follow" FALSE "Not helpful"); echo $ans
3. Menampilkan list dialog dalam bentuk check list.
#!/bin/sh
ans=$(zenity --list --text "How linux.byexamples
can be improved?" --checklist --column "Pick" --
column "options" TRUE "More pictures" TRUE "More
complete post" FALSE "Includes Installation
guidelines" FALSE "Create a forum for question
queries" --separator=":"); echo $ans
4. Menampilkan list dialog dalam bentuk daftar tabel (kolom).
#!/bin/sh
zenity --list \
--title="Choose the Bugs You Wish to View" \
--column="Bug Number" --column="Severity"
--column="Description" \
992383 Normal "GtkTreeView crashes on multiple
selections" \
293823 High "GNOME Dictionary does not handle
proxy" \
393823 Critical "Menu editing does not work in
GNOME 2.0"
E. Latihan

1. Buatlah GUI kotak dialog dengan program shell untuk recovery file dengan
ketentuan sebagai berikut:

step1: ketika program dijalankan akan muncul kotak dialog info yang
memberitahukan proses recovery file dengan cara harus memilih tanggal,
bulan dan tahun recovery.
Step2: jika waktu pada step1 yang dipilih tidak sesuai akan muncul pesan
error.
Step3: jika pemilihan pada step1 benar proses recovery file dilaksanakan
hingga recovery file lengkap.
2. Buatlah program untuk mencari file gambar jpg atau png dan hasilnya
ditampilkan pada list dialog.
3. Dari entry dialog terdapat permintaan untuk memasukan nama, jika diisikan
nama maka muncul info dialog yang manyapa pemilik nama tersebut
dengan teks hello yang dikuti nama yang dimasukan.
4. Pada kalender dialog terdapat teks pertanyaan “Kapan anda ulang tahun?”,
apabila user manjawab dengan memilih tanggal yang tepat akan muncul
progres dialog kemudian info dialog ucapan “selamat ulang tahun” dan
gambar sebagai icon pesta ulang tahun.
Praktikum
APLIKASI
15 PEMROGRAMAN SHELL

C. PROSEDUR
1. Masuk ke sistem operasi Linux.
2. Login sebagai user yang telah ditentukan.
3. Buatlah program seperti pada percobaan dan program latihan.
4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan
sementara.

D. PERCOBAAN
1. Pemrograman shell untuk aplikasi schedule reminder :
#!/bin/bash
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
2. Perhitungan Nilai Rangkaian Resistor Seri Atau Pararel.
#!/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 di
rangkai 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[34m RANGKAIAN 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 di
rangkai 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
3. Program aplikasi game tebak angka.
#!/bin/bash
nama=`zenity –title “WELCOME TO THE NUMBER’S GAME” –width 400 –
entry –text “RULES OF GAME:
1. Number between 1 to 10
2. Game will do until 5 times
Enter your name:”`
echo $nama
lagi () {
jwb=`zenity --title "$nama's Game" --entry --text "Play
again:y/t?" --height 200`
case $jwb in
y|Y|ya|YA|Ya)
rand=$[($RANDOM %10) +1]
let a=1;
while let "$a <= 5"
do
angka=`zenity --title "$nama's Game" --entry --text "Enter a
number:"`;
echo $angka;
let a=$a+1;
if [ $angka -eq $rani ]; then
zenity --title "Haha...$name winner" --warning --text
"$nama...!!You Win" --height 200 --width 250
lagi;
else
kalah=`zenity --title "$nama Try again" --warning --text
"$nama...!!You are not lucky" --height 200 --width 300`;
echo $kalah;
fi
done
Zenity --title "Hehe..$name loser" --warning --text
"Sorry...$nama...You lose" --height 200 --width 300 lagi;
;;
t|T|tidak|Tidak|TIDAK)
zenity --title "Bye-bye $nama" --warning --text "Ok..thank you
See you..." --height 200 --width 250
exit 0
;;
esac
}
maen() {
rand=$[($RANDOM %10) +1]
let a=1;
while let "$a <= 5"
do
angka=`zenity --title "$nama's Game" --entry --text "Enter a
number:"`;
echo $angka;
let a=$a+1;
if [ $angka -eq $rani ]; then
zenity --title "Haha...$nama winner" --warning --text
"$nama...!!You Win" --height 200 --width 250
lagi;
else
kalah=`zenity --title "$nama Try again" --warning --text
"$nama...!!You are not lucky" --height 200 --width 300`;
echo $kalah;
fi
done
}
maen;
zenity --title "Hehe..$nama loser" --warning --text
"Sorry...$nama...You lose" --height 200 --width 300
lagi;
4. Program aplikasi perubahan tampilan warna secara acak
#!/bin/bash
back(){
init=40
while true
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. Membuat rekapitulasi tranksaksi
#!/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
E. 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.
2. Buatlah program aplikasi database sederhana tentang biodata pasien baru
maupun lama pada sebuah rumah sakit yang berisi data sebagai berikut :
- ID, Nama, Umur, Alamat, Keadaan dan Diagnosa pasien.
Gunakan user interface dan dialog untuk Entry data pasien, menyimpan
data, dan tampilan daftar pasien.