SlideShare una empresa de Scribd logo
1 de 17
================================
TUTORIAL MINI - SHELL SCRIPT
================================
Rio Astamal - rio@rioastamal.net
--------------------------------
versi 0.1 - 15/05/2008
--------------------------------
Lisensi - Creative Commons Attribution-Share Alike 3.0 : BY SA
--------------------------------
http://www.rioastamal.net/
--------------------------------
1. Shell Script
1.0 Apa Itu Shell Script?
1.1 Variabel
1.2 Command Line & Argument
1.3 Perhitungan Aritmatik
1.4 User input
1.5 Piping
1.6 Redirection
1.7 Fungsi
2. Percabangan
2.0 Percabangan dalam shell script
2.1 if...then...fi
2.2 if...then...else...fi
2.3 if...then...elif...else...if
2.4 nested if
2.5 case...in...esac
2.6 Menangkap error status
3. Perulangan
3.0 Perulangan dalam shell script
3.1 for...do...done
3.2 for...in...do...done
3.3 while...do...done
3.4 Perulangan bersarang
4. Soal-soal Latihan
4.1 Anda ingin membersihkan Cache Firefox jika telah mencapai 5MB
Tips: gunakan perintah `du` untuk mengecek ukuran folder
4.2 Anda ingin membuat script untuk melakukan backup otomatis log file server
apache setiap tengah malam lalu otomatis membersihkannya
4.3 Anda ingin membuat membuat tampilan seperti berikut menggunakan looping,
4.3.1
1 1 * * * * * *
22 12 * * * * * *
333 123 * * * * * *
4444 1234 * * * * * *
55555 12345 * * * * * *
4.4 Anda ingin membuat shell script yang fungsinya mirip dengan program `ps`
yaitu untuk menampilkan proses dan juga informasi system
4.5 Anda ingin membuat game tebak angka sederhana dimana jika dijalankan
outputnya akan seperti berikut:
***********************************
SELAMAT DATANG DI GAME TEBAK ANGKA
***********************************
PERATURAN GAME:
1. Angka diantara 10 - 50
2. Angka adalah genap
3. Maksimal percobaan adalah 5 kali
Masukkan Nama: STIKOM
Masukkan angka: 20
STIKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Masukkan angka: 34
STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-2)
Masukkan angka: 30
STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-3)
Masukkan angka: 28
STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-4)
Masukkan angka: 22
------------------------ GAME OVER ----------------------------
JAWABAN YANG BENAR ADALAH : 24
Apakah anda ingin coba lagi (y/t) ? y
---------------------------------------------------------------
Masukkan angka: 44
STIKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Masukkan angka: 48
------------- SELAMAT TEBAKAN ANDA BENAR ----------------------
Anda berhasil menebak dalam 2 kali percobaan.
Apakah anda ingin coba lagi (y/t) ? t
---------------------------------------------------------------
------------- (c) COPYRIGHT 2008 - LUG STIKOM -----------------
Jawaban didapat secara random antara 10 - 50 dan harus genap. Untuk
mendapatan random number pada shell script dapat digunakan beberapa cara
diantaranya:
1. Menggunakan magic variable $RANDOM
misal untuk menghasilkan angka range 1 - 10 maka:
echo $[ ($RANDOM % 10) + 1 ]
2. Langsung berkomunikasi dengan file /dev/random atau /dev/urandom. File
ini isinya selalu berubah sehingga dengan menggunakan perintah `cksum`
kita akan mendapatkan angka yang acak, contoh:
expr `dd if=/dev/urandom count=1 2> /dev/null | cksum | 
cut -d" " -f1` % 10 + 1
--------------------------------------------------------------------------------
------------------------
1.0 APA ITU SHELL SCRIPT
------------------------
Dalam lingkungan unix, kata 'shell' mengacu pada semua program yang dapat
dijalankan pada command line. Jadi secara sederhana shell script merupakan
kumpulan perintah yang disimpan pada suatu file. Extensi umum yang digunakan
untuk shell script adalah '.sh', sebenarnya hal ini tidak mutlak karena
pada dasarnya unix mengabaikan extensi file.
Shell juga dapat mengacu pada program yang menangani command line itu
sendiri dalam sistem operasi UNIX program tersebut adalah Bourne Shell
(1978 - Steve Bourne) disingkat sh. Dalam sistem operasi GNU/Linux shell yang
menjadi standar adalah Bourne Again Shell(bash). Bash merupakan shell yang
kompatibel dengan sh dan memiliki lebih banyak fitur.
Jika anda ingin menguasai shell script tentu anda harus tahu dan hafal
sedikit banyak perintah dasar command line, seperti mengkopi file(cp),
merename file(mv), mencetak string (echo), melihat file(cat), dan beberapa
perintah dasar lainnya.
Shell script juga menyediakan beberapa fitur yang tersedia pada bahasa
pemrograman tingkat tinggi seperti variabel, percabangan dan perulangan.
Berikut ini adalah contoh sederhana penggunakan shell script:
lug@stikom.edu:~$ nano hello.sh
#!/bin/sh
echo 'HELLO WORLD'
Untuk menjalankan ada dua cara, pertama melalui program shell itu sendiri
lug@stikom.edu:~$ sh hello.sh
Kedua adalah mengeksekusinya secara independen, untuk melakukan hal tersebut
anda harus memberi permission 'execute' pada file.
lug@stikom.edu:~$ chmod +x hello.sh
lug@stikom.edu:~$ ./hello.sh
HELLO WORLD
Baris pertama #!/bin/sh adalah MUTLAK diperlukan dan HARUS diletakkan pada
BARIS PERTAMA agar file yang anda buat dikenali sistem sebagai shell script.
Tanda '#!' sering disebut 'shebang' operator. Tanda tersebut menandakan
bahwa file tersebut adalah shell script. Sisanya misal '/bin/sh' adalah
lokasi file binari atau program. Dalam contoh kita menggunakan program
bash '/bin/sh' atau '/bin/bash'.
Tanda # jika tidak terletak pada baris dan kolom paling awal akan dianggap
sebagai komentar oleh shell.
------------
1.1 Variabel
------------
Pemberian variabel pada shell script bersifat 'dynamic typing' karena
shell script tidak mengenal adanya tipe data. Pada shell script dikenal
dua istilah variabel yaitu SYSTEM VARIABLE(SV) dan USER DEFINED VARIABLE
(UDV). SV adalah kumpulan variabel yang telah dideklarasikan secara otomatis
oleh shell, sedangkan UDV adalah variabel yang kita buat sendiri. Contoh dari
variabel SV adalah HOME, SHELL, RANDOM, OSTYPE, dan masih banyak yang lain.
Dalam membuat variabel ada beberapa aturan yang harus dipenuhi agar variabel
tersebut dianggap valid oleh shell, syntax untuk penamaan variabel adalah:
nama_variabel=NILAI
Perhatikan bahwa tidak ada spasi antara nama_variabel dengan tanda '=' juga
dengan NILAI. Ini adalah suatu KEHARUSAN. Berikut adalah beberapa aturan
tentang penamaan variabel:
1. Variabel HARUS diawali ABJAD atau _ (tidak dapat diawali angka)
2. Variabel dapat terdiri dari karakter alphanumeric dan _
3. Variabel bersifat CaSe SeNsItIvE
4. Jika isi variabel mengandung spasi sebaiknya apit dengan tanda petik (')
atau (").
5. Gunakan escape character () untuk karakter non-literal
seperti (', $, ?, dll)
Untuk mencetak nilai dari suatu variabel digunakan tanda dollar ($) didepan
nama variabel, contoh:
lug@stikom.edu:~$ a='Hello '
lug@stikom.edu:~$ b='World!'
lug@stikom.edu:~$ echo $a$b
Hello World!
lug@stikom.edu:~$ echo ${a}${b}
Hello World!
Cara yang terakhir adalah cara yang disarankan untuk menghindari kesalahan
dalam melakukan concat string.
Jika anda ingin menyimpan output dari suatu perintah kedalam suatu variabel
gunakan tanda backtick (`). Contoh, kita akan melihat isi direktori home
lalu menyimpannya dalam variabel isi_home.
lug@stikom.edu:~$ isi_home=`ls /home`
lug@stikom.ecu:~$ echo $isi_home
Dalam shel juga terdapat SPECIAL VARIABEL untuk mendapatkan exit status dari
suatu program. Pada UNIX setiap program dinyatakan selesai TANPA error
apabila exit statusnya SAMA DENGAN 0. Selain itu maka program tersebut
selesai tapi dengan error. Variabel tersebut adalah "$?".
lug@stikom.edu:~$ ls /home
lug@stikom.edu:~$ echo $?
0
lug@stikom.edu:~$ ls /file/ngawur
lug@stikom.edu:~$ echo $?
2
Angka 2(TIDAK SAMA DENGAN 0) menunjukkan bahwa program ls keluar dengan
status terjadi error. Penggunaan exit sangat penting saat kita membuat
shell script yang kompleks, dimana didalamnya kita banyak menggunakan
program lain.
------------------------------
1.2 Command Line dan Argument
------------------------------
Ketika berbicara shell script kita pasti berhubungan dengan command line.
Apabila berbicara tentang command line pasti berhubungan dengan argument.
Apaliba berbicara tentang argument.....cukup....cukup.... nanti malah sampai
sejarah kerajaan majapahit nantinya :)
Perintah-perintah command line umumnya memerlukan minimal satu buah argumen
agar dapat mengerjakan tugasnya secara optimal. Apa itu argument? secara
sederhana argumen adalah text/character yang ditempatkan setelah nama program
dengan pemisah minimal satu spasi.
Contoh berikut mengilustrasikan pemberian dua argument pada perinta copy file
`cp`. Perintah cp memerlukan dua argument yaitu 1)lokasi file awal
2)lokasi file tujuan
lug@stikom.edu:~$ cp /foo/bar /tmp/bar
^ ^
argument-1 argument-2
Pada sistem Linux dikenal dua istilah argument short style(UNIX style) dan
long style(GNU Style). Hampir setiap program command line pada linux
menyediakan dua opsi tersebut saat memberikan argument. Penulisan argument
UNIX style biasanya hanya terdiri dari satu huruf contoh '-l' pada perintah
`ls`.
lug@stikom.edu:~$ ls -l
Sedangkan GNU style umumnya terdiri dari minimal sebuah kata contoh
'--all' pada perintah `ls`.
lug@stikom.edu:~$ ls --all
Untuk membaca argument dalam shell script digunakan special variabel yaitu
$0, $1, $2,...$9. Variabel $0 adalah nama program itu sendiri.
CATATAN:
Untuk mengetahui jumlah argument yang diinputkan user gunakan variabel $#,
sedangkan untuk mendapatkan seluruh argument gunakan variabel $*.
LATIHAN:
Buat sebuah shell script untuk menampilkan nama user, nama tersebut
diinput melalui argument ke-1
JAWAB:
lug@stikom.edu:~$ nano nama.sh
#!/bin/sh
nama=$1
echo 'Halo '$nama', selamat datang!'
lug@stikom.edu:~$ chmod +x nama.sh
lug@stikom.edu:~$ ./nama.sh STIKOM
Halo STIKOM, selamat datang!
lug@stikom.edu:~$ ./nama.sh STIKOM SURABAYA
Halo STIKOM, selamat datang!
lug@stikom.edu:~$ ./nama.sh 'STIKOM SURABAYA'
Halo STIKOM SURABAYA, selamat datang!
CATATAN:
Untuk menyimpan file pada nano Tekan CTRL-O lalu jika ingin keluar tekan
CTRL-X.
--------------------------
1.3 Perhitungan Aritmatik
--------------------------
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 antaran lain:
+-----------+-----------------------------------------------------------+
| Operator | KETERANGAN |
+-----------+-----------------------------------------------------------+
| + | Operator Penjumlahan contoh: expr 1 + 1 |
+-----------+-----------------------------------------------------------+
| - | Operator Pengurangan contoh: expr 10 - 9 |
+-----------+-----------------------------------------------------------+
| * | Operator Perkalian contoh: expr 10 * 10 |
+-----------+-----------------------------------------------------------+
| / | Operator Pembagian contoh: expr 10 / 2 |
+-----------+-----------------------------------------------------------+
| % | Operator Modulus contoh: expr 15 % 3 |
+-----------+-----------------------------------------------------------+
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`.
LATIHAN:
Buatlah sebuah shell script untuk menghitung nilai dari argument-1 dikali
argument-2 ditambah argument-3!
JAWABAN:
Secara matematis perhitungannya adalah
(argument-1 + argument-2) + argument-3.
Tidak seperti bahasa tingkat tinggi, pada shell script untuk memberi
prioritas pada suatu perhitungan kita menggunakan tanda $[ ... ]. Jadi
perhitungannya menjadi
$[ argument-1 + argument-3 ] + argument-3
Keuntungan lain ketika kita menggunakan tanda $[...] adalah kita tidak perlu
melakukan escaping character pada tanda perkalian(*). Berikut ini adalah
shell scriptnya.
lug@stikom.edu:~$ nano hitung.sh
#!/bin/sh
bil1=$1
bil2=$2
bil3=$3
echo -n "HASIL DARI $bil1 * $bil2 + $bil3 = "
echo `expr $[ $bil1 * $bil2 ] + $bil3`
lug@stikom.edu:~$ chmod +x hitung.sh
lug@stikom.edu:~$ ./hitung.sh 10 10 10
HASIL DARI 10 * 10 + 10 = 110
---------------
1.4 User Input
---------------
Selain melalui argument pada command line, cara lain untuk mendapatkan input
dari user adalah melalui STANDARD INPUT (STDIN). Dimana user langsung
mengetikkan isi dari suatu nilai yang program inginkan.
Untuk mendapatkan input dari user dapat digunakan perintah `read`. Perintah
read tidak begitu berguna jika kita tidak menyimpan hasil inputan tersebut
kedalam sebuah variabel. Untuk menyimpan hasil inputan kita harus memberi
satu argument pada perintah read. Argument inilah yang akan menyimpan nilai
yang diinputkan. Contoh,
lug@stikom.edu:~$ read a
10
lug@stikom.edu:~$ read b
5
lug@stikom.edu:~$ expr $a * $b
50
LATIHAN:
Sama dengan latihan sebelumnya, hanya saja kali ini gunakan perintah read
untuk membaca setiap bilangan yang diinputkan user.
JAWABAN:
lug@stikom.edu:~$ nano hitung2.sh
#!/bin/sh
# deklarasikan variabel dengan nilai NULL
bil1=
bil2=
bil3=
echo -n 'Masukkan bilangan-1: '
read bil1
echo -n 'Masukkan bilangan-2: '
read bil2
echo -n 'Masukkan bilangan-3: '
read bil3
echo ''
echo -n "Hasil dari $bil1 * $bil2 + $bil3 = "
echo `expr $[ $bil1 * $bil2 ] + $bil3`
lug@stikom.edu:~$ chmod +x hitung2.sh
lug@stikom.edu:~$ ./hitung2
Masukkan bilangan-1: 10
Masukkan bilangan-2: 10
Masukkan bilangan-3: 10
Hasil dari 10 * 10 + 10 = 110
----------
1.5 Piping
----------
Piping merupakan penggabungan dua atau lebih perintah dimana output dari
perintah sebelumnya digunakan sebagai input untuk perintah selanjutnya.
Simbol yang digunakan untuk membatasi perintah yang satu dengan yang lain
adalah tanda pipe "|". Berikut adalah beberapa contoh sederhana penggunaan
piping pada command line.
lug@stikom.edu:~$ cat /etc/passwd | wc -l
lug@stikom.edu:~$ cat /etc/passwd | sort -r
lug@stikom.edu:~$ cat /etc/passwd | grep "/bin/sh/" | wc -l
---------------
1.6 Redirection
---------------
Secara umum jika kita ingin mengambil inputan maka kita mengambil dari
STANDARD INPUT (STDIN) yaitu keyboard. Sedangkan hasil output program yang
tercetak di layar monitor kita disebut STANDARD OUTPUT (STDOUT). Hampir sama
dengan STDOUT, error yang dihasilkan program juga ditampilkan lewat monitor
biasa disebut STANDARD ERROR (STDERR). Setiap standard mempunyai kode file
descriptor sendiri-sendiri diantaranya:
- STDIN => File Descriptor: 0
- STDOUT => File Descriptor: 1
- STDERR => File Descriptor: 2
Dengan mengetahui file descriptor tersebut kita dapat melakukan redirection
(pengalihan), misal dari dari STDOUT menjadi STDERR atau sebaliknya.
Terdapat tiga simbol untuk melakukan redirection diantarnya:
1.
Simbol: ">"
Keterangan: Simbol tersebut akan meredirect output ke dalam suatu file. Jika
file tersebut belum ada maka akan buat secara otomatis, jika
file sudah ada ada maka isinya akan di-overwrite/ditimpa.
2.
Simbol: ">>"
Keterangan: Hampir sama dengan ">" hanya saja jika file sudah ada, maka file
isi tersebut tidak dioverwrite tetapi ditambah.
3.
Simbol: "<"
Keterangan: Simbol "<" artinya input tidak diambil dari STDIN melainkan dari
sebuah file.
Sebagai contoh sederhana, ketika anda mengetikkan perintah `ls /nama/dir`
maka secara default program ls akan menampilkan output ke STDOUT yaitu
layar monitor. Jika kita ingin meredirect output yang dihasilkan kedalam
sebuah file maka kita dapat menggunakan simbol ">" atau ">>". Intinya segala
STDOUT dapat dilakukan redirect.
lug@stikom.edu:~$ echo 'DAFTAR ISI FOLDER LUG' > /tmp/data.txt
lug@stikom.edu:~$ ls /home/lugstikom >> /tmp/data.txt
Untuk contoh "<" kita akan menggunakan program tr, program ini dapat kita
gunakan untuk manipulasi teks. Input yang akan kita berikan ke tr adalah
dari sebuah file, nantinya teks yang ada pada file tersebut akan di-UPPER
CASE semua.
lug@stikom.edu:~$ echo 'stikom surabaya' > /tmp/stikom.txt
lug@stikom.edu:~$ tr "[a-z]" "[A-Z]" < /tmp/stikom.txt
STIKOM SURABAYA
Selain meredirect ke file kita juga dapat melakukan redirect ke file
descriptor lain. Misal dari STDOUT ke STDERR atau sebaliknya.
lug@stikom.edu:~$ rm /file/ngawur 2>&1
lug@stikom.edu:~$ ls / 1>&2
-----------
1.7 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. Syntax penggunaan
fungsi pada shell script adalah:
function nama-fungsi()
{
perintah
...
...
return
}
LATIHAN:
Buatlah shell script untuk mencetak banner seperti output berikut:
lug@stikom.edu:~$ ./fungsi.sh
==============================
SELAMAT DATANG DI LUG-STIKOM
==============================
HARI INI: Rabu, 14-05-2008
Tulisan "SELAMAT blabla..." diletakkan dalam fungsi tersendiri, begitu pula
fungsi untuk mencetak tanggal. Fungsi mencetak tanggal nantinya akan
dipanggil didalam fungsi yang mencetak tulisan "SELAMAT...".
JAWAB:
lug@stikom.edu:~$ nano fungsi.sh
#!/bin/sh
function indo_date() {
echo `date +"%A, %d-%m-%Y"`
return
}
function welcome() {
echo "=============================="
echo " SELAMAT DATANG DI LUG-STIKOM"
echo "=============================="
echo -n "HARI INI: "
indo_date
return
}
welcome
lug@stikom.edu:~$ chmod +x fungsi.sh
Apakah fungsi pada shell script juga menerima parameter? YA tapi dengan
sedikit "nyeleneh". Kenapa? jika pada bahasa pemrograman umumnya parameter
diletakkan diantara tanda (), tidak demikian dengan shell script. Cara
pengambilan parameter pada shell script sama dengan pengambilan argument
pada program shell script itu sendiri. Jadi kita dapat menggunakan variabel
$*, $#, $0, $1, dan seterusnya.
Dibawah ini adalah contoh pembuatan fungsi untuk mengubah text menjadi
UPPER-CASE.
lug@stikom.edu:~$ nano fungsi2.sh
#!/bin/sh
function toUpperCase() {
teks=$*
echo $teks | tr "[a-z]" "[A-Z]"
return
}
echo -n "Masukkan teks(lowercase): "
read foo
toUpperCase $foo
lug@stikom.edu:~$ chmod +x fungsi2.sh
lug@stikom.edu:~$ ./fungsi2.sh
Masukkan teks(lowercase): ini lower case
INI LOWER CASE
Pada contoh diatas kita menggunakan variabel $* untuk mengambil parameter
bukan $1 atau $2 dkk karena yang akan diinputkan user kemungkinan mengandung
dua kata atau lebih. Jadi jika kita menggunakan variabel $1 maka yang terbaca
hanya kata pertama. Untuk itu kita gunakan variabel $* yang akan membaca
semua parameter.
---------------
2.0 Percabangan
---------------
Dengan menggunakan percabangan/branching maka kita dapat mengontrol alur
dari shell script yang kita buat. Hal ini memungkinkan kita untuk menulis
program yang sangat kompleks pada shell script. Syntax penggunaan percabangan
pada shell script adalah:
if kondisi
then
...
...
fi
-----------
if kondisi
then
...
...
else
...
...
fi
-----------
if kondisi1
then
...
...
elif kondisi1
...
...
elif kondisi-n
...
...
else
...
...
fi
--------------
case $variabel in
pattern1) perintah
...
perintah;;
pattern1) perintah
...
perintah;;
*) perintah
...
perintah;;
esac
Untuk melakukan perbandingan kondisi pada data kita dapat menggunakan
perintah `test`(man test) atau meletakkannya dalam blok [ ].
Berikut ini adalah operator yang dapat digunakan untuk membandingkan data
NUMERIK:
+------------+-----------------------------------+
| OPERATOR | KETERANGAN |
+------------+-----------------------------------+
| -eq | SAMA DENGAN (=) |
+------------+-----------------------------------+
| -ne | TIDAK SAMA DENGAN (!=) |
+------------+-----------------------------------+
| -gt | LEBIH BESAR (>) |
+------------+-----------------------------------+
| -ge | LEBIH BESAR ATAU SAMA DENGAN (>=) |
+------------+-----------------------------------+
| -lt | KURANG DARI (<) |
+------------+-----------------------------------+
| -le | KURANG DARI ATAU SAMA DENGAN (<=) |
+------------+-----------------------------------+
-------------------
2.1 if...then...fi
------------------
lug@stikom.edu:~$ nano if-then-fi.sh
#!/bin/sh
num_arg=$#
bil1=$1
bil2=$2
function help() {
echo 'Penggunaan: '
echo "$0 bil1 bil2"
echo ''
echo Dimana bil1 dan bil2 harus angka genap.
return
}
function cek_arg() {
if test $num_arg -lt 2
then
help
exit 1 # keluar dengan exit status 1
fi
if [ `expr $bil1 % 2` -ne 0 ] ; then
help
exit 1
fi
if [ `expr $bil2 % 2` -ne 0 ]
then
help
exit 1
fi
return
}
cek_arg
echo 'Argument anda adalah '$bil1' dan '$bil2
exit 0
lug@stikom.edu:~$ chmod +x if-then-fi.sh
lug@stikom.edu:~$ ./if-then-fi.sh
Penggunaan:
./if-then-fi.sh bil1 bil2
Dimana bil1 dan bil2 harus angka genap.
lug@stikom.edu:~$ echo $?
1
lug@stikom.edu:~$ ./if-then-fi.sh 2 4
Argument anda adalah 2 dan 4
lug@stikom.edu:~$ echo $?
0
Perintah exit pada shell script dapat digunakan untuk keluar langsung dari
program. Pada contoh diatas, jika terdapat kesalahan kita keluar dengan exit
status 1( bukan 0 ) artinya program selesai tapi dengan error. Error status
tidak harus 1 tapi bisa sembarang angka asal BUKAN 0.
-------------------------
2.2 if...then...else...fi
-------------------------
Statement pada blok else akan dieksekusi jika kondisi pada pada blok if
bernilai false.
lug@stikom.edu:~$ nano if-else.sh
#!/bin/sh
if test $1 -ge 0
then
echo "Argument bernilai positif"
else
echo "Argument bernilai negatif"
fi
lug@stikom.edu:~$ chmod +x if-else.sh
lug@stikom.edu:~$ ./if-else 10
Argument bernilai positif
lug@stikom.edu:~$ ./if-else -2
Argument bernilai negatif
--------------------------------
2.3 if...then...elif...else...fi
--------------------------------
Statement elif digunakan jika kita ingin memilih lebih dari dua kondisi.
lug@stikom.edu:~$ nano if-elif.sh
#!/bin/sh
pilih=
teks="Sistem operasi pilihan anda adalah "
echo "Pilih Sistem Operasi Anda: "
echo "1. Linux"
echo "2. Mac OS"
echo "3. FreeBSD"
echo "4. Lainnya"
echo ""
echo -n "Masukkan pilihan: "
read pilih
if [ $pilih = "1" ] ; then
echo "${teks}Linux"
elif [ $pilih = "2" ] ; then
echo "${teks}Mac OS"
elif [ $pilih = "3" ] ; then
echo "${teks}FreeBSD"
else
echo "Anda memilih sistem operasi lain"
fi
lug@stikom.edu:~$ chmod +x if-elif.sh
lug@stikom.edu:~$ ./if-elif.sh
Pilih Sistem Operasi Anda:
1. Linux
2. Mac OS
3. FreeBSD
4. Lainnya
Masukkan pilihan: 3
Sistem operasi pilihan anda adalah FreeBSD
-------------
2.5 Nested If
-------------
Pada shell script anda juga dapat meletakkan blok if didalam if atau istilah
"kerennya" nested if. Berikut adalah contoh sederhana penggunaannya.
lug@stikom.edu:~$ nano nested-if.sh
#!/bin/bash
bil=$1
if [ `expr $bil % 2` -eq 0 ] ; then
if [ $bil -ge 0 ] ; then
echo "Angka yang anda masukkan genap dan >= 0"
else
echo "Angka yang anda masukkan genap dan < 0"
fi
else
if [ $bil -ge 0 ] ; then
echo "Angka yang anda masukkan ganjil dan >= 0"
else
echo "Angka yang anda masukkan ganjil dan < 0"
fi
fi
lug@stikom.edu:~$ sh nested-if.sh 10
Angka yang anda masukkan genap dan >= 0
lug@stikom.edu:~$ sh nested-if.sh -5
Angka yang anda masukkan ganjil dan < 0
--------------------
2.6 case...in...esac
--------------------
Perintah case hampir sama dengan if-then-elif-else-fi karena dapat memilih
dari banyak kondisi. Sebagian orang lebih suka menggunakan case...esac
dibanding multi level-if karena lebih mudah dibaca.
Pada contoh dibawah ini adalah modifikasi dari contoh if-then-elif-else-fi
yang pernah dibahas sebelumnya menggunakan case...in...esac.
lug@stikom.edu:~$ nano case.sh
#!/bin/sh
pilih=
teks="Sistem operasi pilihan anda adalah "
echo "Pilih Sistem Operasi Anda: "
echo "1. Linux"
echo "2. Mac OS"
echo "3. FreeBSD"
echo "4. Lainnya"
echo ""
echo -n "Masukkan pilihan: "
read pilih
case $pilih in
"1") echo "${teks}Linux";;
"2") echo "${teks}Mac OS";;
"3") echo "${teks}FreeBSD";;
*) echo "Anda memilih sistem operasi lain";;
esac
lug@stikom.edu:~$ sh case.sh
Pilih Sistem Operasi Anda:
1. Linux
2. Mac OS
3. FreeBSD
4. Lainnya
Masukkan pilihan: 1
Sistem operasi pilihan anda adalah Linux
--------------------------
2.7 Menangkap Error Status
--------------------------
Seperti yang pernah dijelaskan sebelumnya bahwa untuk melihat error status
dari suatu perintah kita gunakan special variable "$?". Error status ini
dapat kita gunakan untuk melihat apakah perintah yang kita jalankan berjalan
tanpa error atau tidak. Error status terdiri dari dua flag yaitu:
+-----------+-----------------+
| NO. ERROR | STATUS PROGRAM |
+-----------+-----------------+
| 0 | OK |
+-----------+-----------------+
| !=0 | TERJADI ERROR |
+-----------+-----------------+
NOTE: != artinya TIDAK SAMA DENGAN
Setelah anda mengetahui bagaimana menggunakan percabangan pada shell script
maka kita dapat menggunakanya untuk menangkap error status yang dihasilkan
oleh suatu program.
lug@stikom.edu:~$ nano error-status.sh
#!/bin/sh
perintah=`rm /file/ngawur 2>/dev/null`
if [ $? -eq 0 ] ; then
echo "PERINTAH SUKSES, EXIT STATUS: $?"
else
echo "PERINTAH GAGAL, EXIT STATUS: $?"
fi
ls / 1>/dev/null
if [ $? -eq 0 ] ; then
echo "PERINTAH SUKSES, EXIT STATUS: $?"
else
echo "PERINTAH SUKSES, EXIT STATUS: $?"
fi
lug@stikom.edu:~$ sh error-status.sh
PERINTAH GAGAL, EXIT STATUS: 1
PERINTAH SUKSES, EXIT STATUS: 0
Pada contoh diatas STDERR dan STDOUT semuanya di-redirect ke /dev/null. Hal
ini agar output perintah rm dan ls tidak muncul dilayar. /dev/null adalah
semacam file "blackhole" yang dapat kita gunakan untuk mengririm semua output
yang tidak kita inginkan.
CATATAN:
Variabel $? hanya berisi error status dari perintah yang TERAKHIR KALI
dijalankan.
----------------------------------
3.0 Perulangan dalam Shell Script
----------------------------------
Perbedaan utama kita, manusia dengan komputer adalah jika kita melakukan
suatu pekerjaan berulang-ulang maka rasa bosan pasti datang. Tidak demikian
dengan komputer, komputer melakukan hal-hal yang sama sebanyak 1 juta kali
pun dia akan dengan "senang hati" melakukannya.
Perulangan atau looping adalah pengeksekusian suatu blok perintah selama
kondisi yang digunakan masih bernilai TRUE. Saya yakin anda pernah disuruh
orang tua anda waktu kecil untuk berhitung 1 - 10. Dimana jika sudah melebihi
10 anda harus berhenti berhitung karena kondisi meminta anda untuk berhenti
pada saat mencapai sepuluh.
Analogi sederhana diatas dapat menggambarkan bagaimana suatu looping bekerja.
Dalam shell script terdapat dua tipe perulangan yaitu:
- for loop
- for...do...done
- for...in...do...done
- while loop
Umumnnya perulangan `for` digunakan apabila kita sudah tahu batas perulangan
yang akan kita lakukan. Syntax penulisannya adalah:
for nama_variabel in list
do
...
...
done
-------------------------
for (( expr1; expr2; expr3 ))
do
...
...
done
-------------------
3.1 for...do...done
-------------------
Berikut adalah contoh untuk penggunaan for...do...done.
lug@stikom.edu:~$ nano for.sh
#!/bin/sh
for (( i=0; i<=5; i++ ))
do
echo "PENALTI KE-$i GOL"!!!
done
lug@stikom.edu:~$ sh for.sh
PENALTI KE-1 GOL!!!
PENALTI KE-2 GOL!!!
PENALTI KE-3 GOL!!!
PENALTI KE-4 GOL!!!
PENALTI KE-5 GOL!!!
------------------------
3.2 for...in...do...done
------------------------
Pada for-in terdapat perbedaan cara penggunaan, pada for-in kita melakukan
perulangan berdasarkan data yang ada pada list. Dimana setiap list dipisahkan
oleh tanda spasi. Berikut adalah contohnya:
lug@stikom.edu:~$ nano for-in.sh
#!/bin/sh
for i in 1 2 3 4 5 ; do
echo -n "$i "
done
echo ''
for abjad in "A B C D E" ; do
echo -n "$abjad "
done
echo ''
lug@stikom.edu:~$ sh for-in.sh
1 2 3 4 5
A B C D E
---------------------
3.3 while...do...done
---------------------
Bentuk perulangan lain yang juga sering digunakan adalah while. Perulangan
menggunakan while lebih difokuskan jika kita memang belum mengetahui batas
perulangan yang dilakukan. Syntax penggunaan while adalah sebagai berikut:
while [ kondisi ]
do
...
...
done
Berikut adalah contoh penggunaannya:
lug@stikom.edu:~$ nano while.sh
#!/bin/sh
i=5
while [ $i -ge 1 ]
do
echo "$i Mod 2 = "`expr $i % 2`
i=`expr $i - 1`
done
lug@stikom.edu:~$ sh while.sh
5 Mod 2 = 1
4 Mod 2 = 0
3 Mod 2 = 1
2 Mod 2 = 0
1 Mod 2 = 1
-------------------------
3.4 Percabangan Bersarang
-------------------------
Suatu percabangan dapat berisi perbacabangan yang lain misalnya for didalam
for atau while didalam while atau kombinasi keduanya. Nah bentuk inilah yang
dinamakan percabangan bersarang(nested loop). Jumlah banyaknya nested loop
dapat dikatakan tidak terbatas.
Anda sebagai pemrogram bebas dapat memasukkan
sebanyak mungkin percabangan bersarang, tapi tentu dengan berbagai
pertimbangan teknis. Umumnya maksimal perbacangan bersarang yang sering
penulis gunakan adalah tiga, namun pada beberapa kondisi bisa lebih dari itu.
Jadi itu semua relatif terhadap anda sebagai pemrogram dan kondisi yang
anda hadapi.
Contoh berikut menunjukkan percabangan bersarang menggunakan for dengan
kedalaman dua level.
lug@stikom.edu:~$ nano nested-for.sh
#!/bin/sh
for (( i=1; i<=5; i++ ))
do
for (( j=1; j<=5; j++ ))
do
echo -n "$i "
done
echo ""
done
lug@stikom.edu:~$ sh nested-for.sh
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
---------------------
4.0 Soal-soal Latihan
---------------------
4.1 Jawab:
4.2 Jawab:
4.3 Jawab:
4.4 Jawab:
4.5 Jawab:
---------
REFERENSI
---------
http://www.freeos.com/guides/lsst/
http://en.wikipedia.org/wiki/Shell_script
http://ilmukomputer.com/2007/03/06/membaca-proses-dengan-shell-script/

