Praktikum 6 : Pemrograman Shell
Praktikum 6
Pemrograman Shell
POKOK BAHASAN :
- Pemrograman Shell
TUJUAN BELAJAR :
Setelah mempelajari materi dalam bab ini, mahasiswa diharapkan mampu :
- Mempelajari elemen dasar shell script
- Membuat program shell interaktif
- Menggunakan parameter dalam program
- Mempelajari test kondisi serta operator logic yang terkait dengan instruksi test
- Mengenal variable built-in dari shell
- Membuat aplikasi dengan shell menggunakan konstruksi if-then-else
- Menggunakan struktur case – esac.
- Loop dengan while, for, do while.
- Membuat fungsi dan mengetahui cara memanggil fungsi tersebut.
ABSTRAK :
Praktikum ini mempelajari mengenai pemograman shell yang terdiri darielemen dasar shell script, membuat program shell interaktif, menggunakan parameter dalam program, mempelajari test kondisi serta operator logic yangterkait dengan instruksi test, mengenal variable built-in dari shell, membuataplikasi dengan shell menggunakan konstruksi if-then-else, menggunakan strukturcase – esac, loop dengan while, for, do while, dan Membuat fungsi danmengetahui cara memanggil fungsi tersebut.
DASAR TEORI :
1. SHELL SCRIPT
Shell script dibuat dengan editor teks (ASCII editor) dan umumnya diberikan ekstensi “.sh”. Script selalu diawali dengan komentar, yang dimulai dengan tanda #, disambung dengan ! dan nama shell yang digunakan.
#!/bin/sh (1)# Program shell (2)#var1=x (3)var2=8
(1) Awal dari program shell, komentar awal ini akan dibaca oleh system, kemudian system mengaktifkan program shell (/bin/sh) yang tertera di situ. Program shell dapat dipilih, misalnya /bin/csh, /bin/ksh dan lainnya.
(2) Adalah komentar, sebagai dokumentasi, baris ini akan diabaikan oleh program shell.
(3) Penggunaan variable (assignment), tidak boleh ada spasi di antara nama variable dan konstanta.
2. VARIABEL
Variable shell adalah variable yang dapat mempunyai nilai berupa nilai String. Tata penulisan variable adalah sebagai berikut :
nama_var = nilai_var
Variable harus dimulai dengan alfabet, disusul dengan alfanumerik dan karakter lain. Variabel dapat ditulis dalam huruf kecil atau huruf besar atau campuran keduanya. Shell membedakan huruf besar dan huruf kecil (case sensitive), contoh :
VPT=polteki=5
Pemberian nilai variable tidak boleh dipisahkan dengan spasi, karena shell akan menganggap pemisahan tersebut sebagai parameter, contoh :
VPT =poltek ##errorVPT= poltek ##error
Untuk melihat nilai/isi dari sebuah variable, gunakan tanda $ di depan nama variable tersebut. Pada shell, instruksi echo dapat menampilkan isi variable tersebut, contoh :
VPT=poltekecho $VPTGaji=450000echo $Gajiecho $VPT $Gaji
Bila menggunakan string yang terdiri dari lebih dari satu kata, maka string tersebut harus berada dalam tanda kutip atau apostrof, contoh :
VPT=poltekVPT2=”Politeknik Negeri Jakarta”
3. MEMBACA KEYBOARD
Nilai variable dapat diisi melalui keyboard (stdin) dengan instruksi read.
4. PARAMETER
Sebuah program shell dapat mempunyai parameter sebanyak 9 buah dan direpresentasikan melalui variable khusus yaitu variable $!, $2, $3, $4, $5, $6, $7, $8 dan $9. Nama program she ll (nama script) direpresentasikan melalui variable $0.
Jumlah parameter dinyatakan sebagai $#. Bila tidak memberikan parameter, maka nilai $# adalah 0.
Shell variable $* menyatakan seluruh string yang menjadi parameter / argumen sebuah script ($@ mempunyai arti yang sama). $$ menyatakan nomor proses id (pid) dari script yang dijalankan. Pid ini akan terus berubah (umumnya) menaik, setiap kali proses berjalan.
5. STATUS EXIT
Setiap program setelah selesai dieksekusi akan memberikan informasi melalui variable spesial $?. Indikasi yang diberikan adalah :
- Bila program berakhir dengan sukses, $? = 0
- Bila program berakhir dengan error, $? ≠ 0
6. KONSTRUKSI IF
if akan mengeksekusi instruksi-aw al, dan exit status dari instruksi tersebut akan menjadi kondisi. Bila 0, maka instruksi selanjutnyua masuk ke dalam blok then. Bila tidak 0, maka alur program diteruskan setelah kunci kata fi.
7. KONSTRUKSI IF THEN ELSE
Bila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
8. INSTRUKSI TEST
Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi. Ekspresi terdiri dari factor dan operator yang dipisahkan oleh spasi. Hasil test akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasil adalah ≠ 0.
Test dapat dilakukan untuk memeriksa apakah file ada (Exist), dapat dibaca, dapat ditulis, kosong dan lainnya.
[ sebenarnya adalah nama lain dari test, bedanya [ akan mencari kurung penutup ] pada akhir ekspresi yang harus dipisahkan oleh spasi.
9. LOGICAL && DAN || (SHELL LEVEL)
Notasi && dan || digunakan untuk menggabungkan instruksi shell sebagai alternatif untuk if then else. Notasi && dan || sering ditemukan dalam shell script system administrator untuk menjalankan routine dari system operasi.
- instruksi1 && instruksi2
- instruksi1 || instruksi2
10. OPERATOR BILANGAN BULAT UNTUK TEST
Untuk membandingkan 2 buah bilangan, test memerlukan operator yang berbeda dengan string.
11. OPERATOR LOGICAL (TEST LEVEL)
Logical operator terdiri dari AND, OR dan NOT. Operator ini menggabungkan hasil ekspresi sebagai berikut :
NOT : symbol !
AND : symbol -a
OR : symbol -o
12. KONSTRUKSI IF THEN ELSE IF
Bila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.
13. HITUNGAN ARITMETIKA
Tipe dari variable SHELL hanya satu yaitu STRING. Tidak ada tipe lain seperti Numerik, Floating, Boolean atau lainnya. Akibatnya variable ini tidak dapat membuat perhitungan aritmetika, misalnya :
A=5
B=$A +1 ## error
UNIX menyediakan utilitas yang bernama expr yaitu suatu utilitas yang melakukan aritmetika sederhana.
14. INSTRUKSI EXIT
Program dapat dihentikan (terminated/selesai) dengan instruksi exit. Sebagai nilai default program tersebut akan memberikan status exit 0.
15. 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.
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
16. KONSTRUKSI FOR
For digunakan untuk pengulangan dengan menggunakan var yang pada setiap pengulangan akan diganti dengan nilai yang berada pada daftar (list).
17. KONSTRUKSI WHILE
While digunakan untuk pengulangan instruksi, yang umumnya dibatasi dengan suatu kondisi. Selama kondisi tersebut TRUE, maka pengulangan terus dilakukan. Loop akan berhenti, bila kondisi FALSSE, atau program keluar dari blok while melalui exit atau break.
18. INSTRUKSI DUMMY
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).
Simbol instruksi dummy adalah ⇒ :
19. FUNGSI
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 :
F1( ) {……..……..return 1}
Variabel dapat didefinisikan dalam fungsi sebagai variable local atau global. Hal yang perlu diperhatikan, nama variable yang digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang sama di luar fungsi, 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.
PRAKTIKUM PERCOBAAN :
- Login sebagai user.
- Bukalah console terminal dan lakukan percobaan-percobaan di bawah ini kemudian analisa hasil percobaan.
- Selesaikan soal-soal latihan.
Percobaan 1 : Membuat shell script
1. Buatlah file prog01.sh dengan editor vi
$ vi prog01.sh#!/bin/sh# Program shell#var1=xvar2=8
Hasil :
Analisa :
Untuk membuat file prog01.sh menggunakan editor vi dengan memasukkan perintah $ vi prog01.sh. Tanda # digunakan sebagai komentar. Program yang digunakan adalah program shell dengan /bin/sh. Penggunaan variabel assignment tidak boleh menggunakan spasi diantara nama. Untuk keluar dari editor dilakukan dengan cara menekan esc, kemudian :wq! yang berarti menyimpan serta exit, lalu kemudian enter.
2. Untuk menjalankan shell, gunakan notasi TITIK di depan nama program
$ . prog01.sh
Hasil :
Analisa :
Program tidak bisa dijalankan apabila tanpa titik di depan nama program karena file belum di executable. Tanpa diexecutable, program masih dapat dijalankan menggunakan titik yang diletakkan di depan nama file atau .(spasi)nama file.sh.
3. Untuk menjalankan shell, dapat juga dengan membuat executable file dan dieksekusi relatif dari current directory
$ chmod +x prog01.sh$ ./prog01.sh
Hasil :
Analisa :
Perintah chmod+x digunakan untuk mengubah file menjadi executable. Sedangkan perintah $ ./prog01.sh digunakan untuk menjalankan file yang executable.
Percobaan 2 : Variable
1. Contoh menggunakan variable pada shell interaktif
$ VPT=poltek$ echo $VPT
Hasil :
Analisa :
VPT adalah variabel yang dapat mempunyai nilai berupa string. Pada percobaan ini, kita mencoba menginputkan kata poltek ke VPT. Sehingga pada saat program membaca VPT, maka akan muncul poltek. Perintah echo digunakan untuk mencetak string yang sebelumnya telah diinputkan pada variabel VPT.
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=politeknik negeri Jakarta (Terdapat pesan error)$ VPT2=”politeknik negeri Jakarta”$ echo VPT2$ echo $VPT2
Hasil :
Analisa :
Pada saat mengetik perintah pertama, terdapat pesan error karena variabel tidak dapat dijalankan apabila ada dua instruksi yang menggunakaan tanpa adanya tanda petik dua. Apabila dalam variabel terdapat lebih dari satu instruksi, maka harus mengguanakan tanda petik dua atau diapit dalam tanda petik dua sehingga isi dari variabel tersebut dapat dicetak menggunakan echo. Ketika ingin mencetak variabel dengan perintah echo, harus disertai dengan $ agar isi dalam variabel dapat dicetak.
3. Menggabungkan dua variable atau lebih
$ V1=broadband$ V2=’:’$ V3=multimedia$ V4=$V1$V2$V3$ echo $V4
Hasil :
Analisa :
Pada percobaan ini, kita membuat 3 variable. Kemudian ketiga variabel tersebut digabungkan dengan cara membuat variabel keempat yang merupakan gabungan isi dari variabel 1 hingga 3. Lalu untuk menjalankan perintah untuk mencetak isi dari variabel 1 hingga 3, menggunakan perintah $echo $V4.
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 $V3$ echo $V3PNJ$ echo ${V3}PNJ
Hasil :
Analisa :
Sebelumnya, variabel V3 sudah mempunyai instruksi berupa jakarta. Perintah echo $V3PNJ ketika dibaca menghasilkan string kosong karena variabel V3 digabungkan dengan nama variabel yang belum didefinisikan atau kosong. Oleh karena itu untuk menggabungkan isi file V3 dengan string “PNJ”, variabel V3 harus diproteksi dengan {} dan digabungkan dengan string. Sehingga ketika dijalankan, outputnya menjadi multimediaPNJ.
5. Variabel dapat berisi instruksi, yang kemudian bila dijadikan input untuk shell, instruksi tersebut akan dieksekusi
$ CMD=who$ $CMD$ CMD=”ls –l”$ $CMD
Hasil :
Analisa :
CMD digunakan untuk melihat tanggal dan waktu user saat aktif. Variabel dapat dijadikan input shell dan kemudian dapat dieksekusi. Ketika perintah $ $CMD dijalankan, output yang keluar adalah output berupa tanggal dan waktu user aktif. Perintah $ CMD=”ls -l” digunakan untuk melihat file secara lengkap yang dipanggil dengan perintah $ $CMD untuk dieksekusi (sama seperti jika memasukkan perintah ls -l saja). Untuk memasukkan lebih dari satu kata harus diapit dengan tanda petik.
6. Modifikasi file prog01.sh berikut
$ vi prog01.sh#!/bin/shV1=broadbandV2=’:’V3=multimediaecho “Pemrograman shell”echo $V1$V2$V3 V3=PNJecho $V1$V2 di $V3
Hasil :
Analisa :
Pada percobaan ini, sama seperti pada percobaan 2 nomer 3, dimana menggabungkan variabel. Bedanya, hanya menggunakan editor vi. Maksud dari program diatas adalah pertama kita akan mencetak “Pemrograman shell”. Selanjutnya kita membuat variabel V1 yang berisi broadband, V2 yang berisi :, dan V3 yang berisi multimedia. Kemudian kita menggabungkan ketika variabel tersebut sehingga mencetak “broadband : multimedia”. Kemudian kita membuat lagi variabel V3 yang berisi PNJ. Kemudian kita menggabungkan variabel V1, V2, dan ditambah $V3 baru. Sehingga terakhir kita akan mencetak “broadband: di PNJ”.
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$ prog01.sh (Terdapat pesan error)$ ./prog01.sh (Terdapat pesan error)$ chmod +x prog01.sh$ ./prog01.sh
Hasil :
Analisa :
Untuk mengeksekusi program tersebut, dapat dipanggil menggunakan perintah $ .prog01.sh, $ ./prog01.sh. Perintah $ chmod +x prog01.sh digunakan untuk membuat file prog01.sh menjadi executable. Program dapat terjadi error dikarenakan belum di executable.
Percobaan 3 : Membaca Keyboard
1. Menggunakan instruksi read
$ read namaaldan$ echo $nama
Hasil :
Analisa :
Untuk memasukkan nilai ke dalam variabel juga bisa melalui keyboard dengan menggunakan instruksi read. Ketika membaca isi variabel nama dengan perintah echo, maka isi variabel tersebut akan dicetak.
2. Membaca nama dan alamat dari keyboard
$ vi prog02.sh#!/bin/sh# prog02.sh# membaca nama dan alamatecho “Nama Anda : “read namaecho “Alamat : “read alamatecho “Kota : “read kotaechoecho “Hasil adalah : $nama, $alamat di $kota”
Hasil :
Analisa :
Program yang ditulis pada editor vi adalah perintah yang digunakan untuk membaca nama dan alamat keyboard di perintah selanjutnya.
3. Eksekusi program prog02.sh
$ . prog02.shNama Anda :AldanAlamat :JL. Margonda raya 8Kota :DepokHasil adalah : Aldan, JL. Margonda raya 8 di Depok
Hasil :
Analisa :
Setelah program dieksekusi, outputnya seperti pada gambar diatas, dimana inputnya diketik sendiri lalu hasilnya berupa “Aldan, JL. Margonda raya 8 di Depok ”.
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
$ vi prog02.sh#!/bin/sh# prog02.sh# membaca nama dan alamatecho –n “Nama Anda : “read namaecho –n “Alamat : “read alamatecho –n “Kota : “read kotaechoecho “Hasil adalah : $nama, $alamat di $kota”
Hasil :
Analisa :
Pada dasarnya kode program ini sama dengan program kode dengan sebelumnya, hanya saja ditambahkan -n yang berarti menghilangkan baris baru setelah mencetak kata. Misal pada program echo-n “Nama Anda : “ read nama jadi setelah mencetak nama Anda, maka inputan nama akan berada disamping Nama Anda, bukan berada di bawahnya.
5. Eksekusi program prog02.sh
$ . prog02.shNama Anda : AldanAlamat : JL. Margonda raya 8Kota : DepokHasil adalah : Aldan, JL. Margonda raya 8 di Depok
Hasil :
Analisa :
Terlihat bahwa outputnya berada disamping dan bukan pada baris baru ketika menginputkan naman, alamat, dan kota.
6. Variabel kosong adalah variable yang tidak mempunyai nilai. Variabel ini didapat atas assignment atau membaca dari keyboard atau variable yang belum didefinisikan
$ read nama
<CR>
$ echo $nama
$ A=
$ B=””
$ C=$A$B
$ echo $C
Hasil :
Analisa :
Pada percobaan ini menggunakan variabel kosong. Variabel ini didapat atas assignment atau membaca dari keyboard atau variabel yang belum didefinisikan.
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.
$ pwd$ DIR=`pwd`$ echo $DIR
Hasil :
Analisa :
Variabel dapat disubstitusikan dengan hasil suatu instruksi. Contonya pada percobaan kali ini kita menuliskan $ DIR=`pwd` artinya kita menginputkan perintah pwd dan hasilnya akan disimpan pada variabel DIR. Sehingga saat kita membaca variabel DIR, maka yang muncul adalah sama dengan saat kita menginputkan perintah pwd.
8. Buatlah shell script prog03.sh
$ vi prog03.sh#!/bin/sh# prog03.sh#NAMA=`whoami`echo Nama Pengguna Aktif adalah $NAMAtanggal=`date | cut –c1-10`echo Hari ini tanggal $tanggal
Hasil :
Analisa :
Maksud dari program diatas adalah output dari perintah whoami akan disimpan di dalam variabel NAMA dan kemudian kita mencetak “Nama pengguna aktif adalah (output whoami)”. Selanjutnya kita menginputkan perintah date | cut -c1 -10. Output dari perintah tersebut akan disimpan di dalam variabel tanggal. Kemudian kita mencetak “hari ini tanggal (output dari date | cut -c1 -10).
9. Eksekusi prog03.sh
$ . prog03.sh
Hasil :
Analisa :
Output dari program tersebut terlihat pada gambar yang mana output dari whoami adalah aldan dan output dari data | cut -c1-10 adalah Sel Okt 18.
Percobaan 4 : Parameter
1. Membuat shell script prog04.sh
$ vi 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”
Hasil :
Analisa :
Pada percobaan ini, kita membuat file prog04.sh pada editor vi. Maksud dari program di atas adalah pada baris nama program adalah $0, $0 adalah menampilkan parameter nol yaitu berupa nama program. Program yang kita gunakan adalah program bash maka outputnya adalah bash. Baris selanjutnya parameter 1 adalah $1 yang menampilkan parameter pertama sesuai masukan dan parameter 2 adalah $2 yang menampilkan parameter kedua. Sedangkan $3 maksudnya menampilkan parameter ketiga dan seterusnya.
2. Eksekusi prog04.sh tanpa parameter, dengan 2 parameter, dengan 4 parameter
$ . prog04.sh$ . prog04.sh amir hasan$ . prog04.sh amir hasan badu ali
Hasil :
Analisa :
Perintah di atas digunakan untuk mengeksekusi prog04.sh dengan menambahkan 2 parameter dan 4 parameter. Tetapi pada parameter ke 4, variabel “ali” tidak dapat diinputkan karena program shell hanya menyediakan untuk 3 parameter saja.
3. Membuat shell script prog04.sh versi 2 dengan memberikan jumlah parameter
$ vi prog04.sh#!/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”
Hasil :
Analisa :
Pada file prog04.sh versi 2 ini hanya ada tambahan baris “jumlah parameter yang diberikan $#”. Maksud dari $# adalah menghitung parameter yang kita berikan.
4. Eksekusi prog04.sh tanpa parameter dan dengan 4 parameter
$ . prog04.sh$ . prog04.sh amir hasan badu ali
Hasil :
Analisa :
Pada percobaan ini, menampilkan output prog04.sh versi 2. Perintah pertama digunakan tanpa menginputkan parameter, sehingga output dari programnya mencetak “Jumlah parameter yang diberikan adalah 0” pada baris pertama. Perintah kedua menginputkan 4 parameter yaitu amir, hasan, badu, dan ali. Walaupun output program hanya bisa mencetak hingga 3 parameter saja sehingga parameter ali tidak dapat tercetak, namun kita tetap dapat mengetahui jumlah parameter yang diinputkan pada output baris pertama yaitu “Jumlah parameter yang diberikan adalah 4”.
5. Membuat shell script prog04.sh versi 3 dengan menambahkan total parameter dan nomor proses id (PID)
$ vi prog04.sh#!/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 $$”
Hasil :
Analisa :
Pada file prog04.sh, kita hanya menambahkan program total parameter dan PID proses shell. $* digunakan untuk menampilkan seluruh parameter yang diberikan. Sedangkan $$ digunakan untuk menampilkan nomor PID proses program kita.
6. Eksekusi prog04.sh dengan 4 parameter
$ . prog04.sh amir hasan badu ali
Hasil :
Analisa :
Setelah dieksekusi dengan memberikan parameter amir hasan badu ali, output program prog04.sh adalah total parameternya amir hasan badu ali dan nomor PID prosesnya adalah 3034.
Percobaan 5 : Status Exit
1. String tidak diketemukan, maka status exit adalah 1
$ grep xyz /etc/passwd$ echo $?
Hasil :
Analisa :
Perintah $ grep xyz /etc/passwd digunakan untuk mencari file xyz di dalam direktori etc di dalam passwd. Cara untuk mengecek status exit adalah dengan echo $. Jika string tidak ditemukan, maka status exit adalah 1. Namun jika string ditemukan, maka status exit adalah 0.
2. String diketemukan, maka status exit adalah 0
$ grep <user> /etc/passwd$ echo $?
Hasil :
Analisa :
Pada percobaan di atas, dilakukan untuk mencari file yang menampilkan user yang pernah login ke dalam sistem. Jika setelah dicek status exitnya bernilai 0, maka string tersebut ditemukan.
Percobaan 6 : Konstruksi IF
1. Instruksi dengan exit status 0
$ who$ who | grep <user>$ echo $?
Hasil :
Analisa :
Perintah who digunakan untuk melihat user yang aktif dengan tanggal dan waktu. Perintah who | grep <user> bermaksud mencari kata aldan di dalam output perintah who. Dan saat dicek status exitnya, terdeteksi bahwa status exitnya adalah 0 sehingga kata aldan ditemukan.
2. If membandingkan exit status dengan 0, bila sama, maka blok program masuk ke dalam blok then-fi
$ if [ $? = 0 ]> then> echo “Pemakai tersebut sedang aktif”> fi
Hasil :
Analisa :
Perintah if diatas adalah perintah yang digunakan untuk mengecek status exit dengan konstruksi if. Jika status exitnya 0 maka program akan mencetak “Pemakai tersebut sedang aktif”.
3. Nomor (1) dan (2) diatas dapat disederhanakan dengan
$ if who|grep >/dev/null> then> echo okay> fi
Hasil :
Analisa :
Perintah diatas merupakan gabungan dari nomor 1 dan 2. Apabila mencari kata aldan yang merupakan user yang sedang aktif fi who pada direktori /dev/null, jika terdeteksi, maka akan mencetak kata “okay”.
Percobaan 7 : Konstruksi IF THEN ELSE
1. Membuat shell script prog05.sh
$ vi prog05.sh#!/bin/sh# prog05.sh# Program akan memberikan konfirmasi apakah nama# user sedang aktif atau tidak#echo –n “Berikan nama pemakai : ”read namaif who | grep $nama > /dev/nullthenecho “$nama sedang aktif”elseecho “$nama tidak aktif”fi
Hasil :
Analisa :
Program prog05.sh dibuat dengan menggunakan editor vi. Perintah echo -n “Berikan nama pemakai : “ akan mencetak tulisan tersebut ketika dieksekusi dan program akan membaca variabel nama dengan perintah read nama ketika user menginputkan nama pemakai. Nama yang diinputkan user akan disimpan dalam variabel nama. Kemudian jika nama yang diinputkan sama dengan nama user yang sedang aktif, maka program akan mencetak “<user> sedang aktif”, sebaliknya jika nama yang diinputkan bukan user yang sedang aktif, maka program akan mencetak “<user> tidak aktif”.
2. Jalankan prog05.sh, masukkan nama pemakai yang aktif yang tampil pada instruksi who dan coba juga untuk nama pemakai yang tidak aktif
$ who$ . prog05.sh [nama=<user>]$ . prog05.sh [nama=studentOS]
Hasil :
Analisa :
Perintah who digunakan untuk mengecek user yang sedang aktif. Ketika perintah $ . prog05.sh dijalankan, kita menginputkan nama user yang sedang aktif contohnya aldan, maka program akan mencetak “aldan sedang aktif”. Sebaliknya, jika kita menginputkan user yang tidak aktif, contohnya studentOS, maka program mencetak “studentOS tidak aktif”.
Percobaan 8 : Instruksi Test
1. Menggunakan instruksi test, perhatikan spasi antara
$ NAMA=amir$ test $NAMA = amir$ echo $?$ test $NAMA = boris$ echo $?
Hasil :
Analisa :
Dengan menggunakan instruksi test, spasi antara NAMA=amir harus diperhatikan. Apabila terdapat spasi, maka program tidak dapat dijalankan. Nama amir inputkan ke dalam variabel NAMA lalu dites menggunakan perintah test $NAMA = amir untuk mengecek apakah kata amir sudah terdapat di dalam variabel NAMA atau belum. Cek status exit dengan perintah echo $?. Jika status exitnya 0 nama amir ditemukan dalam variabel NAMA. Ketika menginputkan nama boris, status exit bernilai 1 yang artinya kata boris tidak ditemukan dalam variabel NAMA.
2. Aplikasi test dengan konstruksi if
$ vi prog06.sh#!/bin/sh# prog06.shecho –n “NAMA = “read NAMAif test “$NAMA” = amirthenecho “Selamat Datang $NAMA”elseecho “Anda bukan amir, sorry!”fi
Hasil :
Percobaan di atas membuat file prog06.sh menggunakan editor vi. Program dibuat dengan menggunakan konstruksi if else untuk memasukkan nama yang kemudian akan dibandingkan dengan isi dari variabel nama. Jika tidak ditemukan, maka akan dijalankan perintah else.
3. Jalankan program prog06.sh dengan memasukkan NAMA = amir dan NAMA = <CR> perhatikan hasil tampilannya
$ . prog06.sh [NAMA = amir]$ . prog06.sh [NAMA = <CR>] (Terdapat pesan error)
Hasil :
Analisa :
Ketika menginputkan variabel nama dengan kata “amir”, maka program akan mencetak “Selamat Datang amir”. Sedangkan jika memasukkan <CR> akan terjadi error. Hal ini karena <> menandakan menuju pada suatu file atau direktori.
4. Modifikasi prog06.sh dengan menggunakan notasi untuk test
$ vi prog06.sh#!/bin/sh# prog06.shecho –n “NAMA = “read NAMAif [ “$NAMA” = amir ]thenecho “Selamat Datang $NAMA”elseecho “Anda bukan amir, sorry!”fi
Hasil :
Perintah ini sama seperti nomor sebelumnya hanya saja terdapat sedikit modifikasi penulisan. Namun, ketika dijalankan, program menghasilkan output yang sama seperti nomor sebelumnya.
5. Jalankan program prog06.sh dengan memasukkan NAMA = amir
$ . prog06.sh [NAMA = amir]
Hasil :
Program menghasilkan output “Selamat Datang amir” ketika kita menginput kata amir pada variabel NAMA. Outputnya sama seperti nomor sebelumnya.
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.
$ [ -f prog01.sh ] && echo “Prog01.sh ada”
Hasil :
Pada percobaan ini, prog01.sh ada, sehingga program mencetak “prog01.sh ada”.
2. File prog99.sh tidak ada, karena itu exit status adalah FALSE dan instruksi echo tidak dijalankan
$ [ -f prog99.sh ] && echo “Prog99.sh ada”
Hasil :
Pada percobaan ini, dijelaskan bahwa prog99.sh tidak ada, sehingga program echo tidak dijalankan.
3. Bila prog01.sh ada maka jalankan shell script tersebut
$ [ -f prog01.sh ] && . prog01.sh
Hasil :
Pada percobaan di atas, jika prog01.sh ada, maka akan menjalankan shell scriptnya. Sehingga outputnya adalah program prg01.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 ?”
Hasil :
Karena prog01.sh ada, maka exit statusnya adalah TRUE, sehingga instruksi echo tidak lagi dijalankan.
5. File prog99.sh tidak ada, karena itu exit status adalah FALSE, hasil masih tergantung atas exit status instruksi ke dua, karena itu instruksi echo dijalankan
$ [ -f prog99.sh ] || echo “Dieksekusi tidak ?”
Hasil :
File prog99.sh tidak ada, karena itu exit statusnya adalah FALSE. Karena hasil masih tergantung atas status exit instruksi kedua, maka instruksi echo dijalankan.
6. File prog99.sh tidak ada, maka tampilkan pesan error
$ [ -f prog99.sh ] || echo “Sorry, prog99.sh tidak ada”
Hasil :
Prog99.sh tidak ada, sehingga echo dijalankan.
Percobaan 10 : Operator Bilangan Bulat untuk Test
1. Menggunakan operator dengan notasi test
$ i=5$ test “$i” –eq 5$ echo $?
Hasil :
Perintah di atas adalah operator bilangan bulat untuk test. Variabel i berisi 5 maka dengan notasi test, variabel I -eq (sama dengan) 5 dan apabila dijalankan perintah echo $?, status exit bernilai 0 karena i memang berisi dengan nilai 5.
2. Menggunakan operator dengan notasi [ ] (penganti notasi test)
$ [ “$i” –eq 5 ]$ echo $?
Hasil :
Ini adalah cara lain untuk mengetes operator bilangan bulat yaitu dengan notasi [].
Percobaan 11 : Operator Logical dan Konstruksi ELIF
1. Buatlah file prog07.sh
$ vi prog07.sh#!/bin/sh# prog07.shecho –n “INCOME = “read INCOMEif [ $INCOME –ge 0 –a $INCOME –le 10000 ]thenBIAYA=10elif [ $INCOME –gt 10000 –a $INCOME –le 25000 ]thenBIAYA=25elseBIAYA=35fiecho “Biaya = $BIAYA”
Hasil :
Analisa :
Percobaan di atas adalah membuat prog07.sh dengan editor vi menggunakan operasi logical dan konstruksi elif. Untuk menyimpannya serta keluar bisa dilakukan dengan cara menekan esc, lalu :wq! dan enter.
2. Jalankan file prog07.sh dan masukkan untuk INCOME=5000, 20000, 28000
$ . prog07.sh [INCOME=5000]$ . prog07.sh [INCOME=20000]$ . prog07.sh [INCOME=28000]
Hasil :
Analisa :
Maksud dari program di atas adalah jika income antara 0 sampai dengan 10000, maka akan mencetak biaya = 10, jika income antara 10000 sampai dengan 50000, maka akan mencetak biaya = 25. Jika lebih dari keduanya, maka akan mencetak biaya = 35.
Percobaan 12 : Hitungan Aritmetika
1. Menggunakan utilitas expr
$ expr 5 + 1$ A=5$ expr $A + 2$ expr $A – 4$ expr $A * 2 (Ada pesan error)$ expr $A \* 2$ expr $A / 6 +10$ expr 17 % 5
Hasil :
Perintah expr adalah variabel counter baris perintah manual yang digunakan untuk mengevaluasi ekspresi di UNIX/LINUX bawah, umumnya digunakan untuk nilai integer, juga dapat digunakan untuk string. Perintah pertama digunakan untuk operasi penjumlahan. Perintah A=5 adalah memasukkan angka 5 ke dalam variabel A. Perintah selanjutnya merupakan operasi bilangan (operasi aritmatika). Penulisan perkalian dalam expr menggunakan backslash.
Ekspresi penulisan expr antara lain adalah :
- Dipisahkan oleh ruang disetiap item
- Digunakan backslash untuk shell tertentu.
- String mengandung tanda kutip mengandung spasi dan karakter khusu lainnya tertutup.
2. Substitusi isi variable dengan hasil utilitas expr
$ A=5$ B=`expr $A + 1`$ echo $B
Hasil :
Untuk dapat memasukkan nilai variabel A ke dalam operasi di dalam variabel B, maka digunakan tanda petik terbalik.
Percobaan 13 : Instruksi Exit
1. Buat shell script prog08.sh
$ vi prog08.sh#!/bin/shif [ -f prog01.sh ]thenexit 3elseexit –1fi
Hasil :
Percobaan diatas adalah membuat program prog08.sh menggunakan editor vi untuk melakukan proses exit.
2. Jalankan script prog08.sh dan periksa status exit
$ . prog08.sh$ echo $?
Hasil :
Ketika perintah $ .prog08.sh dijalankan, teminal keluar secara otomatis. Saat dicek menggunakan perintah $ echo $? maka dapat dilihat bahwa status exitnya bernilai 0 yang artinya terdapat status exit.
Percobaan 14 : Konstruksi case – esac
1. Buatlah file prog09.sh dengan editor vi
$ vi prog09.sh#!/bin/sh# Prog: prog09.shecho “1. Siapa yang aktif”echo “2. Tanggal hari ini”echo “3. Kalender bulan ini”echo –n “ Pilihan : “read PILIHcase $PILIH in1)echo “Yang aktif saat ini”who;;2)echo “Tanggal hari ini”date;;3)echo “Kalender bulan ini”cal;;*)echo “Salah pilih !!”;;esac
Hasil :
Program di atas adaha program dimana user memasukkan angka 1-3 untuk mengeksekusi perintah. Apabila user memasukkan angka 1, maka program akan mencetak pengguna yang sedang aktif. Apabila user memasukkan angka 2, maka program akan mencetak tanggal hari ini. Apabila user memasukkan angka 3, maka program akan mencetak kalender bulan ini.
2. Jalankan program prog09.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog09.sh
Hasil :
Apabila user memasukkan angka 1, maka program akan mencetak pengguna yang sedang aktif. Apabila user memasukkan angka 2, maka program akan mencetak tanggal hari ini. Apabila user memasukkan angka 3, maka program akan mencetak kalender bulan ini.
3. Buatlah file prog10.sh yang merupakan bentuk lain dari case
$ vi prog10.sh#!/bin/sh# Prog: prog10.shecho –n “Jawab (Y/T) : “read JWBcase $JWB iny | Y | ya |Ya |YA ) JWB=y ;;t | T | tidak | Tidak | TIDAK ) JWB=t ;;esac
Hasil :
File prog10.sh dibuat menggunakan editor vi. Ini merupakan cara lain penyebutan case dalam program shell. User dapat menginputkan y/Y/ya/Ya/YA untuk memilih iya dan t/T/Tidak/tidak untuk memilih tidak.
4. Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh
Hasil :
Hasil diatas merupakan inputan user dalam memilih ya atau tidak.
5. Modifikasi file prog10.sh yang merupakan bentuk lain dari case
$ vi prog10.sh#!/bin/sh # Prog: prog10.shecho –n “Jawab (Y/T) : \c“read JWBcase $JWB in[yY] | [yY][aA] ) JWB=y ;;[tT] | [tT]idak ) JWB=t ;;*) JWB=? ;;esac
Hasil :
Program di atas merupakan cara lain dalam penulisan case.
6. Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog10.sh
Hasil :
Outputnya sama dengan program nomor sebelumnya.
Percobaan 15 : Konstruksi for-do-done
1. Buatlah file prog11.sh
$ vi prog11.sh#!/bin/sh# Prog: prog11.shfor NAMA in bambang harry kadir amirdoecho “Nama adalah : $NAMA”done
Hasil :
Perintah di atas adalah perintah pada konstruksi for do done. Yang mana diawali dengan for yaitu variabel NAMA berisi bambang harry kadir amir. Dan outputnya akan menampilkan keseluruhan kata dalam variabel NAMA.
2. Jalankan program prog11.sh
$ . prog11.sh
Hasil :
Outputnya berupa mencetak semua kata yang berada di dalama variabel NAMA.
3. Buatlah file prog12.sh yang berisi konstruksi for dan wildcard, program ini akan menampilkan nama file yang berada di current direktori
$ vi prog12.sh#!/bin/sh# Prog: prog12.shfor F in *doecho $Fdone
Hasil :
Percobaan di atas merupakan perintah konstruksi dor-do-done. Shell script prog12.sh ini berisi konstruksi for dan wild card. Program ini akan menampilkan nama file yang berada pada current directory.
4. Jalankan program prog12.sh
$ . prog12.sh
Hasil :
Outputnya berupa isi dari current directory.
5. Modifikasi file prog12.sh, program ini akan menampilkan long list dari file yang mempunyai ekstensi lst
$ vi prog12.sh#!/bin/sh# Prog: prog12.shfor F in *.lstdols –l $Fdone
Hasil :
Program di atas akan menampilkan seluruh data yang berada pada current directory yang mempunyai ekstensi lst.
6. Jalankan program prog12.sh
$ . prog12.sh
Hasil :
Karena pada direktori tidak terdapat file dengan ekstensi lst, sehingga ketika dijalankan, terdapat informasi bahwa “No such file or directory”.
Percobaan 16 : Konstruksi while-do-done
1. Buatlah file prog13.sh
$ vi prog13.sh#!/bin/sh# Prog: prog13.shPILIH=1while [ $PILIH –ne 4 ]doecho “1. Siapa yang aktif”echo “2. Tanggal hari ini”echo “3. Kalender bulan ini”echo “4. Keluar”echo “ Pilihan : \c”
read PILIHif [ $PILIH –eq 4 ]thenbreakficleardoneecho “Program berlanjut di sini setelah break”
Hasil :
Membuat prog13.sh dengan editor vi. Program di atas memiliki konstruksi while do done. Yang mana jika program dijalankan, akan menunjukkan perulangan. Jika program dipilih 1/2/3, maka program akan terjadi looping. Namun ketika diinputkan angka 4, maka program akan berhenti.
2. Jalankan program prog13.sh
$ . prog13.sh
Hasil :
Saat program dijalankan, maka akan muncul tampilan seperti pada gambar. Ketika saya menginputkan angka 2, maka program akan me-looping. Namun ketika menginputkan angka 4, maka program akan berhenti dan mencetak “Program berlanjut di sini setelah break”.
Percobaan 17 : Instruksi Dummy
1. Modifikasi file prog13.sh
$ vi prog13.sh#!/bin/sh# Prog: prog13.shPILIH=1while :doecho “1. Siapa yang aktif”echo “2. Tanggal hari ini”echo “3. Kalender bulan ini”echo “4. Keluar”echo “ Pilihan : \c”read PILIHif [ $PILIH –eq 4 ]thenbreakficleardoneecho “Program berlanjut di sini setelah break”
Hasil :
Gambar di atas merupakan modifikasi prog13.sh dengan menambahkan notasi [ $PILIH -eq 4 ] dalam penulisan while.
2. Jalankan program prog13.sh
$ . prog13.sh
Hasil :
Outputnya sama seperti nomor sebelumnya walaupun terdapat modifikasi di dalam penulisan program.
3. Buatlah file prog14.sh yang berisi instruksi dummy untuk konstruksi if
$ vi prog14.sh#!/bin/sh# Prog: prog14.shecho –n “Masukkan nilai : “read Aif [ $A –gt 100 ]then:elseecho “OK !”fi
Hasil :
Pada program ini termasuk program dummy yang mana variabel A dinyatakan sebagai nilai -gt 100. Kemudian setelah nilai dimasukkan akan mencetak OK.
4. Jalankan program prog14.sh beberapa kali dengan input yang berbeda
$ . prog14.sh
Hasil :
Pada program ini kita telah membatasi nilai dengan 1-100. Sehingga saat kita menginputkan nilai antara 1-100, maka program akan mencetak OK. Tetapi saat kita menginputkan dengan nilai lebih dari 100, maka program tidak mencetak “OK” dan langsung berhenti.
Percobaan 18 : Fungsi
1. Buatlah file fungsi.sh
$ vi fungsi.sh#!/bin/sh# Prog: fungsi.shF1( ) {echo “Fungsi F1”return 1}echo “Menggunakan Fungsi”F1F1echo $?
Hasil :
Analisa :
Pada program ini berisi fungsi untuk return 1 yaitu echo “Fungsi F1” dan juga menampilkan status exit.
2. Jalankan program fungsi.sh
$ . fungsi.sh
Hasil :
Pada program ini saat dijalankan hasilnya seperti pada gambar. Yaitu pertama mencetak fungsi F1, kemudian di return kembali sehingga mencetak lagi Fungsi F1, dan status exitnya menjadi 1 karena FALSE.
3. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh
$ vi fungsi.sh#!/bin/sh# Prog: fungsi.shF1( ){Honor=10000echo “Fungsi F1”return 1}echo “Menggunakan Fungsi”F1F1echo “Nilai balik adalah $?”echo “Honor = $Honor”
Hasil :
Program di atas adalah modifikasi file fungsi.sh menggunakan variabel pada fungsi.
4. Jalankan program fungsi.sh
$ . fungsi.sh
Hasil :
Tambahan pada modifikasi ini hanya penambahan variabel Honor yang diberi nilai 10000 dan nilai balik yang diambil dari status exit.
5. Menggunakan variable pada fungsi dengan memodifikasi file fungsi.sh
$ vi fungsi.sh#!/bin/sh# Prog: fungsi.shF1( ) {local Honor=10000echo “Fungsi F1”return 1}echo “Menggunakan Fungsi”F1F1echo “Nilai balik adalah $?”echo “Honor = $Honor”
Hasil :
Pada program ini, variabel honor dijadikan variabel local. Maksudnya hanya dapat dibaca di dalam fungsi F1, sehingga nantinya tidak terbaca pada program echo “Honor = $ Honor”.
6. Jalankan program fungsi.sh
$ . fungsi.sh
Hasil :
Outputnya sama seperti pada nomor sebelumnya.
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 tida k 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
#!/bin/sh# file: salin.sh# Usage: salin.sh fasal ftujuanif [ $# -ne 2]thenecho “Error, usage: salin.sh file-asal file-tujuan”exit –1fifasal=$1ftujuan=$2echo “salin.sh $fasal $ftujuan”…………
Hasil :
Analisa :
Pada program penggunaan if else digunakan untuk membuat percabangan. Opsi -f digunakan untuk mengecek apakah yang diinputkan berupa file, sedangkan opsi -d digunakan untuk mengecek apakah yang diinputkan berupa direktori. Sebelumnya, kita membuat file baru menggunakan perintah cat, sehingga ketika dicek menggunakan perintah ls, maka file.txt dan file2.txt sudah masuk ke direktori. Ketika dieksekusi, test.txt dan test2.txt program mencetak salin gagal karena dua file tersebut belum pernah dibuat. Sedangkan jika file tujuan belum dibuat, dan ingin dicopy, maka program akan mencetak salin.sh file2.txt coba.txt. Ketika ingin mengcopy ke direktori, maka program akan mencetak “Tidak dapat mengcopy ke directory”. Namun jika file sudah ada, maka program akan mencetak “File sudah ada? Apakah file akan dihapus?(y/n)”.
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.
#!/bin/sh# file: checkdir.sh# Usage: checkdir.sh DirectoryName#if [ $# -ne 1]thenecho “Error, usage: checkdir.sh DirectoryName”exit 1fi[ … ] && …
Hasil :
Analisa :
Maksud dari [ -d $ dir ] && ls -ld $dir adalah pertama akan di cek apakah termasuk direktori atau tidak. Dan jika yang dimasukkan merupakan direktori, maka akan dilakukan perintah ls -ld.
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 jutaPPH = 15% * 8 jutaGaji 12 jutaPPH =15% * 10 juta + 25% * (12-10) jutaGaji 60 jutaPPH = 15% * 10 juta + 25% * 25 juta + 25% * (60-10-25) juta
Debugging : untuk melakukan tracing (debug) gunakan opsi –x pada eksekusi shell.
$ sh –x pph.sh+ echo –n ‘Berikan gaji dalam ribuan rupiah : ‘Berikan gaji dalam ribuan rupiah : + read gaji20000+ 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
Hasil :
Analisa :
Debugging pada program ini agak berbeda namun hasilnya sama. Hal ini dikarenakan model atau cara penulisannya yang berbeda, yaitu dengan penggunaan ekspresi pada saat memasukkan rumus menggunakan group operator. Dari hasil, akan muncul sebuah input untuk memasukkan nilai gaji dan outputnya berupa jumlah PPH gaji dari input data yang diinputkan. Fungsi -le adalah less than or equal.
4. Buatlah program myprog.sh yang memproses parameter $1, nilai parameter harus berupa string :
start
stop
status
restart
reload
Bila buka dari string tersebut, maka berikan pesan error. Sempurnakan program di bawah ini untuk keperluan tersebut.
#!/bin/sh# See how we were calledcase “$1” instart)echo “Ini adalah start”;;stop)echo “Ini adalah stop”;;*)echo $”Usage:$0 {start|stop|restart|reload|status}”;;
esacreturn
Hasil :
Analisa :
Pada program di atas, membuat program berkonstruktor switch-case dimana casenya adalah start, stop, status, restart, dan reload dengan variabelnya adalah $1. Jika program dijalankan, maka program akan menampilkan echo pada case stringnya.
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.
#!/bin/sh# Confirm whether we really want to run this serviceconfirm() {local YES=”Y”local NO=”N”local CONT=”C”while :doecho –n “(Y)es/(N)o/(C)ontinue? {Y] “read answer answer=`echo “$answer” | tr ‘[a-z]’ ‘[A-Z]’`if [ “$answer” = “” –0 “$answer” = $YES ]thenreturn 0elif ….thenreturn 2elif ….thenreturn 1fidone}
Test fungsi diatas dengan program berikut :
$ vi testp.sh. confirm.shconfirmif [ $? –eq 0 ]thenecho “Jawaban YES OK”elif [ $? =eq 1 ]thenecho “Jawaban NO”elseecho “Jawaban CONTINUE”fi
Perhatikan baris pertama, adalah loading dari fungsi confirm yang terdapat di script confirm.sh. Setelah eksekusi script tersebut, maka fungsi confirm dapat digunakan.
Hasil :
Analisa :
Confirm.sh adalah sebuah fungi yang akan dipanggil oleh program lain yaitu testp.sh. Ketika dijalankan, program akan meinputkan karakter yang sesuai dengan kondisi pada case esac. Jike memilih N akan melakukan return 1, jika memilih Y maka akan mereturn 0, dan jika memilih C maka akan mereturn 2. Untuk perintah $ answer=`echo “$answer” | tr ‘[a-z]’ ‘[A-Z]’` berfungsi agar jawaban yang disimpan pada variabel answer ditranslate dari [a-z] ke [A-Z] maksudnya dari huruf kecil ke besar.
KESIMPULAN :
Berdasarkan percobaan yang telah dilakukan, dapat diambil kesimpulan bahwa pemrograman shell dengan konstruksi if-else, i-then-else-if, for-do-done, case, dan lainnya dapat melakukan persoalan aritmatika dan programan umum lainnya.
Shell script dibuat dengan editor teks (ASCII editor) dan umumnya diberikan ekstensi “.sh”. Variable shell adalah variable yang dapat mempunyai nilai berupa nilai String. Variable harus dimulai dengan alfabet, disusul dengan alfanumerik dan karakter lain. Variabel dapat ditulis dalam huruf kecil atau huruf besar atau campuran keduanya. Nilai variable dapat diisi melalui keyboard (stdin) dengan instruksi read. Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi.
Ekspresi terdiri dari factor dan operator yang dipisahkan oleh spasi. Hasil test akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasil adalah <> 0.
DAFTAR PUSTAKA :









































Komentar
Posting Komentar