Praktikum6-A
Pemrograman Shell
POKOK BAHASAN:
- PemrogramanShell
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.
DASAR TEORI:
1 SHELL SCRIPT
Shell script dibuat dengan editor teks (ASCII editor) dan umumnya diberikanekstensi “.sh”. Script selalu diawali dengan komentar, yang dimulai dengan tanda #,disambung dengan ! dan nama shell yang digunakan.#!/bin/sh # Program shell .#var1=x .var2=8 Awal dari program shell, komentar awal ini akan dibaca oleh system, kemudiansystem mengaktifkan program shell (/bin/sh) yang tertera di situ. Program shelldapat dipilih, misalnya /bin/csh, /bin/ksh dan lainnya. Adalah komentar, sebagai dokumentasi, baris ini akan diabaikan oleh programshell. Penggunaan variable (assignment), tidak boleh ada spasi di antara nama variabledan konstanta
2 VARIABEL
Variable shell adalah variable
yang dapat mempunyai nilai berupa nilai String.
Tata penulisan variable adalah sebagai berikut :nama_var = nilai_varVariable harus dimulai dengan alfabet, disusul dengan alfanumerik dan karakterlain. Variabel dapat ditulis dalam huruf kecil atau huruf besar atau campuran keduanya.Shell membedakan huruf besar dan huruf kecil (case sensitive), contoh :VPT=polteki=5Pemberian nilai variable tidak boleh dipisahkan dengan spasi, karena shell akanmenganggap pemisahan tersebut sebagai parameter, contoh :VPT =poltek ##errorVPT= poltek ##errorUntuk melihat nilai/isi dari sebuah variable, gunakan tanda $ di depan namavariable tersebut. Pada shell, instruksi echo dapat menampilkan isi variable tersebut,contoh :VPT=poltekecho $VPTGaji=450000echo $Gajiecho $VPT $GajiBila menggunakan string yang terdiri dari lebih dari satu kata, maka stringtersebut harus berada dalam tanda kutip atau apostrof, contoh :VPT=poltekVPT2=”poltek elektronika ITS”3 MEMBACA KEYBOARDNilai variable dapat diisi melalui keyboard (stdin) dengan instruksi read.4 PARAMETERSebuah program shell dapat mempunyai parameter sebanyak 9 buah dandirepresentasikan melalui variable khusus yaitu variable $!, $2, $3, $4, $5, $6, $7, $8dan $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 / argumensebuah script ($@ mempunyai arti yang sama). $$ menyatakan nomor proses id (pid)dari script yang dijalankan. Pid ini akan terus berubah (umumnya) menaik, setiap kaliproses berjalan.5 STATUS EXITSetiap program setelah selesai dieksekusi akan memberikan informasi melaluivariable spesial $?. Indikasi yang diberikan adalah :o Bila program berakhir dengan sukses, $? = 0o Bila program berakhir dengan error, $? ¹ 0Nilai dari status exit dapat dilihat melalui instruksi echo $?
6 KONSTRUKSI IF
if akan mengeksekusi instruksi-awal, dan exit status dari instruksi tersebut akanmenjadi kondisi. Bila 0, maka instruksi selanjutnyua masuk ke dalam blok then. Bilatidak 0, maka alur program diteruskan setelah kunci kata fi.if instruksi-awaltheninstruksi1instruksi2………………fi7 KONSTRUKSI IF THEN ELSEBila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelahelse akan dijalankan.8 INSTRUKSI TESTInstruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi.Ekspresi terdiri dari factor dan operator yang dipisahkan oleh spasi. Hasil test akanmemberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasiladalah ¹ 0.· Operator untuk test
Operator 0 atau
TRUE, jika
string1 = string2string1 != string2-n string-z stringIdenticalNot identicalString is not nullString is null· Test untuk files dan directoryTest dapat dilakukan untuk memeriksa apakah file ada (Exist), dapat dibaca, dapatditulis, kosong dan lainnya.
Operator 0 atau
TRUE, jika
-f namafile-d namafile-r namafileFile ada, file biasaFile ada, file adalah direktoriFile dapat dibacaif instruksi1theninstruksi1.1instruksi1.2………………elseinstruksi2.1instruksi2.2………………fi-w namafile-x namafile-s namafile-w namafileFile dapat ditulisFile adalah executableFile ada dan tidak kosongFile dapat ditulisUntuk memudahkan pembacaan (readability), test dapat ditulis dengan[ ekspresi ][ sebenarnya adalah nama lain dari test, bedanya [ akan mencari kurungpenutup ] pada akhir ekspresi yang harus dipisahkan oleh spasi.
9 LOGICAL && DAN || (SHELL LEVEL)
Notasi && dan || digunakan untuk menggabungkan instruksi shell sebagaialternatif untuk if then else. Notasi && dan || sering ditemukan dalah shell scriptsystem administrator untuk menjalankan routine dari system operasi.· instruksi1 && instruksi2shell akan mengeksekusi instruksi1, dan bila exit status instruksi1 adalahFALSE, maka hasil dari AND tersebut sudah pasti sama dengan FALSE, sehinggainstruksi2 tidak mempunyai pengaruh lagi. Oleh karena itu, instruksi2tidak dijalankan. Sebaliknya bila hasil instruksi1 adalah TRUE(0), makainstruksi2 dijalankan· instruksi1 || instruksi2shell akan menge ksekusi instruksi1, bila exit status adalah TRUE(0), hasil darioperasi OR tersebut sudah pasti menghasilkan TRUE, terlepas dari hasil eksekusiinstruksi2. Oleh karena itu instruksi2 tidak perlu dijalankan. Bila hasilinstruksi1 adalah FALSE, maka instruksi2 akan dijalankan.
10 OPERATOR BILANGAN BULAT UNTUK TEST
Untuk membandingkan 2 buah bilangan, test memerlukan operator yangberbeda dengan string.
Operator 0 atau
TRUE, jika
i1 –eq i2i1 –ge i2i1 –gt i2i1 –le i2i1 –lt i2i1 –ne i2Bilangan samaLebih besar atau sama denganLebih besarLebih kecil atau sama denganLebih kecilBilangan tidak sama
11 OPERATOR LOGICAL (TEST LEVEL)
Logical operator terdiri dari AND, OR dan NOT. Operator ini menggabungkanhasil ekspresi sebagai berikut :NOT : symbol !!True FalseFalse TrueAND : symbol -aV1 V2 V1 –a V2False False FalseFalse True FalseTrue False FalseTrue True TrueOR : symbol -oV1 V2 V1 –o V2False False FalseFalse True TrueTrue False TrueTrue True True12 KONSTRUKSI IF THEN ELSE IFBila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelahelse akan dijalankan.13 HITUNGAN ARITMETIKATipe dari variable SHELL hanya satu yaitu STRING. Tidak ada tipe lainseperti Numerik, Floating, Boolean ata u lainnya. Akibatnya variable ini tidak dapatmembuat perhitungan aritmetika, misalnya :A=5B=$A +1 ## errorUNIX menyediakan utilitas yang bernama expr yaitu suatu utilitas yangmelakukan aritmetika sederhana.14 INSTRUKSI EXITProgram dapat dihentikan (terminated/selesai) dengan instruksi exit. Sebagainilai default program tersebut akan memberikan status exit 0.if instruksi1theninstruksi1.1instruksi1.2………………elif instruksi2theninstruksi2.1instruksi2.2………………elseinstruksi3.1instruksi3.2………………fi
15 KONSTRUKSI CASE
Case digunakan untuk menyederhanakan pemakaian if yang berantai,sehingga dengan case, kondisi dapat dikelompokkan secara lo gis dengan lebihjelas dan mudah untuk ditulis.Case diakhiri denan esac dan pada setiap kelompok instruksi diakhiri dengan ;;. Padaakhir pilihan yaitu *) yang berarti adalah “default”, bila kondisi tidak memenuhi polasebelumnya
16 KONSTRUKSI FOR
For digunakan untuk pengulangan dengan menggunakan var yang padasetiap pengulangan akan diganti dengan nilai yang berada pada daftar (list).case variable inmatch1)instruksi1.1instruksi1.2………………;;match2)instruksi2.1instruksi2.2………………;;*)instruksi3.1instruksi3.2………………;;esacfor var in str1 str2 …..strndoinstruksi1instruksi2………………done
17 KONSTRUKSI WHILE
While digunakan untuk pengulangan instruksi, yang umumnya dibatasi dengansuatu kondisi. Selama kondisi tersebut TRUE, maka pengulangan terus dilakukan.Loop akan berhenti, bila kondisi FALSSE, atau program keluar dari blok while melaluiexit atau break.
18 INSTRUKSI DUMMY
Instruksi dummy adalah instruksi yang tidak melakukan apa -apa, namuninstruksi ini memberikan status exit 0 (TRUE). Oleh karena itu, instruksi dummy dapatdigunakan sebagai kondisi forever pada loop (misalnya while).Simbol instruksi dummy adalah Þ :
19 FUNGSI
Fungsi adalah program yang dapat dipanggil oleh program lainnya denganmenggunakan notasi NamaFungsi(). Fungsi memberikan exit status ($?) yangdinyatakan dengan return nr, atau nilai 0 sebagai default.Membuat fungsi diawali dengan nama fungsi, parameter, kemudian blokprogram 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,while kondisidoinstruksi1instruksi2………………donejangan sampai bentrok dengan nama variable yang sam adi luar fungsi, sehingga tidakterjadi isi variable berubah.TUGAS PENDAHULUAN:Sebagai tugas pendahuluan, bacalah dasar teori diatas kemudian buatlahprogram Shell untuk Latihan 1 sampai dengan 5.PERCOBAAN:1. Login sebagai user.2. Bukalah Console Terminal dan lakukan percobaan-percobaan di bawah inikemudian analisa hasil percobaan.3. Selesaikan soal-soal latihan.Percobaan 1 : Membuat shell scriptPercobaan 2 : Variabel1. Buatlah file prog01.sh dengan editor vi$ vi prog01.sh#!/bin/sh# Program shell#var1=xvar2=82. Untuk menjalankan shell, gunakan notasi TITIK di depan nama program$ . prog01.sh3. Untuk menjalankan shell, dapat juga dengan membuat executable file dandieksekusi relatif dari current directory$ chmod +x prog01.sh$ ./prog01.sh1. Contoh menggunakan variable pada shell interaktif$ VPT=poltek$ echo $VPT2. Pemisahan 2 kata dengan spasi menandakan eksekusi 2 buah instruksi.Karakter $ harus ada pada awal nama variable untuk melihat isi variabletersebut, jika tidak, maka echo akan mengambil parameter tersebut sebagaistring.$ VPT2=poltek elektronika (Terdapat pesan error)$ VPT2=”poltek elektronika”$ echo VPT2$ echo $VPT23. Menggabungkan dua variable atau lebih$ V1=poltek$ V2=’:’$ V3=elektronika$ V4=$V1$V2$V3$ echo $V44. Menggabungkan isi variable dengan string yang lain. Jika digabungkandengan nama variable ya ng belum didefinisikan (kosong) maka instruksi echomenghasilkan string kosong. Untuk menghindari kekeliruan, nama variableperlu diproteksi dengan { } dan kemudian isi variable tersebut digabungdengan string.$ echo $V3$ echo $V3ITS$ echo ${V3}ITS5. Variabel dapat berisi instruksi, yang kemudian bila dijadikan input untukshell, instruksi tersebut akan dieksekusi$ CMD=who$ $CMD$ CMD=”ls –l”$ $CMD6. Modifikasi file prog01.sh berikut$ vi prog01.sh#!/bin/shV1=poltekV2=’:’V3=elektronikaecho “Pemrograman shell”echo $V1$V2$V3V3=ITSecho $V1$V2 di $V37. Cara sederhana mengeksekusi shell adalah dengan menggunakan notasi titikdi depan nama shell script tersebut. Bila direktori actual tidak terdaftar dalamPATH, maka command tersebut tidak dapat ditemukan. Bila script belumexecutable, script tidak dapat dieksekusi.$ . prog01.sh$ prog01.sh (Terdapat pesan error)$ ./prog01.sh (Terdapat pesan error)$ chmod +x prog01.sh$ ./prog01.shPercobaan 3 : Membaca keyboard1. Menggunakan instruksi read$ read namaamir$ echo $nama2. 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”3. Eksekusi program prog02.sh$ . prog02.shNama Anda :AmirAlamat :Jl semangka 67Kota :SurabayaHasil adalah : Amir, Jl semangka di Surabaya4. Instruksi echo secara otomatis memberikan baris baru, maka untukmenghindari hal tersebut disediakan opsi –n, yang menyatakan kepada echountuk 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”5. Eksekusi program prog02.sh$ . prog02.shNama Anda : AmirAlamat : Jl semangka 67Kota : SurabayaHasil adalah : Amir, Jl semangka di Surabaya6. Variabel kosong adalah variable yang tidak mempunyai nilai. Variabel inididapat atas assignment atau membaca dari keyboard atau variable yangbelum didefinisikan$ read nama<CR>$ echo $nama$ A=$ B=””$ C=$A$B$ echo $C7. Variabel dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi.Pada contoh dibawah , instruksi pwd dieksekusi lebih dahulu dengansepasang Back Quate (tanda kutip terbalik). Hasil dari eksekusi tersebut akanmasuk sebagai nilai variable DIR$ pwd$ DIR=`pwd`$ echo $DIRPercobaan 4 : Parameter1. 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”2. Eksekusi prog04.sh tanpa parameter, dengan 2 parameter, dengan 4parameter$ . prog04.sh$ . prog04.sh amir hasan$ . prog04.sh amir hasan badu ali8. 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 $tanggal9. Eksekusi prog03.sh$ . prog03.sh3. Membuat shell script prog04.sh versi 2 dengan memberikan jumlahparameter$ 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”4. Eksekusi prog04.sh tanpa parameter dan dengan 4 parameter$ . prog04.sh$ . prog04.sh amir hasan badu ali5. Membuat shell script prog04.sh versi 3 dengan menambahkan totalparameter 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 $$”6. Eksekusi prog04.sh dengan 4 parameter$ . prog04.sh amir hasan badu aliPercobaan 5 : Status ExitPercobaan 6 : Konstruksi if1. Instruksi dengan exit status 0$ who$ who | grep <user>$ echo $?2. If membandingkan exit status dengan 0, bila sama, maka blok program masukke dalam blok then-fi$ if [ $? = 0 ]> then> echo “Pemakai tersebut sedang aktif”> fi3. Nomor (1) dan (2) diatas dapat disederhanakan dengan$ if who|grep <user> >/dev/null> then> echo okay> fi1. String tidak diketemukan, maka status exit adalah 1$ grep xyz /etc/passwd$ echo $?2. String diketemukan, maka status exit adalah 0$ grep <user> /etc/passwd$ echo $?Percobaan 7 : Konstruksi if then else1. Membuat shell script prog05.sh$ vi prog05.sh#!/bin/sh# prog05.sh# Program akan memberikankonfirmasi 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”fi2. Jalankan prog05.sh, masukkan nama pemakai yang aktif yang tampil padainstruksi who dan coba juga untuk nama pemakai yang tidak aktif$ who
$ . prog05.sh [nama=<user>]$ . prog05.sh [nama=studentOS]
0 komentar:
Posting Komentar