Más contenido relacionado

La actualidad más candente

La actualidad más candente (10)

Os2013 lap2-rizqitohopi
Os2013 lap2-rizqitohopiOs2013 lap2-rizqitohopi
Os2013 lap2-rizqitohopi
 
Os2013 lap6-ridwan
Os2013 lap6-ridwanOs2013 lap6-ridwan
Os2013 lap6-ridwan
 
Os2013 lap5-rizqitohopi
Os2013 lap5-rizqitohopiOs2013 lap5-rizqitohopi
Os2013 lap5-rizqitohopi
 
Seni cmd
Seni cmdSeni cmd
Seni cmd
 
Pengenalan PHP
Pengenalan PHPPengenalan PHP
Pengenalan PHP
 
Os2013 lap1-sasmita daeng sembang
Os2013 lap1-sasmita daeng sembangOs2013 lap1-sasmita daeng sembang
Os2013 lap1-sasmita daeng sembang
 
ARMAN RIDWANSYAH
ARMAN RIDWANSYAH ARMAN RIDWANSYAH
ARMAN RIDWANSYAH
 
Praktikum 5B
Praktikum 5BPraktikum 5B
Praktikum 5B
 
Perintah dasar linux
Perintah dasar linuxPerintah dasar linux
Perintah dasar linux
 
