Pemrograman Shell 6A dan 6B

Muhammad Iqbal Tejasumirat                                            FILE : Praktikum 6A dan 6B
BM5A
1803421037
OS Linux

POKOK BAHASAN:
- Pemrograman Shell


TUJUAN BELAJAR
1. Mengetahui dan memahami pemrograman shell pada sistem operasi Linux.
2. Mengetahui dan memahami cara penulisan shell script, variabel dan yang lainnya.
3. Menggunakan perintah-perintah pemrograman shell.
4. Menerapkan pemrograman shell dalam program

.

DASAR TEORI
1. INSTRUKSI TEST
Instruksi test digunakan untuk memeriksa kondisi dari sebuah ekspresi. Ekspresi terdiri dari factori dan operator yang dipisahkan oleh spasi. Hasil test akan memberikan nilai berupa status exit, yaitu 0 bila ekspresi sesuai, bila tidak maka hasilnya adalah tidak sama dengan nol.

Tanda [ sebenarnya adalah nama lain dari test,bedanya [ akan mencari kurung penutup ] pada akhir ekspresi yang harus dipisahkan oleh spasi.


2. LOGICAL && DAN || (SHELL LEVEL)
Notasi && dan || digunakan untuk menggabungkan instruksi shell sebagai alternative dari if then else. Notasi && dan || sering ditemukan pada shell script system administrator untuk menjalankan routine dari system operasi.
- instruksi1 && instruksi2
shell akan mengeksekusi instruksi1, dan bila exit status instruksi1 adalah false, maka hasil dari AND tersebut sudah pasti sama dengan FALSE, sehingga instruksi2 tidak mempunyai pengaruh lagi. Oleh karna itu instruksi2 tidak dijalankan. Sebaliknya bila hasil instruksi1 adalah true/0, maka instruksi2 dijalankan.
- instruksi1 || instruksi2
shell akan mengeksekusi instruksi1, dan bila exit status adalah TRUE(0), hasil dari operasi OR tersebut sudah pasti menghasilkan TRUE, terlepas dari hasil eksekusi instruksi2. Oleh karena itu instruksi2 tidak perlu dijalankan. Bila hasil instruksi1 adalah FALSE, maka instruksi2 akan dijalankan.


3. OPERATOR BILANGAN BULAT UNTUK TEST

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


4. OPERATOR LOGICAL (TEST LEVEL)
Logical operator terdiri dari AND(-a), OR(-o), dan NOT(!). Operator ini menggabungkan hasil ekspresi sebagai berikut :


5. KONSTRUKSI IF THEN ELSE IF

Bila status exit tidak sama dengan 0, maka kondisi menjadi FALSE dan instruksi setelah else akan dijalankan.


6. HITUNGAN ARITMATIKA
Untuk melakukan perhitungan aritmatik, shell tidak memiliki kemampuan built-in, tetapi meminta bantuan program lain yaitu `expr`. Program expr berfungsi untuk mengevaluasi suatu expresi baik itu perbandingan string atau operasi aritmatik sederhana. Operator aritmatik yang disediakan expr antara lain:

Selain digunakan untuk perhitungan aritmatik, perintah `expr` juga cukup handal untuk melakukan manipulasi string, untuk lebih jelas silahkan lihat halaman manual dari expr dengan mengetikkan `man expr`.


7. INSTRUKSI EXIT
Program dapat dihentikan (terminated/selesai) dengan intruksi exit. Sebagai nilai default program tersebut akan memberikan status exit 0.


8. KONSTRUKSI CASE
Case digunakan untuk menyerdehanakan pemakaian if yang berantai, sehingga dengan case, kondisi dapat dikelompokkan secara logis dengan lebih jelas dan mudah untuk ditulis.

Case diakhiri dengan esac dan pada setiap kelompok instruksi diakhiri dengan ;;. Pada akhir pilihan yaitu *) yang berarti adalah “default”, bila kondisi tidak memenuhi pola sebelumnya.


9. KONSTRUKSI FOR
For digunakan untuk perulangan dengan menggunakan variable yang ada pada setiap perulangan akan diganti dengan nilai yang berada pada daftar (list).


