PRAKTIKUM 6A & 6B
PRAKTIKUM 6A : PEMOGRAMAN SHELL BAGIAN I
Pokok Bahasan :
- Pemrograman Shell
Tujuan Belajar :
- Mengetahui dan memahami pemrograman shell pada sistem operasi Linux.
- Mengetahui dan memahami cara penulisan shell script, variabel dan yang lainnya.
- Menggunakan perintah-perintah pemrograman shell.
- Menerapkan pemrograman shell dalam program
Dasar Teori:
1. INSTRUKSI TEST
Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi. Ekspresi terdiri dari factori dan operator yang dipisahkan oleh spasi. Hasil test akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasilnya adalah tidak sama dengan nol.
Tanda [ sebenarnya adalah nama lain dari test,bedanya [ akan mencari kurung penutup ] pada akhir ekspresi yang harus dipisahkan oleh spasi.
2. LOGICAL && DAN || (SHELL LEVEL)
Notasi && dan || digunakan untuk menggabungkan instruksi shell sebagai alternative dari if then else. Notasi && dan || sering ditemukan pada shell script system administrator untuk menjalankan routine dari system operasi.
- instruksi1 && instruksi2
shell akan mengeksekusi instruksi1, dan bila exit status instruksi1 adalah false, maka hasil dari AND tersebut sudah pasti sama dengan FALSE, sehingga instruksi2 tidak mempunyai pengaruh lagi. Oleh karna itu instruksi2 tidak dijalankan. Sebaliknya bila hasil instruksi1 adalah true/0, maka instruksi2 dijalankan.
- instruksi1 || instruksi2
shell akan mengeksekusi instruksi1, dan bila exit status adalah TRUE(0), hasil dari operasi OR tersebut sudah pasti menghasilkan TRUE, terlepas dari hasil eksekusi instruksi2. Oleh karena itu instruksi2 tidak perlu dijalankan. Bila hasil instruksi1 adalah FALSE, maka instruksi2 akan dijalankan.
3. OPERATOR BILANGAN BULAT UNTUK TEST
Untuk membandingkan 2 buah bilangan, test memerlukan operator yang berbeda dengan string.
4. OPERATOR LOGICAL (TEST LEVEL)
Logical operator terdiri dari AND(-a), OR(-o), dan NOT(!). Operator ini menggabungkan hasil ekspresi sebagai berikut :
5. KONSTRUKSI IF THEN ELSE IF
Bila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
6. HITUNGAN ARITMATIKA
Untuk melakukan perhitungan aritmatik, shell tidak memiliki kemampuan built-in, tetapi meminta bantuan program lain yaitu `expr`. Program expr berfungsi untuk mengevaluasi suatu expresi baik itu perbandingan string atau operasi aritmatik sederhana. Operator aritmatik yang disediakan expr antara lain:
Selain digunakan untuk perhitungan aritmatik, perintah `expr` juga cukup handal untuk melakukan manipulasi string, untuk lebih jelas silahkan lihat halaman manual dari expr dengan mengetikkan `man expr`.
7. INSTRUKSI EXIT
Program dapat dihentikan (terminated/selesai) dengan intruksi exit. Sebagai nilai default program tersebut akan memberikan status exit 0.
8. KONSTRUKSI CASE
Case digunakan untuk menyerdehanakan pemakaian if yang berantai, sehingga dengan case, kondisi dapat dikelompokkan secara logis dengan lebih jelas dan mudah untuk ditulis.
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.
9. KONSTRUKSI FOR
For digunakan untuk perulangan dengan menggunakan variable yang ada pada setiap perulangan akan diganti dengan nilai yang berada pada daftar (list).
10. KONSTRUKSI WHILE
Pernyataan perulangan ini umumnya digunakan untuk melakukan perulangan dengan kondisi tertentu, di mana perulangan akan terus dilakukan dalam blok while selama ekspresi yang menjadi syarat masih dipenuhi (bernilai benar). Untuk ilustrasi, dapat dilihat pada gambar Sedangkan mengenai bentuk dari pernyataan ini adalah:
While digunakan untuk perulangan instruksi, yang umumnya dibatasi dengan sustu kondisi. Selama kondisi tersebut true, maka pengulangan akan terus dilakukan. Loop akan berhenti, bila kondisi false, atau program keluar dari blok while melalui exit atau break.
11. INSTRUKSI DUMMY
Instruksi dummy adalah instruksi yang tidak melakukan apa-apa, namun isntruksi ini memberikan status exit 0 (TRUE). Oleh karna itu, instruksi dummy dapat digunakan sebagai kondisi forever pada loop (misalnya while).
Symbol instruksi dummy adalah => :
12. FUNGSI
Hampir sama dengan bahasa pemrograman tingkat tinggi, pada shell script juga dikenal istilah fungsi. Dimana dengan adanya fungsi kita dapat membagi kode kita ke dalam sub-sub yang lebih kecil. Hal ini sangat berguna jika kita membangun sebuah program shell script yang cukup kompleks. 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. Membuat fungsi diawali dengan nama fungsi, parameter, kemudian blok program yang dinyatakan dalam {…….}. Contoh :
Variabel dapat di definisikan dalam fungsi sebagai variabel local atau global. Hal yang perlu diperhatikan, nama variable yang digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang sama di luar fungssi, sehingga tidak terjadi isi variable berubah.
Tugas Pendahuluan:
Sebagai tugas pendahuluan, bacalah dasar teori diatas kemudian buatlah program Shell untuk Latihan 1 sampai dengan 5.
Percobaan 1: Membuat shell script
1. Buatlah file prog01.sh dengan editor vi
#!/bin/sh
# Program shell
#
var1=x
var2=8
Analisa:
Perintah vi prog01.sh untuk membuat file prog01.sh.
2. Untuk menjalankan shell, gunakan notasi TITIK di depan nama program
Analisa:
Untuk menjalankan shell, menggunakan notasi titik(.) spasi namafile.sh
3. Untuk menjalankan shell, dapat juga dengan membuat executable file dandieksekusi relatif dari current directory
$ ./prog01.sh
Analisa:
Perintah chmod +x prog01.sh untuk membuat file menjadi executable. Perintah ./prog01.sh untuk menjalankan file yang telah di executable
Percobaan 2 : Variable
1. Contoh menggunakan variable pada shell interaktif
$ echo $VPT
Analisa:
Perintah VPT=poltek untuk menggunakan variable pada shell interaktif. Pemberian nilai variable tidak boleh dipisahkan dengan spasi, karena shell akan menganggap pemisahan tersebut sebagai parameter.
2. Pemisahan 2 kata dengan spasi menandakan eksekusi 2 buah instruksi. Karakter $ harus ada pada awal nama variable untuk melihat isi variable tersebut, jika tidak, maka echo akan mengambil parameter tersebut sebagai string.
$ VPT2=”poltek negeri Jakarta”
$ echo VPT2
$ echo $VPT2
Analisa
Saat VPT2=Poltek Negeri Jakarta terdapat pesan error karena shell mendeteksi spasi yang menandakan terbaca 2 instruksi. Jika menggunakan string lebih dari satu kata, maka string harus berada dalam tanda kutip atau apostrof. Karakter $ harus ada pada awal nama variable untuk melihat isi variable tersebut, jika tidak, maka echo akan mengambil parameter tersebut sebagai string.
3. Menggabungkan dua variable atau lebih
$ V2=’:’
$ V3=jakarta
$ V4=$V1$V2$V3
$ echo $V4
Analisa:
Menggabungkan dua variable atau lebih dengan cara membuat variable ke 4 yang isinya adalah gabungan dari variable V1,V2,V3.
4. Menggabungkan isi variable dengan string yang lain. Jika digabungkan dengan nama variable yang belum didefinisikan (kosong) maka instruksi echo menghasilkan string kosong. Untuk menghindari kekeliruan, nama variable perlu diproteksi dengan { } dan kemudian isi variable tersebut digabung dengan string.
$ echo $V3ITS
$ echo ${V3}ITS
Analisa:
Perintah echo $V3 untuk membaca isi file V3. Jika kita ingin menggabungkan isi variable dengan string lain dengan menggunakan perintah echo $V3ITSI menghasilkan string kosong karena variable belum didefinisikan. Untuk menghindari kekeliruan, nama variable perlu diproteksi dengan { } dan kemudian isi variable tersebut digabung dengan string.
5. Variabel dapat berisi instruksi, yang kemudian bila dijadikan input untuk shell, instruksi tersebut akan dieksekusi
$ $CMD
$ CMD=”ls –l”
$ $CMD
Analisa:
Variable dapat berisi instruksi, yang kemudian bila dijadikan input oleh shell instruksi tersebut akan di eksekusi.
6. Modifikasi file prog01.sh berikut
#!/bin/sh
V1=poltek
V2=’:’
V3=jakarta
echo “Pemrograman shell”
echo $V1$V2$V3
V3=ITS
echo $V1$V2 di $V3
Analisa:
Perintah vi prog01.sh untuk membuat file prog01.sh. Di dalam prog01.sh tersebut terdapat variable yang nantinya akan di tampilkan dengan perintah echo. Disini variable V3 terdapat 2 string, tapi yang ditampilkan perintah echo yang terakhir adalah Variable V3 yang terakhir. Berarti disini, jika terdapat variable yang sama, echo akan membaca variable terakhir.
7. Cara sederhana mengeksekusi shell adalah dengan menggunakan notasi titik di depan nama shell script tersebut. Bila direktori actual tidak terdaftar dalam PATH, maka command tersebut tidak dapat ditemukan. Bila script belum executable, script tidak dapat dieksekusi.
$ prog01.sh (Terdapat pesan error)
$ ./prog01.sh (Terdapat pesan error)
$ chmod +x prog01.sh
$ ./prog01.sh
Analisa:
Perintah diatas untuk mengeksekusi shell secara sederhana dengan menggunakan notasi TITIK di depan nama shell script. Karena script sudah di executable saat di nomor 1, maka script bisa dieksekusi.
Percobaan 3 : Membaca keyboard
1. Menggunakan instruksi read
amir
$ echo $nama
Analisa:
Instruksi read nama untuk menulis string yang nantinya akan diinputkan oleh keyboard pada variable nama. Kemudian untuk menampilkan variable nama menggunakan perintah echo
2. Membaca nama dan alamat dari keyboard
#!/bin/sh
# prog02.sh
# membaca nama dan alamat
echo “Nama Anda : “
read nama
echo “Alamat : “
read alamat
echo “Kota : “
read kota
echo
echo “Hasil adalah : $nama, $alamat di $kota”
Analisa:
Di dalam script prog02.sh dimasukkan perintah read untuk menulis string yang nantinya akan diinputkan oleh keyboard.
3. Eksekusi program prog02.sh
Analisa:
Hasil yang di dapat adalah variable yang ada didalam perintah echo.
4. Instruksi echo secara otomatis memberikan baris baru, maka untuk menghindari hal tersebut disediakan opsi – n, yang menyatakan kepada echo untuk menghilangkan baris baru. Modifikasi program prog02.sh
#!/bin/sh
# prog02.sh
# membaca nama dan alamat
echo –n “Nama Anda : “
read nama
echo –n “Alamat : “
read alamat
echo –n “Kota : “
read kota
echo
echo “Hasil adalah : $nama, $alamat di $kota”
Analisa:
Opsi – n agar input keyboard tidak muncul dibaris baru, atau kata lain masih dibaris yang sama.
5. Eksekusi program prog02.sh
Analisa:
Hasil yang didapat input keyboard berada di satu baris yang sama.
6. Variabel kosong adalah variable yang tidak mempunyai nilai. Variabel ini didapat atas assignment atau membaca dari keyboard atau variable yang belum didefinisikan
<CR>
$ echo $nama
$ A=
$ B=””
$ C=$A$B
$ echo $C
Analisa:
Perintah diatas berisi variable kosong atau tidak mempunyai nilai. Variable bisa kosong karena belum didefinisikan, jadi yang terbaca oleh echo adalah kosong
7. Variabel dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi. Pada contoh dibawah , instruksi pwd dieksekusi lebih dahulu dengan sepasang Back Quate (tanda kutip terbalik). Hasil dari eksekusi tersebut akan masuk sebagai nilai variable DIR
$ DIR=`pwd`
$ echo $DIR
Analisa:
Variabel dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi. Perintah DIR=`pwd` berarti hasil dari pwd masuk sebagai nilai variable DIR.
8. Buatlah shell script prog03.sh
#!/bin/sh
# prog03.sh
#
NAMA=`whoami`
echo Nama Pengguna Aktif adalah $NAMA
tanggal=`date | cut –c1-10`
echo Hari ini tanggal $tanggal
Analisa:
Membuat script prog03.sh
9. Eksekusi prog03.sh
Analisa:
Output perintah dari whoami akan disubtitusikan kedalam variable nama. Output dari data | cut -c -10 akan disubtitusikan kedalam variable tanggal. Hasilnya apa yang ada didalam perintah echo
Percobaan 4 : Parameter
1. Membuat shell script prog04.sh
#!/bin/sh
# prog04.sh versi 1
# Parameter passing
#
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
Analisa:
Membuat script prog04.sh
2. Eksekusi prog04.sh tanpa parameter, dengan 2 parameter, dengan 4 parameter
Analisa:
Saat mengeksekusi tanpa parameter yang keluar adalah nama program. Saat menginputkan 2 parameter akan mengidentifikasikan sebagai variable $1 dan $2. Saat menginput 4 parameter akan mengidentifikasikan sebagai variable $1,$2,$3, dan $4. Perintah echo hanya sampe variable $3, jadi hasil yang keluar sampai variable $3.
3. Membuat shell script prog04.sh versi 2 dengan memberikan jumlah parameter
#!/bin/sh
# prog04.sh versi 2
# Parameter passing
#
echo “Jumlah parameter yang diberikan adalah $#”
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
Analisa
Membuat shell script prog04.sh versi 2. Jumlah parameter dilambangkan dengan $#
4. Eksekusi prog04.sh tanpa parameter dan dengan 4 parameter
Analisa:
Saat mengeksekusi tanpa parameter, outputnya adalah “jumlah parameter 0” karena tidak dimasukannya parameter. Pada saat mengeksekusi 4 parameter, outputnya adalah “jumlah parameter 4” karena parameter yang dimasukkan adalah 4.
5. Membuat shell script prog04.sh versi 3 dengan menambahkan total parameter dan nomor proses id (PID)
#!/bin/sh
# prog04.sh versi 3
# Parameter passing
#
echo “Jumlah parameter yang diberikan adalah $#”
echo “Nama program adalah $0”
echo “Parameter 1 adalah $1”
echo “Parameter 2 adalah $2”
echo “Parameter 3 adalah $3”
echo “Total parameter adalah $*”
echo “PID proses shell ini adalah $$”
Analisa:
Membuat shell script prog04.sh versi 3. Untuk menampilkan seluruh string yang menjadi parameter dilambangkan dengan “ $* ” dan Untuk menampilkan PID dari script yang dijalankan. PID akan terus berubah (umumnya) menaik, setiap kali proses berjalan.
6. Eksekusi prog04.sh dengan 4 parameter
Analisa:
Perintah total parameter menampilkan seluruh string yang menjadi parameter. Kemudian proses PID dari script ditampilkan yaitu 1738
Percobaan 5 : Status Exit
1. String tidak diketemukan, maka status exit adalah 1
$ echo $?
Analisa:
Perintah grep xyz /etc/passwd untuk mencari file xyz. Karena file tidak ditemukan maka status exit adalah 1
2. String diketemukan, maka status exit adalah 0
$ echo $?
Analisa:
Perintah grep adhila /etc/passwd untuk mencari file adhila. Karena file ditemukan maka status exit adalah 0
Percobaan 6 : Konstruksi if
1. Instruksi dengan exit status 0
$ who | grep <user>
$ echo $?
Analisa:
Perintah who mengetahui user aktif. Perintah who | grep <user> untuk mencari adhila didalam output dari perintah who. Status exit 0 karena file ditemukan.
2. If membandingkan exit status dengan 0, bila sama, maka blok program masuk ke dalam blok then-fi
> then
> echo “Pemakai tersebut sedang aktif”
> fi
Analisa:
Untuk membandingkan status exit dengan nol dapat digunakan konstruksi if, jika kondisi pada if terpenuhi, instruksi di dalam then dan fi akan dijalankan.
3. Nomor (1) dan (2) diatas dapat disederhanakan dengan
> then
> echo okay
> fi
Analisa:
Perintah tersebut adalah gabungan dari nomor 1 dan 2
Percobaan 7 : Konstruksi if then else
1. Membuat shell script prog05.sh
#!/bin/sh
# prog05.sh
# Program akan memberikankonfirmasi apakah nama
# user sedang aktif atau tidak
#
echo –n “Berikan nama pemakai : ”
read nama
if who | grep $nama > /dev/null
then
echo “$nama sedang aktif”
else
echo “$nama tidak aktif”
fi
Analisa:
Membuat script prog05.sh. If berisi kondisi yang diinginkan untuk mencari nilai. Jika kondisi di dalam if terpenuhi,then akan mengeksekusi instruksi yang ada didalamnya, jika kondisi tidak terpenuhi,instruksi di dalam else yang akan dieksekusi. Jika nilai sudah ditemukan, if akanditutup oleh fi.
2. Jalankan prog05.sh, masukkan nama pemakai yang aktif yang tampil pada instruksi who dan coba juga untuk nama pemakai yang tidak aktif
$ . prog05.sh [nama=<user>]
$ . prog05.sh [nama=studentOS]
Analisa:
Perintah who untuk mengecek siapa user yang aktif. Kemudian jika user aktif, perintah then akan mengeksekusi instruksi. Jika user tidak aktif, perintah else yang akan di eksekusi
PRAKTIKUM 6B : PEMOGRAMAN SHELL BAGIAN II
Percobaan 8 : Instruksi Test
1. Menggunakan instruksi test, perhatikan spasi antara
$ test $NAMA = adhila
$ echo $?
$ test $NAMA = doraemon
$ echo $?
Analisa:
Perintah tersebut untuk instruksi test yang digunakan untuk memeriksa kondisi dari sebuah ekspresi. Saat memeriksa hasil “echo” yang keluar adalah nilai status exit. Jika 0 ekspresi sesuai, jika 1 tidak sesuai dengan ekspresi.
2. Aplikasi test dengan konstruksi if
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if test “$NAMA” = adhila
then
echo “Selamat Datang $NAMA”
else
echo “Anda bukan adhila, sorry!”
fi
Analisa :
Perintah tersebut untuk aplikasi test dengan konstruksi if. Jika status exit = 0 maka program if akan berjalan, jika status exit = 1 maka program else yang akan berjalan.
3. Jalankan program prog06.sh dengan memasukkan NAMA = amir dan NAMA = <CR> perhatikan hasil tampilannya
$ . prog06.sh [NAMA = <CR>] (Terdapat pesan error)
Analisa :
Perintah tersebut untuk menjalankan program prog06.sh. Jika dimasukkan nama adhila perintah if akan berjalan dan akan muncul “Selamat Datang adhila”, tetapi jika memasukkan nama <CR> maka ditampilkan pesan error karena tidak ada di direktori.
4. Modifikasi prog06.sh dengan menggunakan notasi untuk test
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if [ “$NAMA” = adhila ]
then
echo “Selamat Datang $NAMA”
else
echo “Anda bukan adhila, sorry!”
fi
Analisa :
Perintah “[ ]” notasi untuk test. Fungsinya untuk memudahkan pembacaan (readability). Notasi “[ ]” adalah nama lain dari test, bedanya kurung pembuka “[“ akan mencari kurung penutup “]”pada akhir eskpresi yang harus dipisahkan oleh spasi
5. Jalankan program prog06.sh dengan memasukkan NAMA = adhila
Analisa:
Perintah tersebut untuk menajalan perintah dari prog06.sh yang di dalamnya terdapat notasi “[ ]” yang sama dengan fungsi test.
Percobaan 9 : Notasi && dan ||
1. Bila file prog01.sh ada (TRUE), maka jalankan program berikutnya. File prog01.sh ada, karena itu exit status adalah TRUE, hasil operasi AND masih tergantung pada hasil eksekusi instruksi ke 2, dan dengan demikian instruksi echo akan dijalankan.
Analisa :
Notasi “&&” dan ||. Pada notasi “&&” untuk menggabungkan instruksi shell sebagai alternatif untuk if then else. Perintah [ -f ] untuk mencari file biasa. Cara kerjanya adalah shell mengeksekusi [ -f prog01.sh ] bila hasil adalah TRUE(0) maka instruksi “echo” akan dijalankan.
2. File prog99.sh tidak ada, karena itu exit status adalah FALSE dan instruksi echo tidak dijalankan
Analisa :
Perintah tersebut cara kerjanya adalah shell mengeksekusi [ -f prog99.sh ] bila hasil adalah FALSE(1) maka instruksi “echo” tidak dijalankan.
3. Bila prog01.sh ada maka jalankan shell script tersebut
$ [ -f prog01.sh ] && . prog01.sh
Analisa :
Perintah tersebut cara kerjanya adalah shell mengeksekusi [ -f prog01.sh ] bila hasil adalah TRUE(0) maka instruksi “. Prog01.sh” akan dijalankan dan output yang dihasilkan adalah program prog01.sh.
4. Bila prog01.sh ada maka jalankan program berikutnya. File prog01.sh memang ada, karena itu exit status adalah TRUE, dan karena sudah TRUE maka instruksi echo tidak lagi dijalankan
$ [ -f prog01.sh ] || echo “Dieksekusi tidak ?”
Analisa :
Notasi “&&” dan || untuk menggabungkan instruksi shell sebagai alternatif untuk if then else. Pada notasi “||” cara kerjanya adalah shell akan mengeksekusi [ -f prog01.sh ] bila hasil adalah TRUE(0) maka instruksi “echo” tidak perlu dijalankan.
5. File prog99.sh tidak ada, karena itu exit status adalah FALSE, hasil m tergantung atas exit status instruksi ke dua, karena itu instruksi echo dijalankan
$ [ -f prog99.sh ] || echo “Dieksekusi tidak ?”
Analisa :
Perintah tersebut cara kerjanya adalah shell akan mengeksekusi [ -f prog99.sh ] bila hasil adalah FALSE(1) maka instruksi “echo” akan dijalankan.
6. File prog99.sh tidak ada, maka tampilkan pesan error
$ [ -f prog99.sh ] || echo “Sorry, prog99.sh tidak ada”
Analisa :
File prog99.sh tidak ada maka instruksi “echo” akan dijalankan.
Percobaan 10 : Operator bilangan bulat untuk test
1. Menggunakan operator dengan notasi test
Analisa :
Perintah tersebut untuk menggunakan operator dengan notasi test. Notasi “-eq 5” adalah bilangan sama dengan 5. Saat memeriksa “echo” hasil yang keluar adalah nilai status exit yaitu 0 karena ekspresi sesuai karena i berisi nilai 5.
2. Menggunakan operator dengan notasi [ ] (penganti notasi test)
$ echo $?
Analisa :
Perintah tersebut menggunakan notasi “[ ]” yang dimana adalah nama lain dari test. Status exit tetap bernilai 0 karena i berisi nilai 5
Percobaan 11 : Operator Logical dan konstruksi elif
1. Buatlah file prog07.sh
Analisa :
Perintah tersebut untuk membuat file prog07.sh. Notasi “-ge” pada if berfungsi sebagai lebih besar atau sama dengan(≥). Notasi “-a” pada if berfungsi sebagai logical operator AND. Notasi “-le” pada if berfungsi sebagai lebih kecil atau sama dengan(≤). Notasi “-gt” pada elif berfungsi untuk lebih besar (>).
Jadi, Perintah if [ jika nilai ≥ 0 AND nilai ≤ 10.000] biaya = 10. Perintah elif [ jika nilai > 10.000 AND nilai ≤ 25.000] biaya = 25. Perintah else jika nilai di luar if dan elif atau > 25.000.
2. Jalankan file prog07.sh dan masukkan untuk INCOME=5000, 20000, 28000
$ . prog07.sh [INCOME=20000]
$ . prog07.sh [INCOME=28000]
Analisa :
Saat income dimasukkan 5.000, biaya yang keluar adalah 10 yang dimana perintah if dijalankan. Saat income dimasukkan 20.000, biaya yang keluar adalah 25 yang dimana perintah elif dijalankan. Saat income dimasukkan 28.000, biaya yang keluar adalah 35yang dimana perintah else dijalankan.
Percobaan 12 : Hitungan aritmetika
1. Menggunakan utilitas expr
$ A=5
$ expr $A + 2
$ expr $A – 4
$ expr $A * 2 (Ada pesan error)
$ expr $A \* 2
$ expr $A / 6 +10
$ expr 17 % 5
Analisa :
Tiper variable shell hanya menggunakan string, Akibatnya variable tidak dapat membuat perhitungan matematika. Oleh karena itu UNIX menyediakan perintah utilitas expr untuk melakukan perhitungan aritmetika sederhana.
2. Substitusi isi variable dengan hasil utilitas expr
$ B=`expr $A + 1`
$ echo $B
Analisa :
Unuk dapat memasukkan nilai variable A ke dalam operasi didalam variable B maka digunakan tanda petik terbalik.
Percobaan 13 : Instruksi exit
1. Buat shell script prog08.sh
#!/bin/sh
if [ -f prog01.sh ]
then
exit 3
else
exit –1
fi
Analisa :
Perintah tersebut untuk membuat file prog08.sh. Dimana, saat program prog01.sh dijalankan maka terminal akan keluar.
2. Jalankan script prog08.sh dan periksa status exit
$ echo $?
Analisa :
Saat dimasukkan perintah “ . prog08.sh” terminal otomatis keluar. Saat memeriksa status error bernilai 0 dimana program dihentikan/selesai.
Percobaan 14 : Konstruksi case – esac
1. Buatlah file prog09.sh dengan editor vi
Analisa :
Perintah tersebut adalah perintah case yang digunakan untuk menyederhanakan pemakaian if yang berantai, sehingga dengan case, kondisi dapat dikelompokkan secara logis dan lebih jelas dan mudah untuk ditulis.
Case diakhiri dengan esac dan pda setiap kelompok instruksi diakhiri dengan ;;. Pada akhir pilihan yaitu *) yang berarti adalah “default”, bila kondisi tidak memenuhi pola sebelumnya.
2. Jalankan program prog09.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog09.sh
Analisa :
Menampilkan angka yang di inputkan dari 1 – 3. Diluar angka tersebut akan muncul pesan “Salah pilih” dan ditutup oleh esac.
3. Buatlah file prog10.sh yang merupakan bentuk lain dari case
Analisa:
Perintah tersebut membuat untuk membuat file . prog10.sh yang isinya merupakan bentuk lain dari case. Pada program ini user diminta memasukkan pilihan yang mewakili ya atau tidak. Untuk variasi jawaban ya dan tidak dipisahkan oleh notasi “|”
4. Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh
Analisa :
Saat memasukkan variasi jawaban akan menghasilkan seperti gambar.
5. Modifikasi file prog10.sh yang merupakan bentuk lain dari case
Analisa:
Perintah diatas bentuk lain dari case yang memodifiaksi file prog10.sh. Pada modifikasi, jika y dapat ditulis huruf kecil atau besar, kemudian untuk “ya” huruf y bisa besar/kecil begitupula dengan a. Sama halnya dengan ya tidak juga demikian dan akan dieksekusi pada berikutnya.
6. Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh
Analisa :
Hasil yang didapat sama seperti no 4.
Percobaan 15 : Konstruksi for-do-done
1. Buatlah file prog11.sh
Analisa :
Perintah tersebut untuk konstruksi for yang digunakan untuk pengulangan dengan menggunakan var yang pada setiap pengulangan akan diganti dengan nilai yang berada pada daftar(list)
2. Jalankan program prog11.sh
$ . prog11.sh
Analisa :
Output yang dihasilkan adalah nilai yang berada pada daftar(list).
3. Buatlah file prog12.sh yang berisi konstruksi for dan wildcard, program ini akan menampilkan nama file yang berada di current direktori
Analisa :
Perintah tersebut untuk membuat file prog12.sh yang berisi konstruksi for dan wildcard, program ini akan menampilkan nama file yang berada di current direktori
4. Jalankan program prog12.sh
$ . prog12.sh
Analisa :
Output yang didapat adalah akan menampilkan nama file yang berada di current direktori.
5. Modifikasi file prog12.sh, program ini akan menampilkan long list dari file yang mempunyai ekstensi lst
Analisa :
File prog12.sh yang di modifikasi akan menampilkan long list dari file yang mempunyai ekstensi lst
6. Jalankan program prog12.sh
$ . prog12.sh
Analisa :
Output yang didapatkan adalah tidak ditemukan file/direktori dengan ekstensi .lst pada current directory ini sehingga ditampilkan pesan error
Percobaan 16 : Konstruksi while-do-done
1. Buatlah file prog13.sh
Analisa:
Perintah tersebut untu konstruksi while yang digunakan untuk pengulangan instruksi, yang umumnya dibatasi dengan suatu kondisi. Selama kondisi tersebut TRUE, maka pengulangan terus dilakukan. Loop akan berhenti, bila kondisi FALSE, atau program keluar dari blok while melalui exit atau break. Notasi “-ne” didalam while perintah untu bilangan tidak sama dengan(≠). Notasi “-eq” didalam if untuk bilangan sama dengan(=).
2. Jalankan program prog13.sh
$ . prog13.sh
Analisa :
Saat dimasukkan pilihan nomor 1 – 3 maka outputnya melakukan pengulangan instruksi selama kondisi tersebut TRUE. Jika FALSE, loop akan berhenti.
Percobaan 17 : Instruksi dummy
1. Modifikasi file prog13.sh
Analisa:
Perintah diatas adalah modifikasi file prog13.sh dimana instruksi dummy adalah instruksi yang tidak melakukan apa – apa, namun instruksi ini memberikan status exit 0 (TRUE). Oleh karena itu, instruksi dummy dapat digunakan sebagai kondisi forever pada loop (misalnya while).
2. Jalankan program prog13.sh
$ . prog13.sh
Analisa :
Output yang didapatkan sama seperti percobaan 16 nomor 2.
3. Buatlah file prog14.sh yang berisi instruksi dummy untuk konstruksi if
Analisa:
Perintah tersebut membuat file prog14.sh yang berisi instruksi dummy untuk konstruksi if. Notasi “-gt” didalam if untuk perintah lebih besar (>). Yang dimana jika [ nilai A > 100] akan menjalankan perintah if yaitu kembali ke prompt. Jika dibawah 100 akan menjalankan program else yaitu memunculkan kata “OK !”
4. Jalankan program prog14.sh beberapa kali dengan input yang berbeda
$ . prog14.sh
Analisa :
Saat memasukkan nilai 200 output adalah prompt, yang dimana program if yang berjalan. Ketika memasukkan nilai 50 output adalah pesan “OK !”, yang dimana program else berjalan.
Percobaan 18 : Fungsi
1. Buatlah file fungsi.sh
Analisa:
Perintah tersebut untuk membuat file fungsi.sh yang program 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.
2. Jalankan program fungsi.sh
$ . fungsi.sh
Analisa :
Output yang didapat adalah mencetak fungsi f1, kemudian di return kembali sehingga mencetak lagi fungsi 1, dan status exitnya adalah 1 karena bernilai false
3. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh
Analisa:
Perintah tersebut untuk memodifikasi file fungsi.sh dengan menggunakan variable pada fungsi.
4. Jalankan program fungsi.sh
$ . fungsi.sh
Analisa :
Output yang didapatkan adalah sama seperti nomor 2, hanya saja penambahan variable Honor yang diberi nilai 10.000 dan nilai balik yang diambil dari status exit.
5. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh
Analisa:
Pada perintah memodifikasikan file fungsi.sh variable honor dijadikan variable local. Maksudnya hanya dapat dibaca didalam fungsi F1.
6. Jalankan program fungsi.sh
$ . fungsi.sh
Analisa :
Output yang didapat seperti nomor 4
LATIHAN
1. Buatlah program salin.sh yang menyalin file (copy ) sebagai berikut :
salin.sh file -asal file-tujuan
Dengan ketentuan :
⦁ Bila file asal tidak ada, berikan pesan, salin gagal.
⦁ Bila file tujuan ada dan file tersebut adalah directory, beri pesan bahwa file tidak bisa disalin ke direktori
⦁ Bila file tujuan ada dan file biasa, beri pesan apakan file tersebut akan dihapus, bila dijawab dengan “Y”, maka copy file tersebut
⦁ Bila file tujuan belum ada, lakukan copy
Untuk mengambil nama file, gunakan parameter $1 dan $2. Bila jumlah parameter tidak sama ($#) dengan 2, maka beri pesan exit = -1
# file: salin.sh
# Usage: salin.sh fasal ftujuan
if [ $# -ne 2]
then
echo “Error, usage: salin.sh file-asal file-tujuan”
exit –1
fi
fasal=$1
ftujuan=$2
echo “salin.sh $fasal $ftujuan”
……
……
Analisa:
Pada Latihan tersebut membuat script dengan konstruksi if dan elif dengan ketentuan dari soal tidak bisa mengcopy ke direktori, jika file asal tidak ada akan menampilkan pesan error “salin gagal”, jika file tujuan sudah ada akan mengkonfirmasi penyalinan, dan jika file tujuan belum ada akan di salin secara langsung.
2. Buat program yang memeriksa nama direktori, jika parameter tersebut adalah direktori, maka jalankan instruksi ls – ld pada direktori tersebut. Namakan program tersebut checkdir.sh. Gunakan notasi [ -d NamaDirektori ] dan pilih logic al && atau || pada level shell.
# file: checkdir.sh
# Usage: checkdir.sh DirectoryName
#
if [ $# -ne 1]
then
echo “Error, usage: checkdir.sh DirectoryName”
exit 1
fi
[ … ] && …
Analisa:
Perintah tersebut untuk membuat program checkdir.sh untuk memeriksa nama direktori. Program menggunakan perintah ls –ld, dan hanya bisa melihat satu direktori. Jika hanya mengeksekusi perintah tanpa nama atau lebih dari satu direktori maka akan menampilkan pesan error dan terminal akan di exit.
3. Dengan shell script pph.sh, hitung PPH per tahun dengan ketentuan sebagai berikut:
- 10 juta pertama PPH 15%
- 25 juta berikutnya (sisa) PPH 25%
- Bila masih ada sisa, maka sisa tersebut PPH 35%
Contoh:
Gaji 8 juta
PPH = 15% * 8 juta
Gaji 12 juta
PPH =15% * 10 juta + 25% * (12-10) juta
Gaji 60 juta
PPH = 15% * 10 juta + 25% * 25 juta + 25% * (60-10-25) juta
Debugging : untuk melakukan tracing (debug) gunakan opsi –x pada eksekusi shell.
+ echo –n ‘Berikan gaji dalam ribuan rupiah : ‘
Berikan gaji dalam ribuan rupiah : + read gaji
20000
+ pkp=10000
+ ‘[‘ 20000 –le 10000 ‘]’
++ expr 20000 – 10000
+ gaji=10000
+ pph=1500
+ pkp=25000
+ ‘[‘ 10000 –le 25000 ‘]’
+ pkp=10000
++ expr 1500 + 10000 ‘*’ 25 / 100
+ pph=4000
+ echo ‘Pajak Penghasilan = 4000’
Pajak Penghasilan = 4000
Analisa:
Pada latihan tersebut kita membuat program untuk menentukan pajak penghasilan dengan menggunakan konstruksi if elif, dimana jika penentuan pajaknya sesuai dengan soal diatas
4. Buatlah program myprog.sh yang memproses parameter $1, nilai parameter harus berupa string :
stop
status
restart
reload
Bila buka dari string tersebut, maka berikan pesan error. Sempurnakan program di bawah ini untuk keperluan tersebut
# See how we were called
case “$1” in
start)
echo “Ini adalah start”
;;
stop)
*)
echo “Ini adalah stop”
;;
echo $”Usage:$0 {start|stop|restart|reload|status}”
;;
esac
return
Analisa:
Pada latihan tersebut membuat program dengan konstruksi case, dimana untuk mengisi variable 1 menyesuaikannya dengan case yang ada, jika input yang diberikan tidak sesuai maka akan memberikan error seperti pada gambar.
5. Buat sebuah fungsi pada script confirm.sh yang memberikan konfirmasi jawaban Yes, No atau Continue. Jika jawaban Yes, maka beri nilai balik 0, No = 1 dan Continue = 2. Modifikasi kerangka program berikut untuk memenuhi permintaan tersebut.
# Confirm whether we really want to run this service
confirm() {
local YES=”Y”
local NO=”N”
local CONT=”C”
while :
do
echo –n “(Y)es/(N)o/(C)ontinue? {Y] “
read answer
answer=`echo “$answer” | tr ‘[a-z]’ ‘[A-Z]’`
if [ “$answer” = “” –0 “$answer” = $YES ]
then
return 0
elif ….
then
return 2
elif ….
then
return 1
fi
done
}
Test fungsi diatas dengan program berikut :
. confirm.sh
confirm
if [ $? –eq 0 ]
then
echo “Jawaban YES OK”
elif [ $? =eq 1 ]
then
echo “Jawaban NO”
else
echo “Jawaban CONTINUE”
fi
Analisa:
Pada latihan tersebut membuat sebuah fungsi pada script confirm.sh yang memberikan konfirmasi jawaban Yes, No atau Continue. Jika jawaban Yes, maka beri nilai balik 0, No = 1 dan continue = 2.
KESIMPULAN
Pada kedua praktikum kali ini terdapat Shell Script, Variable, Membaca Keyboard, Parameter, Status Exit, Konstruksi If, Konstruksi If Then Else, Intruksi Test, Logical && dan || (Shell Level), Operator Bilangan Bulat Untuk Test, Operator logical (Test Level), Konstruksi If Then Else If, Hitungan Aritmetika, Instruksi Exit, Kontruksi Case, Konstruksi For, Konstruksi While, Instruksi Dummy, dan Fungsi pada Sistem Operasi Linux yang bila disimpulkan didapatkan hasil :
1. Shell script dibuat dengan editor teks yang pada umumnya diberikan ekstensi “.sh”
2. Variable shell adalah variable yang dapat mempunyai nilai berupa nilai String
3. Membaca Keyboard dengan nilai variable dapat diisi melalui keyboard (stdin) dengan instruksi read
4. Parameter sebuah program shell dapat mempunyai sebanyak 9 buah.
5. Status exit untuk mengeksekusi setelah program telah selesai
6. Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspres
7. Notasi && dan || digunakan untuk menggabungkan instruksi shell sebagai alternatif untuk if then else. Notasi && dan || sering ditemukan adalah shell script system administrator untuk menjalankan routine dari system operasi.
8. Operator bilangan bulat untuk test digunakan untuk membandingkan 2 buah bilang
9. Logical operator terdiri dari AND, OR dan NOT.
10. Konstruksi case digunakan untuk menyederhanakan pemakaian if yang berantai
11. Konstruksi for digunakan untuk pengulangan dengan menggunakan var yang pada setiap
pengulangan akan diganti dengan nilai yang berada pada daftar (list)
12. Konstruk while digunakan untuk pengulangan instruksi, yang umumnya dibatasi dengan suatu
kondisi
13. Instruksi dummy adalah instruksi yang tidak melakukan apa -apa, namun instruksi ini memberikan
status exit 0 (TRUE). atu kondisi
14. Fungsi adalah program yang dapat dipanggil oleh program lainnya dengan menggunakan notasi
NamaFungsi().
Tidak ada komentar:
Posting Komentar