Pertemuan7
Pertemuan7Pertemuan7
Pertemuan7
 

Similar a orial mini-shell

Dasar Pemrograman PHP dan MySQL
Dasar Pemrograman PHP dan MySQLDasar Pemrograman PHP dan MySQL
Dasar Pemrograman PHP dan MySQLOcim Nationalism
 
200643579008 Dasar Pemprograman P H P Dab My S Q L
200643579008  Dasar  Pemprograman  P H P Dab  My S Q L200643579008  Dasar  Pemprograman  P H P Dab  My S Q L
200643579008 Dasar Pemprograman P H P Dab My S Q Lgobed
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operatorFisma Ananda
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operatorAvenzz Venzz
 
2.1 adp tipe data dan operator
2.1 adp tipe data dan operator2.1 adp tipe data dan operator
2.1 adp tipe data dan operatorHardini_HD
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operatorFaisal Amir
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operatorChabil_Juniar
 
Algoritma 2 adp tipe data dan operator
Algoritma 2   adp tipe data dan operatorAlgoritma 2   adp tipe data dan operator
Algoritma 2 adp tipe data dan operatorAvenzz Venzz
 
Lapres so d_modul2_yuka
Lapres so d_modul2_yukaLapres so d_modul2_yuka
Lapres so d_modul2_yukaYuka Arjaka
 