10. KONSTRUKSI WHILE
Pernyataan perulangan ini umumnya digunakan untuk melakukan perulangan dengan kondisi tertentu, di mana perulangan akan terus dilakukan dalam blok while selama ekspresi yang menjadi syarat masih dipenuhi (bernilai benar). Untuk ilustrasi, dapat dilihat pada gambar Sedangkan mengenai bentuk dari pernyataan ini adalah:

While digunakan untuk perulangan instruksi, yang umumnya dibatasi dengan sustu kondisi. Selama kondisi tersebut true, maka pengulangan akan terus dilakukan. Loop akan berhenti, bila kondisi false, atau program keluar dari blok while melalui exit atau break.


11. INSTRUKSI DUMMY
Instruksi dummy adalah instruksi yang tidak melakukan apa-apa, namun isntruksi ini memberikan status exit 0 (TRUE). Oleh karna itu, instruksi dummy dapat digunakan sebagai kondisi forever pada loop (misalnya while).
Symbol instruksi dummy adalah =>  :


12. FUNGSI
Hampir sama dengan bahasa pemrograman tingkat tinggi, pada shell script juga dikenal istilah fungsi. Dimana dengan adanya fungsi kita dapat membagi kode kita ke dalam sub-sub yang lebih kecil. Hal ini sangat berguna jika kita membangun sebuah program shell script yang cukup kompleks. Fungsi adalah program yang dapat dipanggil oleh program lainnya dengan menggunakan notasi NamaFungsi(). Fungsi memberikan exit status ($?) yang dinyatakan dengan return nr, atau nilai 0 sebagai default. Membuat fungsi diawali dengan nama fungsi, parameter, kemudian blok program yang dinyatakan dalam {…….}. Contoh :

Variabel dapat di definisikan dalam fungsi sebagai variabel local atau global. Hal yang perlu diperhatikan, nama variable yang digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang sama di luar fungssi, sehingga tidak terjadi isi variable berubah. 

Percobaan:

Percobaan 1: Membuat Shell Script

1. Buatlah file prog01.sh dengan editor vi
$ vi prog01.sh
#!/bin/sh
# Program Shell
#
var1=x
var2=8

Membuat file dengan nama prog01.sh menggunakan editor vi

2. Untuk menjalankan shell, gunakan notasi TITIK di depan nama program
$ . prog01.sh

Perintah tersebut digunakan untuk menjalankan program yang kita buat tadi, namun karena belum diubah menjadi executable file maka hanya menampilkan error.

3. Untuk menjalankan shell, dapat juga dengan membuat executable file dan dieksekusi relatif dari current directory
$ chmod +x prog01.sh
$ ./prog01.sh

Mengubah file tadi menjadi executable file dan mengeksekusinya dengan perintah tersebut


Percobaan 2: Variable

1. Contoh menggunakan variable pada shell interaktif
$ VPT=poltek
$ echo $VPT

Membuat variable VPT pada shell interaktif dengan nilai variable poltek, kemudian menggunakan perintah echo dan memanggil variable VPT dengan menambahkan simbol $ didepan nama variable dan hasilnya akan menampilkan isi dari variable tersebut.

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

- Pada perintah pertama terdapat pesan error, karena untuk memasukan nilai variable yang lebih dari satu kaliman harus menggunakan tanda kutip diantaranya.
- Lalu ketika ingin melihat isi dari variable yang telah dibuat tadi kita harus menambahkan $ didepan nama variable agar dapat melihas nilai dari variable tersebut.

3. Menggabungkan dua variable atau lebih
$ V1=”poltek”
$ V2=‘:’
$ V3=’Jakarta’
$ V4=$V1$V2$V3
$ echo $V4

Menggabungkan variable V1 sampai V3 kedalam satu variable dan menampilkannya.

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

Menggabungkan variable dengan string lain dengan {namaVariable}, karena tanpa tanda tersebut, shell akan memanggil variable yang belum memiliki isi.

5. Variabel dapat berisi instruksi, yang kemudian bila dijadikan input untuk shell, instruksi tersebut akan dieksekusi
$ CMD=who
$ $CMD
$ CMD =”ls -l”
$ $CMD

