TUTORIAL MINI - SHELL SCRIPT

chmood
================================
TUTORIAL MINI - SHELL SCRIPT
================================


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: SnipKOM
Β Β Β Β Β Β 
Β Β Β Β Β Β  Masukkan angka: 20
Β Β Β Β Β Β  SnipKOM, angka yang anda masukkan terlalu kecil (percobaan ke-1)
Β Β Β Β Β Β 
Β Β Β Β Β Β  Masukkan angka: 34
Β Β Β Β Β Β  SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-2)
Β Β Β Β Β Β 
Β Β Β Β Β Β  Masukkan angka: 30
Β Β Β Β Β Β  SnipKOM, angka yang anda masukkan terlalu besar (percobaan ke-3)
Β Β Β Β Β Β 
Β Β Β Β Β Β  Masukkan angka: 28
Β Β Β Β Β Β  SnipKOM, 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
Β Β Β Β Β Β  SnipKOM, 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
Β Β Β Β Β Β  ---------------------------------------------------------------
Β Β Β Β Β Β 
Β Β Β Β Β Β 
Β Β Β Β Β Β  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:
Β Β 
Β Β  [email protected]:~$ nano hello.sh
Β Β  #!/bin/sh
Β Β  echo 'HELLO WORLD'
Β Β 
Β Β  Untuk menjalankan ada dua cara, pertama melalui program shell itu sendiri
Β Β 
Β Β  [email protected]:~$ sh hello.sh
Β Β 
Β Β  Kedua adalah mengeksekusinya secara independen, untuk melakukan hal tersebut
Β Β  anda harus memberi permission 'execute' pada file.
Β Β 
Β Β  [email protected]:~$ chmod +x hello.sh
Β Β  [email protected]:~$ ./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:
Β Β 
Β Β  [email protected]:~$ a='Hello '
Β Β  [email protected]:~$ b='World!'
Β Β  [email protected]:~$ echo $a$b
Β Β  Hello World!
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ isi_home=`ls /home`
Β Β  [email protected]:~$ 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 "$?".
Β Β 
Β Β  [email protected]:~$ ls /home
Β Β  [email protected]:~$ echo $?
Β Β  0
Β Β  [email protected]:~$ ls /file/ngawur
Β Β  [email protected]:~$ 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
Β Β 
Β Β  [email protected]:~$ 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`.
Β Β 
Β Β  [email protected]:~$ ls -l
Β Β 
Β Β  Sedangkan GNU style umumnya terdiri dari minimal sebuah kata contoh
Β Β  '--all' pada perintah `ls`.
Β Β 
Β Β  [email protected]:~$ 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:
Β Β  [email protected]:~$ nano nama.sh
Β Β  #!/bin/sh
Β Β  nama=$1
Β Β  echo 'Halo '$nama', selamat datang!'
Β Β 
Β Β  [email protected]:~$ chmod +x nama.sh
Β Β  [email protected]:~$ ./nama.sh BB
Β Β  Halo Akom, selamat datang!
Β Β  [email protected]:~$ ./nama.shΒ  BB ACEH'
Β Β  Halo Akom, selamat datang!
Β Β  [email protected]:~$ ./nama.sh ' BB ACEH'
Β Β  Halo Cyber_Sniper, 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.
Β Β 
Β Β  [email protected]:~$ nano hitung.sh
Β Β  #!/bin/sh

Β Β  bil1=$1
Β Β  bil2=$2
Β Β  bil3=$3

Β Β  echo -n "HASIL DARI $bil1 * $bil2 + $bil3 = "
Β Β  echo `expr $[ $bil1 * $bil2 ] + $bil3`
Β Β  [email protected]:~$ chmod +x hitung.sh
Β Β  [email protected]:~$ ./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,
Β Β 
Β Β  [email protected]:~$ read a
Β Β  10
Β Β  [email protected]:~$ read b
Β Β  5
Β Β  [email protected]:~$ expr $a \* $b
Β Β  50
Β Β 
Β Β  LATIHAN:
Β Β  Sama dengan latihan sebelumnya, hanya saja kali ini gunakan perintah read
Β Β  untuk membaca setiap bilangan yang diinputkan user.
Β Β 
Β Β  JAWABAN:
Β Β  [email protected]:~$ 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`
Β Β  [email protected]:~$ chmod +x hitung2.sh
Β Β  [email protected]:~$ ./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.
Β Β 
Β Β  [email protected]:~$ cat /etc/passwd | wc -l
Β Β  [email protected]:~$ cat /etc/passwd | sort -r
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ echo 'DAFTAR ISI FOLDER LUG' > /tmp/data.txt
Β Β  [email protected]:~$ ls /home/luAkom >> /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.
Β Β 
Β Β  [email protected]:~$ echo 'SMK ACEH UTARA' > /tmp/[email protected]
Β Β  [email protected]:~$ tr "[a-z]" "[A-Z]" < /tmp/[email protected]
Β Β  Snip@Akom
Β Β 
Β Β  Selain meredirect ke file kita juga dapat melakukan redirect ke file
Β Β  descriptor lain. Misal dari STDOUT ke STDERR atau sebaliknya.
Β Β 
Β Β  [email protected]:~$ rm /file/ngawur 2>&1
Β Β  [email protected]:~$ 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:
Β Β 
Β Β  [email protected]:~$ ./fungsi.sh
Β Β  ==============================
Β Β Β  SELAMAT DATANG DI LUG-AKOM
Β Β  ==============================
Β Β  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:
Β Β  [email protected]:~$ nano fungsi.sh
Β Β  #!/bin/sh