Slide web programming ii
Slide web programming iiSlide web programming ii
Slide web programming iiIlman Kadori
 
Algoritma dan Pemrograman
Algoritma dan PemrogramanAlgoritma dan Pemrograman
Algoritma dan PemrogramanDiana Anggraini
 
Minggu 4 - Notasi Pseudocode.pptx
Minggu 4 - Notasi Pseudocode.pptxMinggu 4 - Notasi Pseudocode.pptx
Minggu 4 - Notasi Pseudocode.pptxAnnaUrnika1
 
2. dasar program php mysql
2. dasar program php mysql2. dasar program php mysql
2. dasar program php mysqlfaizibra
 

Similar a orial mini-shell (20)

Anon phpmysql)
Anon phpmysql)Anon phpmysql)
Anon phpmysql)
 
Anon phpmysql
Anon phpmysqlAnon phpmysql
Anon phpmysql
 
Dasar Pemrograman PHP dan MySQL
Dasar Pemrograman PHP dan MySQLDasar Pemrograman PHP dan MySQL
Dasar Pemrograman PHP dan MySQL
 
200643579008 Dasar Pemprograman P H P Dab My S Q L
200643579008  Dasar  Pemprograman  P H P Dab  My S Q L200643579008  Dasar  Pemprograman  P H P Dab  My S Q L
200643579008 Dasar Pemprograman P H P Dab My S Q L
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operator
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operator
 