Mengisi variable dengan perintah yang akan dijalankan ketika variable dipanggil.

6. Modifikasi file prog01.sh berikut
$ vi prog01.sh
#!/bin/sh
#program shell
V1=poltek
V2=‟:‟
V3=Jakarta
echo “Pemrograman shell”
echo $V1$V2$V3
V3=ITS
echo $V1$V2 di $V3

Mengubah isi dari executable file prog01.sh dengan menambahkan beberapa variable dan perintah echo untuk menampilkan isi dari variable yang dibuat.

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

Mengeksekusi script bash dengan notasi “.”,dan “./”, error pada perintah prog01.sh, karena tidak ada perintah yang diberikan untuk file tersebut. Dan program yang bisa di eksekusi adalah executable file.


Percobaan 3: Membaca Keyboard

1. Menggunakan instruksi read
$ read nama
Iqbal
$ echo $nama

Membuat variable nama, dimana memberikan isi dari variable tersebut dengan membaca input pada keyboard menggunakan perintah read. Lalu menampilakannya dengan perintah echo.

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”

Membuat file prog02.sh dimana didalam file tersebut membaca input keyboard dan memasukannya kedalam variable nama, alamat, dan kota.

3. Eksekusi program prog02.sh
$ . prog02.sh

Mengubah file tersebut menjadi executable file lalu menjalankannya. Input keyboard disimpan didalam variable yang ada didalam script tadi dan ditampilkan kembali pada akhir program.

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

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

5. Eksekusi program prog02.sh

Hasil yang didapat input keyboard berada di satu baris yang sama.

6. Variabel kosong adalah variable yang tidak mempunyai nilai. Variabel ini didapat atas assignment atau membaca dari keyboard atau variable yang belum didefinisikan
$ read nama
<CR>
$ echo $nama
$ A=
$ B=””
$ C=$A$B
$ echo $C

Perintah diatas berisi variable kosong atau tidak mempunyai nilai. Variable bisa kosong karena belum didefinisikan, jadi yang terbaca oleh echo adalah kosong

7. Variabel dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi. Pada contoh dibawah , instruksi pwd dieksekusi lebih dahulu dengan sepasang Back Quate (tanda kutip terbalik). Hasil dari eksekusi tersebut akan masuk sebagai nilai variable DIR
$ pwd
$ DIR=`pwd`
$ echo $DIR

Variabel dapat disubtitusikan dengan hasil eksekusi dari sebuah instruksi. Perintah DIR=`pwd` berarti hasil dari pwd masuk sebagai nilai variable DIR.

8. Buatlah shell script prog03.sh
$ 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

Membuat script prog03.sh

9. Eksekusi prog03.sh

Output perintah dari whoami akan disubtitusikan kedalam variable nama. Output dari data | cut -c -10 akan disubtitusikan kedalam variable tanggal. Hasilnya apa yang ada didalam perintah echo


Percobaan 4: Parameter

1. Membuat shell script prog04.sh
$ 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”

Membuat script prog04.sh

2. Eksekusi prog04.sh tanpa parameter, dengan 2 parameter, dengan 4 parameter

Saat mengeksekusi tanpa parameter yang keluar adalah nama program. Saat menginputkan 2 parameter akan mengidentifikasikan sebagai variable $1 dan $2. Saat menginput 4 parameter akan mengidentifikasikan sebagai variable $1,$2,$3, dan $4. Perintah echo hanya sampai variable $3, jadi hasil yang keluar sampai variable $3.

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”

Membuat shell script prog04.sh versi 2. Jumlah parameter dilambangkan dengan $#

4. Eksekusi prog04.sh tanpa parameter dan dengan 4 parameter

Saat mengeksekusi tanpa parameter, outputnya adalah “jumlah parameter 0” karena tidak dimasukannya parameter. Pada saat mengeksekusi 4 parameter, outputnya adalah “jumlah parameter 4” karena parameter yang dimasukkan adalah 4.

5. Membuat shell script prog04.sh versi 3 dengan menambahkan total parameter dan nomor proses id (PID)
$ 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 $$”