Β Β  function indo_date() {
Β Β Β Β Β Β Β Β Β Β  echo `date +"%A, %d-%m-%Y"`
Β Β Β Β Β Β Β Β Β Β  return
Β Β  }

Β Β  function welcome() {
Β Β Β Β Β Β Β Β Β Β  echo "=============================="
Β Β Β Β Β Β Β Β Β Β  echo " SELAMAT DATANG DI LUG-AKOM"
Β Β Β Β Β Β Β Β Β Β  echo "=============================="
Β Β Β Β Β Β Β Β Β Β  echo -n "HARI INI: "
Β Β Β Β Β Β Β Β Β Β  indo_date
Β Β Β Β Β Β Β Β Β Β  return
Β Β  }

Β Β  welcome
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ chmod +x fungsi2.sh
Β Β  [email protected]:~$ ./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
------------------
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ chmod +x if-then-fi.sh
Β Β  [email protected]:~$ ./if-then-fi.sh
Β Β  Penggunaan:
Β Β  ./if-then-fi.sh bil1 bil2

Β Β  Dimana bil1 dan bil2 harus angka genap.
Β Β  [email protected]:~$ echo $?
Β Β  1
Β Β  [email protected]:~$ ./if-then-fi.sh 2 4
Β Β  Argument anda adalah 2 dan 4
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ nano if-else.sh
Β Β  #!/bin/sh
Β Β 
Β Β  if test $1 -ge 0
Β Β  then
Β Β Β Β Β  echo "Argument bernilai positif"
Β Β  else
Β Β Β Β Β  echo "Argument bernilai negatif"
Β Β  fi
Β Β  [email protected]:~$ chmod +x if-else.sh
Β Β  [email protected]:~$ ./if-else 10
Β Β  Argument bernilai positif
Β Β  [email protected]:~$ ./if-else -2
Β Β  Argument bernilai negatif

--------------------------------
2.3 if...then...elif...else...fi
--------------------------------
Β Β  Statement elif digunakan jika kita ingin memilih lebih dari dua kondisi.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ chmod +x if-elif.sh
Β Β  [email protected]:~$ ./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.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ sh nested-if.sh 10
Β Β  Angka yang anda masukkan genap dan >= 0
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ nano for.sh
Β Β  #!/bin/sh
Β Β 
Β Β  for (( i=0; i<=5; i++ ))
Β Β  do
Β Β Β Β Β  echo "PENALTI KE-$i GOL"!!!
Β Β  done
Β Β  [email protected]:~$ 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:
Β Β 
Β Β  [email protected]:~$ 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 ''
Β Β  [email protected]:~$ 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:
Β Β 
Β Β  [email protected]:~$ nano while.sh
Β Β  #!/bin/sh

Β Β  i=5
Β Β  while [ $i -ge 1 ]
Β Β  do
Β Β Β  Β Β  echo "$i Mod 2 = "`expr $i % 2`
Β Β Β Β Β  i=`expr $i - 1`
Β Β  done
Β Β  [email protected]:~$ 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.
Β Β 
Β Β  [email protected]:~$ 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
Β Β  [email protected]:~$ 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
Komentar