LAPORAN PRAKTIKUM 6B - SISTEM OPERASI (LINUX) "PEMROGRAMAN SHELL"

 LAPORAN PRAKTIKUM 6B - SISTEM OPERASI (LINUX)

"PEMROGRAMAN SHELL"







Disusun oleh

Rizki Azka Fihi Aghnia                 2103423004











PROGRAM STUDI RPL BROADBAND MULTIMEDIA
JURUSAN TEKNIK ELEKTRO
POLITEKNIK NEGERI JAKARTA
2022
Pokok Bahasan
  • Pemrograman Shell
Tujuan Belajar
  • Menggunakan struktur case – esac.
  • Loop dengan while, for, do while.
  • Membuat fungsi dan mengetahui cara memanggil fungsi tersebut.
Dasar Teori
1. 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 bukan 0.
  • Operator untuk test
  • Test untuk files dan directory
Test dapat dilakukan untuk memeriksa apakah file ada (Exist), dapat dibaca, dapat ditulis, kosong dan lainnya.

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.

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

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, OR dan NOT. Operator ini menggabungkan hasil ekspresi sebagai berikut :
NOT: symbol !

AND: symbol -a
OR: symbol -o

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


7. INSTRUKSI EXIT

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


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

9. KONSTRUKSI FOR
For digunakan untuk pengulangan dengan menggunakan var yang pada setiap pengulangan akan diganti dengan nilai yang berada pada daftar (list).
10. 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.

11. 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 => :

12. 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 8 - Instruksi Test
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.

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.

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.

Perintah ini sama seperti nomor sebelumnya hanya saja terdapat sedikit modifikasi penulisan. Namun, ketika dijalankan, program menghasilkan output yang sama seperti nomor sebelumnya.

Program menghasilkan output “Selamat Datang amir” ketika kita menginput kata amir pada variabel NAMA. Outputnya sama seperti nomor sebelumnya.

Percobaan 9 - Notasi && dan ||
Pada percobaan ini, prog01.sh ada, sehingga program mencetak “prog01.sh ada”.

Pada percobaan ini, dijelaskan bahwa prog99.sh tidak ada, sehingga program echo tidak dijalankan.

Jika prog01.sh ada, maka akan menjalankan shell scriptnya. Sehingga outputnya adalah program prg01.sh.

Karena prog01.sh ada, maka exit statusnya adalah TRUE, sehingga instruksi echo tidak lagi dijalankan.

File prog99.sh tidak ada, karena itu exit statusnya adalah FALSE. Karena hasil masih tergantung atas status exit instruksi kedua, maka instruksi echo dijalankan.

Prog99.sh tidak ada, sehingga echo dijalankan.

Percobaan 10 - Operator Bilangan Bulat untuk test
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.

Notasi [] adalah cara lain untuk mengetes operator bilangan bulat .

Percobaan 11 - Operator Logical dan Konstruksi Elif
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.

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 - Hitung Aritmatika
$ expr adalah variabel counter baris perintah manual yang digunakan untuk mengevaluasi ekspresi di UNIX/LINUX bawah, umumnya digunakan untuk nilai integer, juga dapat digunakan untuk string. Perintah pertama digunakan untuk operasi penjumlahan. Perintah A=5 adalah memasukkan angka 5 ke dalam variabel A. Perintah selanjutnya merupakan operasi bilangan (operasi aritmatika). Penulisan perkalian dalam $ expr menggunakan backslash.

Ekspresi penulisan expr antara lain adalah:
  • Dipisahkan oleh ruang disetiap item
  • Digunakan backslash untuk shell tertentu.
  • String mengandung tanda kutip mengandung spasi dan karakter khusu lainnya tertutup.
Untuk dapat memasukkan nilai variabel A ke dalam operasi di dalam variabel B, maka digunakan tanda petik terbalik.

Percobaan 13 - Instruksi Exit
Percobaan diatas adalah membuat program prog08.sh menggunakan editor vi untuk melakukan proses exit.

(Menutup terminal secara otomatis)
Ketika program prog08.sh dijalankan, teminal tertutup 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
Jika 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.

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

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.

Hasil diatas merupakan inputan user dalam memilih ya atau tidak.

Program di atas merupakan cara lain dalam penulisan case.

Outputnya sama dengan program nomor sebelumnya.

Percobaan 15 - Konstruksi for-do-done
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.
Outputnya berupa mencetak semua kata yang berada di dalama variabel NAMA.

prog12.sh ini berisi konstruksi for dan wild card. Program ini akan menampilkan nama file yang berada pada current directory

Outputnya berupa isi dari current directory.

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

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

Ketika angka 2 diinput ke program, maka program akan me-looping. Namun ketika menginputkan angka 4, maka program akan berhenti dan mencetak “Program berlanjut di sini setelah break”.

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

Outputnya sama seperti nomor sebelumnya walaupun terdapat modifikasi di dalam penulisan program.

Pada program ini termasuk program dummy yang mana variabel A dinyatakan sebagai nilai -gt 100. Kemudian setelah nilai dimasukkan akan mencetak OK

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
Pada program ini berisi fungsi untuk return 1 yaitu echo “Fungsi F1” dan juga menampilkan status exit.

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.

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

Tambahan pada modifikasi ini hanya penambahan variabel Honor yang diberi nilai 10000 dan nilai balik yang diambil dari status exit.

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

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”
……
……
Jawab:

Buat file baru

Eksekusi
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
[ … ] && …
Jawab:
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
Jawab:

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
Jawab:
Program ini merupakan sebuah program yang 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.
Jawab:



Confirm.sh adalah sebuah fungsi 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.










Komentar

Postingan populer dari blog ini