Membuat shell script prog04.sh versi 3. Untuk menampilkan seluruh string yang menjadi parameter dilambangkan dengan “ $* ” dan Untuk menampilkan PID dari script yang dijalankan. PID akan terus berubah (umumnya) menaik, setiap kali proses berjalan. 

6. Eksekusi prog04.sh dengan 4 parameter    

Perintah total parameter menampilkan seluruh string yang menjadi parameter. Kemudian proses PID dari script ditampilkan yaitu 2454.


Percobaan 5: Status Exit

1. String tidak ditemukan, maka status exit adalah 1
$ grep xyz /etc/passwd
$ echo $?

Perintah grep xyz /etc/passwd untuk mencari file xyz. Karena file tidak ditemukan maka status exit adalah 1

2. String ditemukan, maka status exit adalah 0
$ grep <user> /etc/passwd
$ echo $?

Perintah grep iqbalteja /etc/passwd untuk mencari file iqbalteja. Karena file ditemukan maka status exit adalah 0


Percobaan 6: Konstruksi if

1. Instruksi dengan exit status 0
$ who
$ who | grep <user>
$ echo $? 

Perintah who mengetahui user aktif. Perintah who | grep <user> untuk mencari iqbalteja didalam output dari perintah who. Status exit 0 karena file ditemukan.

2. If membandingkan exit status dengan 0, bila sama, maka blok program masuk ke dalam blok then-fi
$ if [ $? = 0 ]
> then
> echo “Pemakai tersebut sedang aktif”
> fi

Untuk membandingkan status exit dengan nol dapat digunakan konstruksi if, jika kondisi pada if terpenuhi, instruksi di dalam then dan fi akan dijalankan.

3. Nomor (1) dan (2) diatas dapat disederhanakan dengan
$ if who|grep <user> >/dev/null
> then
> echo okay
> fi

Perintah tersebut adalah gabungan dari nomor 1 dan 2


Percobaan 7:Konstruksi if else then

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

Membuat script prog05.sh. If berisi kondisi yang diinginkan untuk mencari nilai. Jika kondisi di dalam if terpenuhi,then akan mengeksekusi instruksi yang ada didalamnya, jika kondisi tidak terpenuhi,instruksi di dalam else yang akan dieksekusi. Jika nilai sudah ditemukan, if akan ditutup oleh fi.

2. Jalankan prog05.sh, masukkan nama pemakai yang aktif yang tampil pada instruksi who dan coba juga untuk nama pemakai yang tidak aktif
$ who
$ . prog05.sh [nama=<user>]
$ . prog05.sh [nama=studentOS]

Perintah who untuk mengecek siapa user yang aktif.  Kemudian jika user aktif, perintah then akan mengeksekusi instruksi. Jika user tidak aktif, perintah else yang akan di eksekus

Percobaan 8 : Instruksi Test

1. Menggunakan instruksi test, perhatikan spasi antara
$ NAMA=amir
$ test $NAMA = amir
$ echo $?
$ test $NAMA = boris
$ echo $?

Pada percobaan tersebut menampilkan saat memberikan variable nama beserta isinya. Lalu memberikan perintah test dengan memanggil variable NAMA, maka status exitnya 0 yang berarti nama amir ditemukan didalam variable tadi.

2. Aplikasi test dengan konstruksi if
$ vi prog06.sh
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if test “$NAMA” = iqbal
then
echo “Selamat Datang $NAMA”
else
echo “Anda bukan iqbal!!”
fi

Pada perintah tersebut memberikan definisi atau isi dari variable NAMA adalah iqbal dengan perintah test, jika memasukan nama selain nama yang sama pada variabel yang diberikan maka perintah dibagian else yang akan dijalankan.

3. Jalankan program prog06.sh dengan memasukkan NAMA = amir dan NAMA = <CR>. perhatikan hasil tampilannya
$ . prog06.sh [NAMA = iqbal]
$ . prog06.sh [NAMA = <CR>] (Terdapat pesan error)

Mengeksekusi prog06.sh yang merupakan instruksi test lalu memberikan input nama. Pada perintah kedua terdapat error karena <CR> tidak terdapat didalam file atau direktori manapun.