2.1 adp tipe data dan operator
2.1 adp tipe data dan operator2.1 adp tipe data dan operator
2.1 adp tipe data dan operator
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operator
 
2 adp tipe data dan operator
2   adp tipe data dan operator2   adp tipe data dan operator
2 adp tipe data dan operator
 
Algoritma 2 adp tipe data dan operator
Algoritma 2   adp tipe data dan operatorAlgoritma 2   adp tipe data dan operator
Algoritma 2 adp tipe data dan operator
 
Lapres so d_modul2_yuka
Lapres so d_modul2_yukaLapres so d_modul2_yuka
Lapres so d_modul2_yuka
 
Slide web programming ii
Slide web programming iiSlide web programming ii
Slide web programming ii
 
Bab 9 stream dan sed
Bab 9 stream dan sedBab 9 stream dan sed
Bab 9 stream dan sed
 
C++
C++C++
C++
 
Kotiln Siapa Suka.pdf
Kotiln Siapa Suka.pdfKotiln Siapa Suka.pdf
Kotiln Siapa Suka.pdf
 
Algoritma dan Pemrograman
Algoritma dan PemrogramanAlgoritma dan Pemrograman
Algoritma dan Pemrograman
 
Minggu 4 - Notasi Pseudocode.pptx
Minggu 4 - Notasi Pseudocode.pptxMinggu 4 - Notasi Pseudocode.pptx
Minggu 4 - Notasi Pseudocode.pptx
 
Anon phpmysql
Anon phpmysqlAnon phpmysql
Anon phpmysql
 
2. dasar program php mysql
2. dasar program php mysql2. dasar program php mysql
2. dasar program php mysql
 
Anon phpmysql
Anon phpmysqlAnon phpmysql
Anon phpmysql
 

