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.

ü

TEORI SINGKAT:

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.

 

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=poltek

i=5

Pemberian nilai variable tidak boleh dipisahkan dengan spasi, karena shell akan menganggap pemisahan tersebut sebagai parameter, contoh:

VPT =poltek ##error

VPT= 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=poltek

echo $VPT

 

Gaji=450000

echo $Gaji

echo $VPT $Gaji

Bila menggunakan string yang terdiri dari lebih dari satu kata, maka string tersebut harus berada dalam tanda kutip atau apostrof, contoh:

VPT=poltek

VPT2=“poltek 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

Nilai dari status exit dapat dilihat melalui instruksi echo $?

 

6.      KONSTRUKSI IF


if akan mengeksekusi instruksi-awal, 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 faktor 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.

·         Operator untuk test

Operator

0 atau TRUE, jika

string1 = string2

Identical

string1 != string2

Not identical

-n string

String is not null

-z string

String is null

 

·         Test untuk files dan directory

Test dapat dilakukan untuk memeriksa apakah file ada (Exist), dapat dibaca, dapat ditulis, kosong dan lainnya.

Operator

0 atau TRUE, jika

-f namafile

File ada, file biasa

-d namafile

File ada, file adalah direktori

-r namafile

File dapat dibaca

-w namafile

File dapat ditulis

-x namafile

File adalah executable

-s namafile

File ada dan tidak kosong

-w namafile

File dapat ditulis

 

Untuk memudahkan pembacaan (readability), test dapat ditulis dengan

[ ekspresi ]