4. Modifikasi prog06.sh dengan menggunakan notasi untuk test
$ vi prog06.sh
#!/bin/sh
# prog06.sh
echo –n “NAMA = “
read NAMA
if [ “$NAMA” = iqbal ]
then
echo “Selamat Datang $NAMA”
else
echo “Anda bukan iqbal!!”
fi

Memodifikasi prog06.sh dengan mengganti instruksi test dengan “[ ]”.

5. Jalankan program prog06.sh dengan memasukkan NAMA = iqbal
$ . prog06.sh [NAMA = iqbal]

Program tersebut menampilkan hasil yang sama ketika isi dari program masih menggunakan instruksi test.


Percobaan 9 : Notasi && dan ||

1. Bila file prog01.sh ada (TRUE), maka jalankan program berikutnya. File prog01.sh ada, karena itu exit status adalah TRUE, hasil operasi AND masih tergantung pada hasil eksekusi instruksi ke 2, dan dengan demikian instruksi echo akan dijalankan.
$ [ -f prog01.sh ] && echo “Prog01.sh ada”

Menggunakan operator and dengan notasi &&. Pada program tersebut memastikan prog01.sh ada sehingga exit statusnya TRUE. Karena jika exit statusnya TRUE maka program selanjutnya bisa dijalankan.

2. File prog99.sh tidak ada, karena itu exit status adalah FALSE dan instruksi echo tidak dijalankan
$ [ -f prog99.sh ] && echo “Prog99.sh ada”

Pada program tersebut karena exit statusnya FALSE maka perintah echo tidak dijalankan.

3. Bila prog01.sh ada maka jalankan shell script tersebut
$ [ -f prog01.sh ] && . prog01.sh

Karena prog01.sh ada maka script yang ada didalam prog01.sh dijalankan.

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

Menggunakan operator OR dengan notasi ||. Dimana jika exit status pertama TRUE maka perintah selanjutnya tidak akan dijalankan.

5. File prog99.sh tidak ada, karena itu exit status adalah FALSE, hasil m tergantung atas exit status instruksi ke dua, karena itu instruksi echo dijalankan
$ [ -f prog99.sh ] || echo “Dieksekusi tidak ?”

Pada percobaan tersebut exit status prog99.sh FALSE, sehingga menjalankan perintah echo.

6. File prog99.sh tidak ada, maka tampilkan pesan error
$ [ -f prog99.sh ] || echo “Sorry, prog99.sh tidak ada”

Pada program tersebut menampilkan pesan error yang dibuat dengan perintah echo, karena exit status yang mengecek prog99.sh adalah FALSE.


Percobaan 10 : Operator bilangan bulat untuk test

1. Menggunakan operator dengan notasi test
$ i=5
$ test “$i” –eq 5
$ echo $?

Mengisi variable i=5, lalu mengeceknya dengan perintah test –eq 5 untuk mengetahui apakah nilainya sama. Setelah memanggil perintah echo $? exit statusnya 0 yang berarti nilainya sama

2. Menggunakan operator dengan notasi [ ] (penganti notasi test)
$ [ “$i” –eq 5 ]
$ echo $?

Mengecek apakah i = 5 dengan notasi [ ] sebagai pengganti perintah test.


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”

Membuat script prog07.sh menggunakan operator logical(AND) dan konstruksi elif.

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 dari program ketika kita memasukan nilai 5000 maka nilai tersebut akan masuk ke kondisi pertama(INCOME ≥ 0 & INCOME ≤ 10000), sedangkan nilai kedua 20000 masuk ke kondisi kedua (INCOME > 10000 & INCOME ≤ 25000). Dan pada nilai terakhir tidak masuk kedalam dua kondisi tadi sehingga 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

Linux menyimpan nilai sebagai string, sehingga untuk melakukan operasi aritmatik kita menggunakan perintah expr. Untuk operatornya sendiri + untuk penjumlahan,  - untuk pengurangan, \* untuk perkalian(karena hanya menggunakan * akan muncul error), / untuk pembagian, dan % untuk modulus.

2. Substitusi isi variable dengan hasil utilitas expr
$ A=5
$ B=`expr $A + 1`
$ echo $B

