PRAKTIKUM VI I. Judul Dasar Pemrograman Shell BASH (Fundamental III) II. Tujuan 1. Mengerti mengenai aritmetika dalam Shell BASH 2. Mengerti array dalam lingkungan Shell BASH 3. Memahami pembacaan masukan dari user III. Dasar Teori 3.1 Pembacaan masukan dari user 3.1.1 Variabel (review) Pada praktikum sebelum telah dibahas mengenai deklarasi sebua variabel dan bagaimana memberikan nilai ke dalam variabel tersebut. Seperti telah dijelaskan pula bahwa ada dua kelompok varibel dalam lingkungan Shell BASH yaitu, variabel environment dan variabel lokal. Sebagai gambaran, variabel environment adalah variabel yang merupakan bawaan dari Shell BASH itu sendiri, kelompok variabel ini secara default berisi definisi-definisi environment seperti PATH, USER, LOGNAME dll. Sifat dari varibel environment ini adalah global atau berlaku disemua Shell dan SubShell. Berikut contoh mekanisme untuk membuat sebuah variabel environment baru dan menjadikan variabel tersebut bersifat global. $ nama= john atau bisa juga dengan declare nama= john $ export NAME= john $ echo $nama $NAME Keterangan : 1. Baris pertama mendefinisikan sebuah variabel lokal dengan identitas nama 2. Mendefinisikan variabel global dengan identitas NAME 3. Mengektraksi masing-masing nilai dari variabel nama dan NAME 3.1.2 Read (perintah membaca input dari user) perintah Read merupakan perintah yang termasuk dalam kelompok buil-in command shell. Perintah ini berfungsi untuk membaca masukan dari user melalui perantara keyboard. Jika tidak ada opsi maka perintah ini akan membaca masukan yang diberikan oleh user tanpa memilah-milah terlebih dahulu. Batas pembacaan masukan adalah ketika mulai baris baru yang ditandai dengan penekanan tombol enter oleh user. Berikut ini adalah format penggunaan perintah read beserta opsi yang dapat digunakan dalam penulisan skrip BASH Shell.
Tabel 3.1 Format perintah Read Format Deskripsi read jawaban Membaca satu baris masukan dari standard input dan disubstitusikan ke variabel jawaban read awal akhir Membaca satu baris input dan dipisahkan berdasarkan spasi, masukan pertama disubtitusikan ke variabel awal, dan masukan kedua disubtitusikan ke variabel akhir read Membaca satu baris masukan dan disubtitusikan ke variabel built-in yang bernama REPLY. read a nama_array Membaca daftar kata dari masukan dan mensubtitusikan ke dalam variabel array nama_array. read e Digunakan di shell intereraktif read p prompt Menampilkan prompt, menunggun masukan, dan mensubtitusikan masukan ke dalam variabel REPLY read r line Memperbolehkan adanya karakter backslash pada masukan yang diberikan. Contoh penggunaan perintah read : #nama skrip : coba echo e apakah kamu senang : read hasil echo anda menjawab $hasil echo siapa nama lengkap kamu? read n_awal n_tengah n_akhir echo nama lengkap kamu adalah $n_awal $n_tengah $n_akhir echo nama awal kamu adalah $n_awal output program adalah : $./coba apakah kamu senang : ya anda menjawab ya siapa nama lengkap kamu? rudi hadi suwarno nama lengkap kamu adalah rudi hadi suwarno nama awal kamu adalah rudi 3.2 Array Pada versi BASH 2.x terdapat fungsi untuk mendefinisikan array satu dimensi. Array memungkinkan seorang programmer mengkoleksi daftar beberapa nilai dalam sebuah variabel. Untuk mengektraksi kembali nilai-nilai tersebut dapat dilakukan dengan menyebutkan nama varibel yang diikuti oleh nomer indek array tersebut. Pendefinisian sebuah array juga bisa dilakukan on the fly(tanpa mendefinisikan terlebih dahulu). Dan tidak ada batasan maksimum dari sebuah array yang dibuat dalam lingkungan BASH Shell. Pada saat sebuah nilai diberikan ke dalam sebuah array yang telah didefinisikan, indek array secara otomatis akan dimulai dari 0, dan bertambah naik 1 sampai semua kumpulan nilai-nilai dimasukkan.
Contoh deklarasi array : $ declare a nomor=(45 50 23) $ nama=(andi hafid intan) $ kota=(surabaya medan jakarta) x[0]=7 x[4]=400 contoh lain : $ declare a nama $ nama=(luky ani arman) $ echo ${nama[1]} ani $ echo ${nama[2]} arman $ echo berikut ini nama teman-temanku ${nama[*]} berikut ini nama teman-temanku luky ani arman $ echo jumlah total indek array adalah ${#nama[*]} jumlah total indek adalah 3 $ unset nama Keterangan : 1. Mendeklrasikan variabel array nama 2. Memasukkan nilai ke dalam array nama 3. Menampilkan isi dari array indek ke 1 4. Menampilkan isi dari array indek ke 2 5. Menampilkan semua isi array nama 6. Menampilkan jumlah indek total dari array nama 7. Menghapus array nama 3.3 Aritmetika (perintah declare dan let) 3.3.1 Integer Selain untuk mendefinisikan array perintah declare juga digunakan untuk mendefinisikan variabel bertipe integer. Dengan menggunakan opsi i pada penggunaan declare maka sebuah variabel akan didefinisikan sebagai variabel yang bertipe interger. Selain declare perintah let juga dapat digunakan untuk mendefinisikan sebuah variabel bertipe integer. Namun pada dasarnya let lebih ke arah operasi aritmetika. Hal inilah yang menjadi pembeda antara perintah declare dan let. Contoh deklarasi integer : $ declare i num $ num=halo $ echo $num 0 $ num=5 + 5 bash: +: command not found $ num=5+5 $ echo $num 10
$ num=9*8 $ echo $num 72 $ num= 5 + 5 $ echo $num 10 $ num =6.5 bash: num: 6.5 syntax error in expression(remainder of expression is.5 ) contoh perintah let $ i=5 atau let i=5 $ let i=i+1 6 $ let i = i + 2 8 $ let i+=1 9 $ i=3 $ ((i=i+4)) 7 $ ((i=i-2)) 5 3.3.2 Format bilangan Dalam lingkungan Bash Shell pendefinisian sebuah varibel numerik juga mengenal format basis bilangan. Seperti biner atau basis 2, desimal atau basis 10, heksadesimal atau basis 16, oktal atau basis 8. Bentuk pendefinisian dari format bilangan dalam Bash Shell adalah : variabel=basis#numerik bilangan dalam basis terdefinisi contoh : $ n=2#1001 maksudnya adalah basis 2; numeriknya 1001 dalam basis 2 $ echo $n 9 $ declare i x=017 integer yang diawali oleh 0 akan dibaca sebagi bilangan oktal $ echo $x 15
$ x=8#17 $ echo $x 15 $ x=16#b $ echo $x 11 3.3.3 Floating point Floating point atau lebih dikenal dengan bilangan mengambang atau dikenal juga dengan bilangan pecahan. Dalam Bash Shell floating point tidak dapat di definisikan dengan perintah built-in. namun dalam lingkungan Shell untuk proses bilangan pecahan dapat menggunakan utilitas yang ada seperti bc, awk, dan nawk. Utilitas ini sangat berguna karena BASH sendiri tidak support terhadap bilangan pecahan. Contoh : $ n=`echo scale=3; 13 / 2 bc` $ echo $n 6.500 $ produk=`awk v x=2.45 v y=3.123 BEGIN{printf %.2f,x*y} ` $ echo $produk 7.65 IV. Percobaan Petunjuk praktikum 1. Tulis setiap percobaan berikut dalam sebuah file yang diberi nama sesuai dengan percobaannya 2. Gunakan editor VIM 3. Setelah menyimpan dan keluar dari editor VIM gunakan perintah chmod 755 nama_file untuk merubah file menjadi mode executable 4. Lakukan untuk setiap percobaan 5. Laporan sementara adalah hasil observasi beserta output program 4.1 Perintah Read Percobaan 411 echo siapa nama kamu? read nama echo $nama, anda login tanggal `date +%D` echo selamat datang $nama Percobaan 412 echo siapa nama kamu read echo nama kamu adalah $REPLY
Percobaan 413 echo sebutkan tiga nama panggilan dari teman-teman mu [xxx rrrr ssss] read teman1 teman2 teman3 echo nama temanmu yang pertama adalah $teman1 echo nama temanmu yang kedua adalah $teman2 echo nama temanmu yang ketiga adalah $teman3 set $teman1 $teman2 $teman3 echo jumlah teman kamu adalah $# Percobaan 414 read p masukkan nrp kamu dengan format xxxx xxx xxx : echo nomor nrp kamu adalah $REPLY Percobaan 415 echo n masukkan nrp kamu dengan format xxxx xxx xxx : read a nrp echo nomor awal nrp kamu adalah ${nrp[0]} echo kode diploma ${nrp[1]} 4.2 Perintah Declare dan Let Percobaan 421 declare i data data=ardi echo isi variabel data adalah $data data=5 echo sekarang isi data adalah $data echo hasil dari 5 * $data adalah 5*$data data=data*5 echo isi data saat ini $data unset data Percobaan 422 declare i num data hasil num= 6 * 4 echo hasil 6 * 4 adalah $num data=5 hasil=data*num echo hasil $data * $num adalah $hasil unset num data hasil Percobaan 423 declare i data1 data2 hasil read p Masukkan sebuah angka : data1=$reply read p Masukkan angka lagi : data2=$reply hasil=data1/data2 echo hasil dari $data1 / data2 adalah $hasil unset data1 data2 hasil
Percobaan 424 let i=5 echo nilai i adalah $i let i=i+5 echo nilai i saat ini let i = i + 10 echo nilai menjadi $i unset i Percobaan 425 let data1 data2 hasil read p masukkan sebuah angka : data1=$reply read p masukkan sebuah angka lagi : data2=$reply ((hasil=data1-data2)) echo hasil dari $data1 - $data2 adalah $hasil unset data1 data2 hasil Percobaan 426 declare i data data=2#1000111 echo 10001111 sama dengan $data desimal (basis 10) data=8#15 echo 15 oktal sama dengan $data desimal data=16#ff echo ff heksadesimal sama dengan $data desimal nilai=1111 data=2#$nilai echo $nilai basis 2 sama dengan $data basis 10 4.3 Array Percobaan 431 declare a nilai=(jeruk nanas apel semangka) echo isi dari array indek 0 adalah ${nilai[0]} echo isi array ke 1 adalah ${nilai[1]} echo jumlah indek adalah ${#nilai[*]} echo isi array adalah ${nilai[*]} unset nilai Percobaan 432 declare a x=(2 [3]=hai [8]=ali) echo indek ke 0 berisi ${x[0]} echo indek ke 1 berisi ${x[1]} echo indek ke 3 berisi ${x[3]} echo indek ke 8 berisi ${x[8]} echo jumlah total indek adalah ${#x[*]} unset x Percobaan 433 echo Masukkan minimal 3 nama buah-buahan : read a buah echo nama buah-buahannya adalah ${buah[*]} echo jumlah buah yang anda masukkan adalah ${#buah[*]}
Percobaan 434 x[0]=3 x[5]=2 x[2]=4 echo isi array berturut-turut adalah ${x[*]} echo jumlah indeknya adalah ${#x[*]} unset x Percobaan 435 declare ai x x[0]=2 x[2]=3 x[3]=${x[0]}*${x[2]} echo hasil ${x[0]} kali ${x[2]} adalah ${x[3]} echo jumlah indek array adalah ${#x[*]} unset hasil 4.4 Floating point Percobaan 441 hasil=`awk v data=3.45 v data1=5.59 BEGIN{printf %.3f, data+data1} ` echo hasil dari 3.45 + 5.59 adalah $hasil Percobaan 442 read p masukkan sebuah bilang floating point (x.y) : data=$reply read p masukkan lagi bilangan floating point (a.b) : data1=$reply hasil=`awk v nilai1=$data v nilai2=$data1 BEGIN{printf %.3f nilai1*nila2} ` echo hasil kali $data dan $data1 adalah $hasil V. Tugas 1. Buat rangkuman mengenai utilitas awk dan penggunaannya, minimal 1 lembar kertas ukuran A4 dan dikumpulkan bersamaan dengan laporan resmi.