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
Posting Komentar