Mensubstitusi isi dari variable dengan hasil dari utilitas expr.


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

Perintah exit yang akan dijalankan pada program tersebut.

2. Jalankan script prog08.sh dan periksa status exit
$ . prog08.sh
$ echo $?

Pada saat prog08.sh dieksekusi kita akan keluar dari terminal, dan saat menjalankan perintah echo $? Maka status exitnya adalah 0.


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 

Membuat prog09.sh yang berisi perintah konstruksi case-esac dimana memiliki tiga pilihan untuk diinput yaitu 1 sampai 3 dan selain itu akan dianggap error.

2. Jalankan program prog09.sh, cobalah beberapa kali dengan inputan yang berbeda
$ . prog09.sh

Ketika program dieksekusi dan kita memilih 1 hasilnya adalah user yang sedang aktif saat ini, 2 untuk melihat tanggal hari ini, dan 3 untuk melihat 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

Shell script prog10.sh ini merupakan bentuk lain dari perintah case. Variabel JWB dapat dijawab dengan perintah y/Y/ya?Ya/YA untuk y, sedangkan untuk JWB=t dapat ditulis dengan t/T/tidak/Tidak/TIDAK dan akan dieksekusi pada percobaan berikutnya

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

Program tersebut adalah hasil dari eksekusi prog10.sh, dalam percobaan tersebut memberikan beberapa inputan yang berbeda.

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

Memodifikasi program prog10.sh dengan bentuk lain dari case.

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

Hasil dari program tersebut tidak berbeda hasilnya dari sebelum script dimodifikasi.


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

Membuat script prog11.sh dengan konstruksi for-do-done.

2. Jalankan program prog11.sh
$ . prog11.sh

Hasil eksekusi dari program tersebut menampilkan nama yang ada didalam konstruksi for dengan looping.

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

Membuat file prog12.sh yg berisikan konstruksi for dan wildcard.

4. Jalankan program prog12.sh
$ . prog12.sh

Program tersebut berfungsi untuk menampilkan nama file yang berada di 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

Memodifikasi program prog12.sh untuk menampilkan long list dari file berekstensi lst.

6. Jalankan program prog12.sh
$ . prog12.sh

Pada program tersebut terjadi error dikarenakan tidak adanya file dengan ekstensi lst.


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”

Membuat program prog13.sh dengan konstruksi while-do-done yang digabungkan dengan konstruksi if.

2. Jalankan program prog13.sh
$ . prog13.sh

Ketika program di eksekusi dan kita memilih 1 sampai 3 terminal akan di clear dan akan mengulangi program. Namun jika memasukan 4 sebagai input maka program akan berhenti.


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”

Mengganti kondisi pada while menjadi dummy dengan notasi “:”.

2. Jalankan program prog13.sh
$ . prog13.sh

Hasil dari program setelah dimodifikasi masih sama seperti sebelumnya.

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

Membuat file prog14.sh yang berisikan instruksi dummy dengan konstruksi if.

4. Jalankan program prog14.sh beberapa kali dengan input yang berbeda
$ . prog14.sh

Ketika kita memberikan nilai kurang dari 100 maka program akan menampilkan OK!, namun ketika nilainya lebih dari 100 maka tidak ada tampilan yang akan dihasilkan.


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

Membuat program fungsi.sh yang memiliki fungsi dengan nama fungsi F1.

2. Jalankan program fungsi.sh
$ . fungsi.sh

Pada program tesebut membuat fungsi dengan nama F1. Didalam fungsi F1 terdapat perintah echo “Fungsi F1” dan return 1. Lalu fungsi tersebut dipanggil dengan mengetik F1 dibagian dari fungsi tersebut.

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”

Memodifikasi script program tersebut dengan menambahkan isi dari fungsinya dan menambahkan outputnya.

4. Jalankan program fungsi.sh
$ . fungsi.sh

Pada program tersebut masih sama fungsinya hanya saja ditambahkan variable Honor didalam fungsi F1.


LATIHAN

1. Buatlah program salin.sh yang menyalin file (copy ) sebagai berikut :

salin.sh file -asal file-tujuan