[ 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 adalah 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 karena itu, instruksi2 tidak dijalankan. Sebaliknya bila hasil instruksi1 adalah TRUE(0), maka instruksi2 dijalankan.

·         instruksi1 || instruksi2

Shell akan mengeksekusi instruksi1, 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.

 

10.  OPERATOR BILANGAN BULAT UNTUK TEST

Untuk membandingkan 2 buah  bilangan,  test  memerlukan  operator  yang berbeda dengan string.

Operator

0 atau TRUE, jika

i1 -eq i2

Bilangan sama

i1 -ge i2

Lebih besar atau sama dengan

i1 -gt i2

Lebih besar

i1 -le i2

Lebih kecil atau sama dengan

i1 -lt i2

Lebih kecil

i1 -ne i2

Bilangan tidak sama

 

11.  OPERATOR LOGICAL (TEST LEVEL)

Logical operator terdiri dari AND, OR dan NOT. Operator ini menggabungkan hasil ekspresi sebagai berikut :

NOT: symbol !

 

 

!

True

False

False

True

 

AND: symbol -a

 

V1

V2

V1 –a V2

False

False

False

False

True

False

True

False

False

True

True

True

OR: symbol -o

 

V1

V2

V1 –o V2

False

False

False

False

True

True

True

False

True

True

True

True



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 ata u 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 lo gis dengan lebih jelas dan mudah untuk ditulis.

Case diakhiri denan 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 FALSE, 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 sam adi 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.

 

PERCOBAAN:

1.      Login sebagai user.

2.      Bukalah Console Terminal dan lakukan percobaan-percobaan di bawah ini kemudian analisa hasil percobaan.

3.      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=x var2=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: Variabel

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=poltek negeri Jakarta (Terdapat pesan error)

$ VPT2=”poltek 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=poltek

$ V2=’:’

$ V3=jakarta

$ 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 $V3ITS

$ echo ${V3}ITS

Hasil:


Analisa:

Sebelumnya, variabel V3 sudah mempunyai instruksi berupa jakarta. Perintah echo $V3ITS 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 “ITS”, variabel V3 harus diproteksi dengan {} dan digabungkan dengan string. Sehingga ketika dijalankan, outputnya menjadi jakartaITS.

 

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/sh

V1=poltek

V2=’:’

V3=jakarta

echo “Pemrograman shell”

echo $V1$V2$V3

V3=ITS

echo $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 poltek, V2 yang berisi :, dan V3 yang berisi jakarta. Kemudian kita menggabungkan ketika variabel tersebut sehingga mencetak “poltek : jakarta”. Kemudian kita membuat lagi variabel V3 yang berisi ITS. Kemudian kita menggabungkan variabel V1, V2, dan ditambah $V3 baru. Sehingga terakhir kita akan mencetak “poltek: di ITS”.

 

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 nama

amir

$ 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 alamat

 

echo “Nama Anda :

read nama

echo “Alamat :

read alamat

echo “Kota : “

read kota

 

echo

echo “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.sh

Nama Anda :

Amir

Alamat :

Jl Margonda 67

Kota :

Depok

 

Hasil adalah : Amir, Jl Margonda di Depok

Hasil:


Analisa:

Setelah program dieksekusi, outputnya seperti pada gambar diatas, dimana inputnya diketik sendiri lalu hasilnya berupa “Amir, Jl Margonda 67 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 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”

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

Nama Anda :   Amir Alamat : Jl Margonda 67 Kota : Depok

 

Hasil adalah : Amir, Jl Margonda 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 $NAMA tanggal=`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 egypt dan output dari data | cut -c1-10 adalah Rab 04 Nov.

 

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 egypt di dalam output perintah who. Dan saat dicek status exitnya, terdeteksi bahwa status exitnya adalah 0  sehingga kata egpyt 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 egypt 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 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

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 egypt, maka program akan mencetak “egypt sedang aktif”. Sebaliknya, jika kita menginputkan user yang tidak aktif, contohnya ani, maka program mencetak “ani 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.sh

echo –n “NAMA = “

read NAMA

if test “$NAMA” = amir

then

echo “Selamat Datang $NAMA”

else

echo “Anda bukan amir, sorry!”

fi

Hasil:



Analisa:

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

echo –n “NAMA = “

read NAMA

if [ “$NAMA” = amir ]

then

echo “Selamat Datang $NAMA”

else

echo “Anda bukan amir, sorry!”

fi

Hasil:



Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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:


Analisa:

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

echo –n “INCOME = “

read INCOME

if [ $INCOME –ge 0 –a $INCOME –le 10000 ]

then

BIAYA=10

elif [ $INCOME –gt 10000 –a $INCOME –le 25000 ]

then

BIAYA=25

else

BIAYA=35

fi

echo “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:


Analisa:

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:

a.       Dipisahkan oleh ruang disetiap item

b.      Digunakan backslash untuk shell tertentu.

c.       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:


Analisa:

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/sh

if [ -f prog01.sh ]

then

exit 3

else

exit –1

fi

Hasil:



Analisa:

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:


 

(menutup terminal secara otomatis)


Analisa:

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

 

echo “1. Siapa yang aktif”

echo “2. Tanggal hari ini”

echo “3. Kalender bulan ini”

echo –n “   Pilihan : “

read PILIH

case $PILIH in

1)

echo “Yang aktif saat ini”

who

;;

2)

echo “Tanggal hari ini”

date

;;

3)

echo “Kalender bulan ini”

cal

;;

*)

echo “Salah pilih !!”

;;

esac

Hasil:



Analisa:

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:


Analisa:

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

 

echo –n “Jawab (Y/T) :

read JWB

 

case $JWB in

y | Y | ya |Ya |YA ) JWB=y ;;

t | T | tidak | Tidak | TIDAK ) JWB=t ;;

esac

Hasil:



Analisa:

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:


Analisa:

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

 

echo –n “Jawab (Y/T) : \c“

read JWB

 

case $JWB in

[yY] | [yY][aA]  ) JWB=y ;;

[tT] | [tT]idak  ) JWB=t ;;

   *) JWB=? ;;

esac

Hasil:



Analisa:

Program di atas merupakan cara lain dalam penulisan case.

 

6.      Jalankan program prog10.sh, cobalah beberapa kali dengan inputan yang berbeda

  $ . prog10.sh

Hasil:


Analisa:

Outputnya sama dengan program nomor sebelumnya.

 

Percobaan 15: Konstruksi for-do-done

1.      Buatlah file prog11.sh

$ vi prog11.sh

#!/bin/sh

# Prog: prog11.sh

 

for NAMA in bambang harry kadir amir

do

echo “Nama adalah : $NAMA”

done

Hasil:



Analisa:

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:


Analisa:

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

 

for F in *

do

echo $F

done

Hasil:



Analisa:

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:


Analisa:

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

 

for F in *.lst

do

ls –l $F

done

Hasil:



Analisa:

Program di atas akan menampilkan seluruh data yang berada pada current directory yang mempunyai ekstensi lst.

 

6.      Jalankan program prog12.sh

$ . prog12.sh

Hasil:


Analisa:

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

 

PILIH=1

while [ $PILIH –ne 4 ]

do

echo “1. Siapa yang aktif”

echo “2. Tanggal hari ini”

echo “3. Kalender bulan ini”

echo “4. Keluar”

echo “  Pilihan : \c”

read PILIH

if [ $PILIH –eq 4 ]

then

break

fi

clear

done

echo “Program berlanjut di sini setelah break”

Hasil:



Analisa:

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:



Analisa:

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

PILIH=1

while :

do

echo “1. Siapa yang aktif”

echo “2. Tanggal hari ini”

echo “3. Kalender bulan ini”

echo “4. Keluar”

echo “     Pilihan : \c”

read PILIH

if [ $PILIH –eq 4 ]

then

break

fi

clear

done

echo “Program berlanjut di sini setelah break”

Hasil:



Analisa:

Gambar di atas merupakan modifikasi prog13.sh dengan menambahkan notasi [ $PILIH -eq 4 ] dalam penulisan while.

 

2.      Jalankan program prog13.sh

$ . prog13.sh

Hasil:



Analisa:

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

 

echo –n “Masukkan nilai : “

read A

if [ $A –gt 100 ]

then

:

else

echo “OK !”

fi

Hasil:



Analisa:

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:


Analisa:

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

 

F1( ) {

echo “Fungsi F1”

return 1

}

echo “Menggunakan Fungsi” F1

F1

echo $?

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:


Analisa:

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

 

F1( )

{

Honor=10000

echo “Fungsi F1”

return 1

}

 

echo “Menggunakan Fungsi”

F1

F1

echo “Nilai balik adalah $?”

echo “Honor = $Honor”

Hasil:



Analisa:

Program di atas adalah modifikasi file fungsi.sh menggunakan variabel pada fungsi.

 

4.      Jalankan program fungsi.sh

$ . fungsi.sh

Hasil:


Analisa:

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

 

F1( )

{

local Honor=10000

echo “Fungsi F1”

return 1

}

 

echo “Menggunakan Fungsi”

F1

F1

echo “Nilai balik adalah $?”

echo “Honor = $Honor”

Hasil:



Analisa:

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:

Analisa:

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 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”

……

……

Hasil:




Buat file baru



Eksekusi:


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]

then

echo “Error, usage: checkdir.sh DirectoryName”

exit 1

fi

[ … ] && …

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

$ sh –x pph.sh

+ 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

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 called

case “$1” in

start)

echo “Ini adalah start”

;;

stop)

echo “Ini adalah stop”

;;

*)

echo $”Usage:$0 {start|stop|restart|reload|status}”

;;

esac

return

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 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 :

$ vi testp.sh

. confirm.sh

confirm

if [ $? –eq 0 ]

then

echo “Jawaban YES OK”

elif [ $? =eq 1 ]

then

echo “Jawaban NO”

else

echo “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:

Putra, F. A. (2018, Maret 22). Laporan Praktikum Sistem Operasi. Retrieved from Academia: https://www.academia.edu/38944539/LAPORAN_PRAKTIKUM_SISTEM_OPERASI

Putra, F. A. (2018, Maret 22). LAPORAN PRAKTIKUM SISTEM OPERASI. Retrieved from Academia: https://www.academia.edu/38944540/LAPORAN_PRAKTIKUM_SISTEM_OPERASI

 

 

Komentar

Postingan populer dari blog ini

Praktikum 8. Sistem File

Praktikum 11. Manajemen User dan Group

Praktikum 7. Unix System Call dan Manajemen Memory