orial mini-shell

  • 1. ================================ TUTORIAL MINI - SHELL SCRIPT ================================ Rio Astamal - rio@rioastamal.net -------------------------------- versi 0.1 - 15/05/2008 -------------------------------- Lisensi - Creative Commons Attribution-Share Alike 3.0 : BY SA -------------------------------- http://www.rioastamal.net/ -------------------------------- 1. Shell Script 1.0 Apa Itu Shell Script? 1.1 Variabel 1.2 Command Line & Argument 1.3 Perhitungan Aritmatik 1.4 User input 1.5 Piping 1.6 Redirection 1.7 Fungsi 2. Percabangan 2.0 Percabangan dalam shell script 2.1 if...then...fi 2.2 if...then...else...fi 2.3 if...then...elif...else...if 2.4 nested if 2.5 case...in...esac 2.6 Menangkap error status 3. Perulangan 3.0 Perulangan dalam shell script 3.1 for...do...done 3.2 for...in...do...done 3.3 while...do...done 3.4 Perulangan bersarang 4. Soal-soal Latihan 4.1 Anda ingin membersihkan Cache Firefox jika telah mencapai 5MB Tips: gunakan perintah `du` untuk mengecek ukuran folder 4.2 Anda ingin membuat script untuk melakukan backup otomatis log file server apache setiap tengah malam lalu otomatis membersihkannya 4.3 Anda ingin membuat membuat tampilan seperti berikut menggunakan looping, 4.3.1 1 1 * * * * * * 22 12 * * * * * * 333 123 * * * * * * 4444 1234 * * * * * * 55555 12345 * * * * * * 4.4 Anda ingin membuat shell script yang fungsinya mirip dengan program `ps` yaitu untuk menampilkan proses dan juga informasi system 4.5 Anda ingin membuat game tebak angka sederhana dimana jika dijalankan outputnya akan seperti berikut: *********************************** SELAMAT DATANG DI GAME TEBAK ANGKA *********************************** PERATURAN GAME: 1. Angka diantara 10 - 50 2. Angka adalah genap 3. Maksimal percobaan adalah 5 kali
  • 2. Masukkan Nama: STIKOM Masukkan angka: 20 STIKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1) Masukkan angka: 34 STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-2) Masukkan angka: 30 STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-3) Masukkan angka: 28 STIKOM, angka yang anda masukkan terlalu besar (percobaan ke-4) Masukkan angka: 22 ------------------------ GAME OVER ---------------------------- JAWABAN YANG BENAR ADALAH : 24 Apakah anda ingin coba lagi (y/t) ? y --------------------------------------------------------------- Masukkan angka: 44 STIKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1) Masukkan angka: 48 ------------- SELAMAT TEBAKAN ANDA BENAR ---------------------- Anda berhasil menebak dalam 2 kali percobaan. Apakah anda ingin coba lagi (y/t) ? t --------------------------------------------------------------- ------------- (c) COPYRIGHT 2008 - LUG STIKOM ----------------- Jawaban didapat secara random antara 10 - 50 dan harus genap. Untuk mendapatan random number pada shell script dapat digunakan beberapa cara diantaranya: 1. Menggunakan magic variable $RANDOM misal untuk menghasilkan angka range 1 - 10 maka: echo $[ ($RANDOM % 10) + 1 ] 2. Langsung berkomunikasi dengan file /dev/random atau /dev/urandom. File ini isinya selalu berubah sehingga dengan menggunakan perintah `cksum` kita akan mendapatkan angka yang acak, contoh: expr `dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -d" " -f1` % 10 + 1 -------------------------------------------------------------------------------- ------------------------ 1.0 APA ITU SHELL SCRIPT ------------------------ Dalam lingkungan unix, kata 'shell' mengacu pada semua program yang dapat dijalankan pada command line. Jadi secara sederhana shell script merupakan kumpulan perintah yang disimpan pada suatu file. Extensi umum yang digunakan untuk shell script adalah '.sh', sebenarnya hal ini tidak mutlak karena pada dasarnya unix mengabaikan extensi file. Shell juga dapat mengacu pada program yang menangani command line itu sendiri dalam sistem operasi UNIX program tersebut adalah Bourne Shell (1978 - Steve Bourne) disingkat sh. Dalam sistem operasi GNU/Linux shell yang menjadi standar adalah Bourne Again Shell(bash). Bash merupakan shell yang kompatibel dengan sh dan memiliki lebih banyak fitur. Jika anda ingin menguasai shell script tentu anda harus tahu dan hafal
  • 3. sedikit banyak perintah dasar command line, seperti mengkopi file(cp), merename file(mv), mencetak string (echo), melihat file(cat), dan beberapa perintah dasar lainnya. Shell script juga menyediakan beberapa fitur yang tersedia pada bahasa pemrograman tingkat tinggi seperti variabel, percabangan dan perulangan. Berikut ini adalah contoh sederhana penggunakan shell script: lug@stikom.edu:~$ nano hello.sh #!/bin/sh echo 'HELLO WORLD' Untuk menjalankan ada dua cara, pertama melalui program shell itu sendiri lug@stikom.edu:~$ sh hello.sh Kedua adalah mengeksekusinya secara independen, untuk melakukan hal tersebut anda harus memberi permission 'execute' pada file. lug@stikom.edu:~$ chmod +x hello.sh lug@stikom.edu:~$ ./hello.sh HELLO WORLD Baris pertama #!/bin/sh adalah MUTLAK diperlukan dan HARUS diletakkan pada BARIS PERTAMA agar file yang anda buat dikenali sistem sebagai shell script. Tanda '#!' sering disebut 'shebang' operator. Tanda tersebut menandakan bahwa file tersebut adalah shell script. Sisanya misal '/bin/sh' adalah lokasi file binari atau program. Dalam contoh kita menggunakan program bash '/bin/sh' atau '/bin/bash'. Tanda # jika tidak terletak pada baris dan kolom paling awal akan dianggap sebagai komentar oleh shell. ------------ 1.1 Variabel ------------ Pemberian variabel pada shell script bersifat 'dynamic typing' karena shell script tidak mengenal adanya tipe data. Pada shell script dikenal dua istilah variabel yaitu SYSTEM VARIABLE(SV) dan USER DEFINED VARIABLE (UDV). SV adalah kumpulan variabel yang telah dideklarasikan secara otomatis oleh shell, sedangkan UDV adalah variabel yang kita buat sendiri. Contoh dari variabel SV adalah HOME, SHELL, RANDOM, OSTYPE, dan masih banyak yang lain. Dalam membuat variabel ada beberapa aturan yang harus dipenuhi agar variabel tersebut dianggap valid oleh shell, syntax untuk penamaan variabel adalah: nama_variabel=NILAI Perhatikan bahwa tidak ada spasi antara nama_variabel dengan tanda '=' juga dengan NILAI. Ini adalah suatu KEHARUSAN. Berikut adalah beberapa aturan tentang penamaan variabel: 1. Variabel HARUS diawali ABJAD atau _ (tidak dapat diawali angka) 2. Variabel dapat terdiri dari karakter alphanumeric dan _ 3. Variabel bersifat CaSe SeNsItIvE 4. Jika isi variabel mengandung spasi sebaiknya apit dengan tanda petik (') atau ("). 5. Gunakan escape character () untuk karakter non-literal seperti (', $, ?, dll) Untuk mencetak nilai dari suatu variabel digunakan tanda dollar ($) didepan nama variabel, contoh: lug@stikom.edu:~$ a='Hello '
  • 4. lug@stikom.edu:~$ b='World!' lug@stikom.edu:~$ echo $a$b Hello World! lug@stikom.edu:~$ echo ${a}${b} Hello World! Cara yang terakhir adalah cara yang disarankan untuk menghindari kesalahan dalam melakukan concat string. Jika anda ingin menyimpan output dari suatu perintah kedalam suatu variabel gunakan tanda backtick (`). Contoh, kita akan melihat isi direktori home lalu menyimpannya dalam variabel isi_home. lug@stikom.edu:~$ isi_home=`ls /home` lug@stikom.ecu:~$ echo $isi_home Dalam shel juga terdapat SPECIAL VARIABEL untuk mendapatkan exit status dari suatu program. Pada UNIX setiap program dinyatakan selesai TANPA error apabila exit statusnya SAMA DENGAN 0. Selain itu maka program tersebut selesai tapi dengan error. Variabel tersebut adalah "$?". lug@stikom.edu:~$ ls /home lug@stikom.edu:~$ echo $? 0 lug@stikom.edu:~$ ls /file/ngawur lug@stikom.edu:~$ echo $? 2 Angka 2(TIDAK SAMA DENGAN 0) menunjukkan bahwa program ls keluar dengan status terjadi error. Penggunaan exit sangat penting saat kita membuat shell script yang kompleks, dimana didalamnya kita banyak menggunakan program lain. ------------------------------ 1.2 Command Line dan Argument ------------------------------ Ketika berbicara shell script kita pasti berhubungan dengan command line. Apabila berbicara tentang command line pasti berhubungan dengan argument. Apaliba berbicara tentang argument.....cukup....cukup.... nanti malah sampai sejarah kerajaan majapahit nantinya :) Perintah-perintah command line umumnya memerlukan minimal satu buah argumen agar dapat mengerjakan tugasnya secara optimal. Apa itu argument? secara sederhana argumen adalah text/character yang ditempatkan setelah nama program dengan pemisah minimal satu spasi. Contoh berikut mengilustrasikan pemberian dua argument pada perinta copy file `cp`. Perintah cp memerlukan dua argument yaitu 1)lokasi file awal 2)lokasi file tujuan lug@stikom.edu:~$ cp /foo/bar /tmp/bar ^ ^ argument-1 argument-2 Pada sistem Linux dikenal dua istilah argument short style(UNIX style) dan long style(GNU Style). Hampir setiap program command line pada linux menyediakan dua opsi tersebut saat memberikan argument. Penulisan argument UNIX style biasanya hanya terdiri dari satu huruf contoh '-l' pada perintah `ls`. lug@stikom.edu:~$ ls -l Sedangkan GNU style umumnya terdiri dari minimal sebuah kata contoh '--all' pada perintah `ls`.
  • 5. lug@stikom.edu:~$ ls --all Untuk membaca argument dalam shell script digunakan special variabel yaitu $0, $1, $2,...$9. Variabel $0 adalah nama program itu sendiri. CATATAN: Untuk mengetahui jumlah argument yang diinputkan user gunakan variabel $#, sedangkan untuk mendapatkan seluruh argument gunakan variabel $*. LATIHAN: Buat sebuah shell script untuk menampilkan nama user, nama tersebut diinput melalui argument ke-1 JAWAB: lug@stikom.edu:~$ nano nama.sh #!/bin/sh nama=$1 echo 'Halo '$nama', selamat datang!' lug@stikom.edu:~$ chmod +x nama.sh lug@stikom.edu:~$ ./nama.sh STIKOM Halo STIKOM, selamat datang! lug@stikom.edu:~$ ./nama.sh STIKOM SURABAYA Halo STIKOM, selamat datang! lug@stikom.edu:~$ ./nama.sh 'STIKOM SURABAYA' Halo STIKOM SURABAYA, selamat datang! CATATAN: Untuk menyimpan file pada nano Tekan CTRL-O lalu jika ingin keluar tekan CTRL-X. -------------------------- 1.3 Perhitungan Aritmatik -------------------------- 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 antaran lain: +-----------+-----------------------------------------------------------+ | Operator | KETERANGAN | +-----------+-----------------------------------------------------------+ | + | Operator Penjumlahan contoh: expr 1 + 1 | +-----------+-----------------------------------------------------------+ | - | Operator Pengurangan contoh: expr 10 - 9 | +-----------+-----------------------------------------------------------+ | * | Operator Perkalian contoh: expr 10 * 10 | +-----------+-----------------------------------------------------------+ | / | Operator Pembagian contoh: expr 10 / 2 | +-----------+-----------------------------------------------------------+ | % | Operator Modulus contoh: expr 15 % 3 | +-----------+-----------------------------------------------------------+ 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`. LATIHAN: Buatlah sebuah shell script untuk menghitung nilai dari argument-1 dikali argument-2 ditambah argument-3! JAWABAN:
  • 6. Secara matematis perhitungannya adalah (argument-1 + argument-2) + argument-3. Tidak seperti bahasa tingkat tinggi, pada shell script untuk memberi prioritas pada suatu perhitungan kita menggunakan tanda $[ ... ]. Jadi perhitungannya menjadi $[ argument-1 + argument-3 ] + argument-3 Keuntungan lain ketika kita menggunakan tanda $[...] adalah kita tidak perlu melakukan escaping character pada tanda perkalian(*). Berikut ini adalah shell scriptnya. lug@stikom.edu:~$ nano hitung.sh #!/bin/sh bil1=$1 bil2=$2 bil3=$3 echo -n "HASIL DARI $bil1 * $bil2 + $bil3 = " echo `expr $[ $bil1 * $bil2 ] + $bil3` lug@stikom.edu:~$ chmod +x hitung.sh lug@stikom.edu:~$ ./hitung.sh 10 10 10 HASIL DARI 10 * 10 + 10 = 110 --------------- 1.4 User Input --------------- Selain melalui argument pada command line, cara lain untuk mendapatkan input dari user adalah melalui STANDARD INPUT (STDIN). Dimana user langsung mengetikkan isi dari suatu nilai yang program inginkan. Untuk mendapatkan input dari user dapat digunakan perintah `read`. Perintah read tidak begitu berguna jika kita tidak menyimpan hasil inputan tersebut kedalam sebuah variabel. Untuk menyimpan hasil inputan kita harus memberi satu argument pada perintah read. Argument inilah yang akan menyimpan nilai yang diinputkan. Contoh, lug@stikom.edu:~$ read a 10 lug@stikom.edu:~$ read b 5 lug@stikom.edu:~$ expr $a * $b 50 LATIHAN: Sama dengan latihan sebelumnya, hanya saja kali ini gunakan perintah read untuk membaca setiap bilangan yang diinputkan user. JAWABAN: lug@stikom.edu:~$ nano hitung2.sh #!/bin/sh # deklarasikan variabel dengan nilai NULL bil1= bil2= bil3= echo -n 'Masukkan bilangan-1: ' read bil1 echo -n 'Masukkan bilangan-2: ' read bil2
  • 7. echo -n 'Masukkan bilangan-3: ' read bil3 echo '' echo -n "Hasil dari $bil1 * $bil2 + $bil3 = " echo `expr $[ $bil1 * $bil2 ] + $bil3` lug@stikom.edu:~$ chmod +x hitung2.sh lug@stikom.edu:~$ ./hitung2 Masukkan bilangan-1: 10 Masukkan bilangan-2: 10 Masukkan bilangan-3: 10 Hasil dari 10 * 10 + 10 = 110 ---------- 1.5 Piping ---------- Piping merupakan penggabungan dua atau lebih perintah dimana output dari perintah sebelumnya digunakan sebagai input untuk perintah selanjutnya. Simbol yang digunakan untuk membatasi perintah yang satu dengan yang lain adalah tanda pipe "|". Berikut adalah beberapa contoh sederhana penggunaan piping pada command line. lug@stikom.edu:~$ cat /etc/passwd | wc -l lug@stikom.edu:~$ cat /etc/passwd | sort -r lug@stikom.edu:~$ cat /etc/passwd | grep "/bin/sh/" | wc -l --------------- 1.6 Redirection --------------- Secara umum jika kita ingin mengambil inputan maka kita mengambil dari STANDARD INPUT (STDIN) yaitu keyboard. Sedangkan hasil output program yang tercetak di layar monitor kita disebut STANDARD OUTPUT (STDOUT). Hampir sama dengan STDOUT, error yang dihasilkan program juga ditampilkan lewat monitor biasa disebut STANDARD ERROR (STDERR). Setiap standard mempunyai kode file descriptor sendiri-sendiri diantaranya: - STDIN => File Descriptor: 0 - STDOUT => File Descriptor: 1 - STDERR => File Descriptor: 2 Dengan mengetahui file descriptor tersebut kita dapat melakukan redirection (pengalihan), misal dari dari STDOUT menjadi STDERR atau sebaliknya. Terdapat tiga simbol untuk melakukan redirection diantarnya: 1. Simbol: ">" Keterangan: Simbol tersebut akan meredirect output ke dalam suatu file. Jika file tersebut belum ada maka akan buat secara otomatis, jika file sudah ada ada maka isinya akan di-overwrite/ditimpa. 2. Simbol: ">>" Keterangan: Hampir sama dengan ">" hanya saja jika file sudah ada, maka file isi tersebut tidak dioverwrite tetapi ditambah. 3. Simbol: "<" Keterangan: Simbol "<" artinya input tidak diambil dari STDIN melainkan dari sebuah file. Sebagai contoh sederhana, ketika anda mengetikkan perintah `ls /nama/dir` maka secara default program ls akan menampilkan output ke STDOUT yaitu layar monitor. Jika kita ingin meredirect output yang dihasilkan kedalam
  • 8. sebuah file maka kita dapat menggunakan simbol ">" atau ">>". Intinya segala STDOUT dapat dilakukan redirect. lug@stikom.edu:~$ echo 'DAFTAR ISI FOLDER LUG' > /tmp/data.txt lug@stikom.edu:~$ ls /home/lugstikom >> /tmp/data.txt Untuk contoh "<" kita akan menggunakan program tr, program ini dapat kita gunakan untuk manipulasi teks. Input yang akan kita berikan ke tr adalah dari sebuah file, nantinya teks yang ada pada file tersebut akan di-UPPER CASE semua. lug@stikom.edu:~$ echo 'stikom surabaya' > /tmp/stikom.txt lug@stikom.edu:~$ tr "[a-z]" "[A-Z]" < /tmp/stikom.txt STIKOM SURABAYA Selain meredirect ke file kita juga dapat melakukan redirect ke file descriptor lain. Misal dari STDOUT ke STDERR atau sebaliknya. lug@stikom.edu:~$ rm /file/ngawur 2>&1 lug@stikom.edu:~$ ls / 1>&2 ----------- 1.7 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. Syntax penggunaan fungsi pada shell script adalah: function nama-fungsi() { perintah ... ... return } LATIHAN: Buatlah shell script untuk mencetak banner seperti output berikut: lug@stikom.edu:~$ ./fungsi.sh ============================== SELAMAT DATANG DI LUG-STIKOM ============================== HARI INI: Rabu, 14-05-2008 Tulisan "SELAMAT blabla..." diletakkan dalam fungsi tersendiri, begitu pula fungsi untuk mencetak tanggal. Fungsi mencetak tanggal nantinya akan dipanggil didalam fungsi yang mencetak tulisan "SELAMAT...". JAWAB: lug@stikom.edu:~$ nano fungsi.sh #!/bin/sh function indo_date() { echo `date +"%A, %d-%m-%Y"` return } function welcome() { echo "==============================" echo " SELAMAT DATANG DI LUG-STIKOM" echo "=============================="
  • 9. echo -n "HARI INI: " indo_date return } welcome lug@stikom.edu:~$ chmod +x fungsi.sh Apakah fungsi pada shell script juga menerima parameter? YA tapi dengan sedikit "nyeleneh". Kenapa? jika pada bahasa pemrograman umumnya parameter diletakkan diantara tanda (), tidak demikian dengan shell script. Cara pengambilan parameter pada shell script sama dengan pengambilan argument pada program shell script itu sendiri. Jadi kita dapat menggunakan variabel $*, $#, $0, $1, dan seterusnya. Dibawah ini adalah contoh pembuatan fungsi untuk mengubah text menjadi UPPER-CASE. lug@stikom.edu:~$ nano fungsi2.sh #!/bin/sh function toUpperCase() { teks=$* echo $teks | tr "[a-z]" "[A-Z]" return } echo -n "Masukkan teks(lowercase): " read foo toUpperCase $foo lug@stikom.edu:~$ chmod +x fungsi2.sh lug@stikom.edu:~$ ./fungsi2.sh Masukkan teks(lowercase): ini lower case INI LOWER CASE Pada contoh diatas kita menggunakan variabel $* untuk mengambil parameter bukan $1 atau $2 dkk karena yang akan diinputkan user kemungkinan mengandung dua kata atau lebih. Jadi jika kita menggunakan variabel $1 maka yang terbaca hanya kata pertama. Untuk itu kita gunakan variabel $* yang akan membaca semua parameter. --------------- 2.0 Percabangan --------------- Dengan menggunakan percabangan/branching maka kita dapat mengontrol alur dari shell script yang kita buat. Hal ini memungkinkan kita untuk menulis program yang sangat kompleks pada shell script. Syntax penggunaan percabangan pada shell script adalah: if kondisi then ... ... fi ----------- if kondisi then ... ... else ... ... fi -----------
  • 10. if kondisi1 then ... ... elif kondisi1 ... ... elif kondisi-n ... ... else ... ... fi -------------- case $variabel in pattern1) perintah ... perintah;; pattern1) perintah ... perintah;; *) perintah ... perintah;; esac Untuk melakukan perbandingan kondisi pada data kita dapat menggunakan perintah `test`(man test) atau meletakkannya dalam blok [ ]. Berikut ini adalah operator yang dapat digunakan untuk membandingkan data NUMERIK: +------------+-----------------------------------+ | OPERATOR | KETERANGAN | +------------+-----------------------------------+ | -eq | SAMA DENGAN (=) | +------------+-----------------------------------+ | -ne | TIDAK SAMA DENGAN (!=) | +------------+-----------------------------------+ | -gt | LEBIH BESAR (>) | +------------+-----------------------------------+ | -ge | LEBIH BESAR ATAU SAMA DENGAN (>=) | +------------+-----------------------------------+ | -lt | KURANG DARI (<) | +------------+-----------------------------------+ | -le | KURANG DARI ATAU SAMA DENGAN (<=) | +------------+-----------------------------------+ ------------------- 2.1 if...then...fi ------------------ lug@stikom.edu:~$ nano if-then-fi.sh #!/bin/sh num_arg=$# bil1=$1 bil2=$2 function help() { echo 'Penggunaan: ' echo "$0 bil1 bil2" echo ''
  • 11. echo Dimana bil1 dan bil2 harus angka genap. return } function cek_arg() { if test $num_arg -lt 2 then help exit 1 # keluar dengan exit status 1 fi if [ `expr $bil1 % 2` -ne 0 ] ; then help exit 1 fi if [ `expr $bil2 % 2` -ne 0 ] then help exit 1 fi return } cek_arg echo 'Argument anda adalah '$bil1' dan '$bil2 exit 0 lug@stikom.edu:~$ chmod +x if-then-fi.sh lug@stikom.edu:~$ ./if-then-fi.sh Penggunaan: ./if-then-fi.sh bil1 bil2 Dimana bil1 dan bil2 harus angka genap. lug@stikom.edu:~$ echo $? 1 lug@stikom.edu:~$ ./if-then-fi.sh 2 4 Argument anda adalah 2 dan 4 lug@stikom.edu:~$ echo $? 0 Perintah exit pada shell script dapat digunakan untuk keluar langsung dari program. Pada contoh diatas, jika terdapat kesalahan kita keluar dengan exit status 1( bukan 0 ) artinya program selesai tapi dengan error. Error status tidak harus 1 tapi bisa sembarang angka asal BUKAN 0. ------------------------- 2.2 if...then...else...fi ------------------------- Statement pada blok else akan dieksekusi jika kondisi pada pada blok if bernilai false. lug@stikom.edu:~$ nano if-else.sh #!/bin/sh if test $1 -ge 0 then echo "Argument bernilai positif" else echo "Argument bernilai negatif" fi lug@stikom.edu:~$ chmod +x if-else.sh lug@stikom.edu:~$ ./if-else 10 Argument bernilai positif lug@stikom.edu:~$ ./if-else -2
  • 12. Argument bernilai negatif -------------------------------- 2.3 if...then...elif...else...fi -------------------------------- Statement elif digunakan jika kita ingin memilih lebih dari dua kondisi. lug@stikom.edu:~$ nano if-elif.sh #!/bin/sh pilih= teks="Sistem operasi pilihan anda adalah " echo "Pilih Sistem Operasi Anda: " echo "1. Linux" echo "2. Mac OS" echo "3. FreeBSD" echo "4. Lainnya" echo "" echo -n "Masukkan pilihan: " read pilih if [ $pilih = "1" ] ; then echo "${teks}Linux" elif [ $pilih = "2" ] ; then echo "${teks}Mac OS" elif [ $pilih = "3" ] ; then echo "${teks}FreeBSD" else echo "Anda memilih sistem operasi lain" fi lug@stikom.edu:~$ chmod +x if-elif.sh lug@stikom.edu:~$ ./if-elif.sh Pilih Sistem Operasi Anda: 1. Linux 2. Mac OS 3. FreeBSD 4. Lainnya Masukkan pilihan: 3 Sistem operasi pilihan anda adalah FreeBSD ------------- 2.5 Nested If ------------- Pada shell script anda juga dapat meletakkan blok if didalam if atau istilah "kerennya" nested if. Berikut adalah contoh sederhana penggunaannya. lug@stikom.edu:~$ nano nested-if.sh #!/bin/bash bil=$1 if [ `expr $bil % 2` -eq 0 ] ; then if [ $bil -ge 0 ] ; then echo "Angka yang anda masukkan genap dan >= 0" else echo "Angka yang anda masukkan genap dan < 0" fi else if [ $bil -ge 0 ] ; then echo "Angka yang anda masukkan ganjil dan >= 0" else echo "Angka yang anda masukkan ganjil dan < 0" fi
  • 13. fi lug@stikom.edu:~$ sh nested-if.sh 10 Angka yang anda masukkan genap dan >= 0 lug@stikom.edu:~$ sh nested-if.sh -5 Angka yang anda masukkan ganjil dan < 0 -------------------- 2.6 case...in...esac -------------------- Perintah case hampir sama dengan if-then-elif-else-fi karena dapat memilih dari banyak kondisi. Sebagian orang lebih suka menggunakan case...esac dibanding multi level-if karena lebih mudah dibaca. Pada contoh dibawah ini adalah modifikasi dari contoh if-then-elif-else-fi yang pernah dibahas sebelumnya menggunakan case...in...esac. lug@stikom.edu:~$ nano case.sh #!/bin/sh pilih= teks="Sistem operasi pilihan anda adalah " echo "Pilih Sistem Operasi Anda: " echo "1. Linux" echo "2. Mac OS" echo "3. FreeBSD" echo "4. Lainnya" echo "" echo -n "Masukkan pilihan: " read pilih case $pilih in "1") echo "${teks}Linux";; "2") echo "${teks}Mac OS";; "3") echo "${teks}FreeBSD";; *) echo "Anda memilih sistem operasi lain";; esac lug@stikom.edu:~$ sh case.sh Pilih Sistem Operasi Anda: 1. Linux 2. Mac OS 3. FreeBSD 4. Lainnya Masukkan pilihan: 1 Sistem operasi pilihan anda adalah Linux -------------------------- 2.7 Menangkap Error Status -------------------------- Seperti yang pernah dijelaskan sebelumnya bahwa untuk melihat error status dari suatu perintah kita gunakan special variable "$?". Error status ini dapat kita gunakan untuk melihat apakah perintah yang kita jalankan berjalan tanpa error atau tidak. Error status terdiri dari dua flag yaitu: +-----------+-----------------+ | NO. ERROR | STATUS PROGRAM | +-----------+-----------------+ | 0 | OK | +-----------+-----------------+ | !=0 | TERJADI ERROR | +-----------+-----------------+ NOTE: != artinya TIDAK SAMA DENGAN
  • 14. Setelah anda mengetahui bagaimana menggunakan percabangan pada shell script maka kita dapat menggunakanya untuk menangkap error status yang dihasilkan oleh suatu program. lug@stikom.edu:~$ nano error-status.sh #!/bin/sh perintah=`rm /file/ngawur 2>/dev/null` if [ $? -eq 0 ] ; then echo "PERINTAH SUKSES, EXIT STATUS: $?" else echo "PERINTAH GAGAL, EXIT STATUS: $?" fi ls / 1>/dev/null if [ $? -eq 0 ] ; then echo "PERINTAH SUKSES, EXIT STATUS: $?" else echo "PERINTAH SUKSES, EXIT STATUS: $?" fi lug@stikom.edu:~$ sh error-status.sh PERINTAH GAGAL, EXIT STATUS: 1 PERINTAH SUKSES, EXIT STATUS: 0 Pada contoh diatas STDERR dan STDOUT semuanya di-redirect ke /dev/null. Hal ini agar output perintah rm dan ls tidak muncul dilayar. /dev/null adalah semacam file "blackhole" yang dapat kita gunakan untuk mengririm semua output yang tidak kita inginkan. CATATAN: Variabel $? hanya berisi error status dari perintah yang TERAKHIR KALI dijalankan. ---------------------------------- 3.0 Perulangan dalam Shell Script ---------------------------------- Perbedaan utama kita, manusia dengan komputer adalah jika kita melakukan suatu pekerjaan berulang-ulang maka rasa bosan pasti datang. Tidak demikian dengan komputer, komputer melakukan hal-hal yang sama sebanyak 1 juta kali pun dia akan dengan "senang hati" melakukannya. Perulangan atau looping adalah pengeksekusian suatu blok perintah selama kondisi yang digunakan masih bernilai TRUE. Saya yakin anda pernah disuruh orang tua anda waktu kecil untuk berhitung 1 - 10. Dimana jika sudah melebihi 10 anda harus berhenti berhitung karena kondisi meminta anda untuk berhenti pada saat mencapai sepuluh. Analogi sederhana diatas dapat menggambarkan bagaimana suatu looping bekerja. Dalam shell script terdapat dua tipe perulangan yaitu: - for loop - for...do...done - for...in...do...done - while loop Umumnnya perulangan `for` digunakan apabila kita sudah tahu batas perulangan yang akan kita lakukan. Syntax penulisannya adalah: for nama_variabel in list do ... ...
  • 15. done ------------------------- for (( expr1; expr2; expr3 )) do ... ... done ------------------- 3.1 for...do...done ------------------- Berikut adalah contoh untuk penggunaan for...do...done. lug@stikom.edu:~$ nano for.sh #!/bin/sh for (( i=0; i<=5; i++ )) do echo "PENALTI KE-$i GOL"!!! done lug@stikom.edu:~$ sh for.sh PENALTI KE-1 GOL!!! PENALTI KE-2 GOL!!! PENALTI KE-3 GOL!!! PENALTI KE-4 GOL!!! PENALTI KE-5 GOL!!! ------------------------ 3.2 for...in...do...done ------------------------ Pada for-in terdapat perbedaan cara penggunaan, pada for-in kita melakukan perulangan berdasarkan data yang ada pada list. Dimana setiap list dipisahkan oleh tanda spasi. Berikut adalah contohnya: lug@stikom.edu:~$ nano for-in.sh #!/bin/sh for i in 1 2 3 4 5 ; do echo -n "$i " done echo '' for abjad in "A B C D E" ; do echo -n "$abjad " done echo '' lug@stikom.edu:~$ sh for-in.sh 1 2 3 4 5 A B C D E --------------------- 3.3 while...do...done --------------------- Bentuk perulangan lain yang juga sering digunakan adalah while. Perulangan menggunakan while lebih difokuskan jika kita memang belum mengetahui batas perulangan yang dilakukan. Syntax penggunaan while adalah sebagai berikut: while [ kondisi ] do ... ... done Berikut adalah contoh penggunaannya:
  • 16. lug@stikom.edu:~$ nano while.sh #!/bin/sh i=5 while [ $i -ge 1 ] do echo "$i Mod 2 = "`expr $i % 2` i=`expr $i - 1` done lug@stikom.edu:~$ sh while.sh 5 Mod 2 = 1 4 Mod 2 = 0 3 Mod 2 = 1 2 Mod 2 = 0 1 Mod 2 = 1 ------------------------- 3.4 Percabangan Bersarang ------------------------- Suatu percabangan dapat berisi perbacabangan yang lain misalnya for didalam for atau while didalam while atau kombinasi keduanya. Nah bentuk inilah yang dinamakan percabangan bersarang(nested loop). Jumlah banyaknya nested loop dapat dikatakan tidak terbatas. Anda sebagai pemrogram bebas dapat memasukkan sebanyak mungkin percabangan bersarang, tapi tentu dengan berbagai pertimbangan teknis. Umumnya maksimal perbacangan bersarang yang sering penulis gunakan adalah tiga, namun pada beberapa kondisi bisa lebih dari itu. Jadi itu semua relatif terhadap anda sebagai pemrogram dan kondisi yang anda hadapi. Contoh berikut menunjukkan percabangan bersarang menggunakan for dengan kedalaman dua level. lug@stikom.edu:~$ nano nested-for.sh #!/bin/sh for (( i=1; i<=5; i++ )) do for (( j=1; j<=5; j++ )) do echo -n "$i " done echo "" done lug@stikom.edu:~$ sh nested-for.sh 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 --------------------- 4.0 Soal-soal Latihan --------------------- 4.1 Jawab: 4.2 Jawab: 4.3 Jawab: 4.4 Jawab: 4.5 Jawab: --------- REFERENSI ---------