Dengan ketentuan :
-Bila file asal tidak ada, berikan pesan, salin gagal.
-Bila file tujuan ada dan file tersebut adalah directory, beri pesan bahwa file tidak bisa disalin ke direktori
-Bila file tujuan ada dan file biasa, beri pesan apakan file tersebut akan dihapus, bila dijawab dengan “Y”, maka copy file tersebut
-Bila file tujuan belum ada, lakukan copy
Untuk mengambil nama file, gunakan parameter $1 dan $2. Bila jumlah parameter tidak sama ($#) dengan 2, maka beri pesan exit = -1
#!/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”
……
…… 
Script

Hasil
Pada Latihan tersebut membuat script dengan konstruksi if dan elif dengan ketentuan dari soal tidak bisa mengcopy ke direktori, jika file asal tidak ada akan menampilkan pesan error “salin gagal”, jika file tujuan sudah ada akan mengkonfirmasi penyalinan, dan jika file tujuan belum ada akan di salin secara langsung.

2. Buat program yang memeriksa nama direktori, jika parameter tersebut adalah direktori, maka jalankan instruksi ls – ld pada direktori tersebut. Namakan program tersebut checkdir.sh. Gunakan notasi [ -d NamaDirektori ] dan pilih logic al && atau || pada level shell.
#!/bin/sh
# file: checkdir.sh
# Usage: checkdir.sh DirectoryName
#
if [ $# -ne 1]
then
echo “Error, usage: checkdir.sh DirectoryName”
exit 1
fi
[ … ] && …
Script

Hasil
Membuat program untuk melihat direktori dengan perintah ls –ld, dan hanya bisa melihat satu direktori. Jika hanya mengeksekusi perintah tanpa nama atau lebih dari satu direktori maka akan menampilkan pesan error dan terminal akan di exit.

3. Dengan shell script pph.sh, hitung PPH per tahun dengan ketentuan sebagai berikut:
10 juta pertama PPH 15%
25 juta berikutnya (sisa) PPH 25%
Bila masih ada sisa, maka sisa tersebut PPH 35%
Contoh :
Gaji 8 juta
PPH = 15% * 8 juta
Gaji 12 juta
PPH =15% * 10 juta + 25% * (12-10) juta
Gaji 60 juta
PPH = 15% * 10 juta + 25% * 25 juta + 25% * (60-10-25) juta
Debugging : untuk melakukan tracing (debug) gunakan opsi –x pada eksekusi shell.
$ 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
Script

Hasil

Pada latihan tersebut kita membuat program untuk menentukan pajak penghasilan dengan menggunakan konstruksi if elif, dimana jika penentuan pajaknya sesuai dengan soal diatas.

4. Buatlah program myprog.sh yang memproses parameter $1, nilai parameter harus berupa string :
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
Script

Hasil

Membuat program dengan konstruksi case, dimana  untuk mengisi variable 1 menyesuaikannya dengan case yang ada, jika input yang diberikan tidak sesuai maka akan memberikan error seperti pada gambar.

5. Buat sebuah fungsi pada script confirm.sh yang memberikan konfirmasi jawaban Yes, No atau Continue. Jika jawaban Yes, maka beri nilai balik 0, No = 1 dan Continue = 2. Modifikasi kerangka program berikut untuk memenuhi permintaan tersebut.
#!/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
Script confirm.sh

Script testp.sh
Hasil
Membuat sebuah fungsi pada script confirm.sh yang memberikan konfirmasi jawaban Yes, No atau Continue. Jika jawaban Yes, maka beri nilai balik 0, No = 1 dan continue = 2.

KESIMPULAN
Dari Praktikum tersebut dapat disimpulkan bahwa pemrograman shell dapat mempermudah penggunaan shell pada terminal sistem operasi linux dimana didalam satu file program dapat mengeksekusi lebih dari satu perintah dan dapat memberikan ketentuan/kondisi untuk menjalankan perintah sesuai dengan kebutuhan.

Comments

Popular posts from this blog

Praktikum 11 Manajemen User dan Grup

Bekerja dengan Bash Shell 5A dan 5B

Praktikum 7 Unix System Call dan Manajemen Memory