Kamis, 31 Januari 2013

SISTEM KEAMANAN JARINGAN KOMPUTER

1.   Apa itu Keamanan Jaringan
Satu hal yang perlu diingat bahwa tidak ada jaringan yang anti sadap atau tidak ada jaringan komputer yang benar-benar aman. Sifat dari jaringan adalah melakukan komunikasi. Setiap komunikasi dapat jatuh ke tangan orang lain dan disalahgunakan. Sistem keamanan membantu mengamankan jaringan tanpa menghalangi penggunaannya dan menempatkan antisipasi ketika jaringan berhasil ditembus. Selain itu, pastikan bahwa user dalam jaringan memiliki pengetahuan yang cukup mengenai keamanan dan pastikan bahwa mereka menerima dan memahami rencana keamanan yang Anda buat. Jika mereka tidak memahami hal tersebut, maka mereka akan menciptakan  lubang (hole) keamanan pada jaringan Anda.
    
Ada dua elemen utama pembentuk keamanan jaringan :
·  Tembok pengamanan, baik secara fisik maupun maya, yang ditaruh diantara piranti dan layanan jaringan yang digunakan dan orang-orang yang akan berbuat jahat.
·  Rencana pengamanan, yang akan diimplementasikan bersama dengan user lainnya, untuk menjaga agar sistem tidak bisa ditembus dari luar.
    
Segi-segi keamanan didefinisikan dari kelima point ini:
a. Confidentiality Mensyaratkan bahwa informasi (data) hanya bisa diakses oleh pihak yang memiliki wewenang.
b.  Integrity Mensyaratkan bahwa informasi hanya dapat diubah oleh pihak yang memiliki wewenang.
c.  Availability Mensyaratkan bahwa informasi tersedia untuk pihak yang memiliki wewenang ketika dibutuhkan.
d.  Authentication Mensyaratkan bahwa pengirim suatu informasi dapat diidentifikasi dengan benar dan ada jaminan bahwa identitas yang didapat tidak palsu.
e.  Nonrepudiation Mensyaratkan bahwa baik pengirim maupun penerima informasi tidak dapat menyangkal pengiriman dan penerimaan pesan.
   
Serangan (gangguan) terhadap keamanan dapat dikategorikan dalam empat kategori utama yakni:
a. Interruption
Suatu aset dari suatu sistem diserang sehingga menjadi tidak tersedia atau tidak dapat dipakai oleh yang berwenang. Contohnya adalah perusakan/modifikasi terhadap piranti keras atau saluran jaringan.
b. Interception
Suatu pihak yang tidak berwenang mendapatkan akses pada suatu aset. Pihak yang dimaksud bisa berupa  orang, program, atau sistem yang lain. Contohnya adalah penyadapan terhadap data dalam suatu jaringan.
c. Modification
Suatu pihak yang tidak berwenang dapat melakukan perubahan terhadap suatu aset. Contohnya adalah perubahan nilai pada file data, modifikasi program sehingga berjalan dengan tidak semestinya, dan  modifikasi pesan yang sedang ditransmisikan dalam jaringan.
d. Fabrication
Suatu pihak yang tidak berwenang menyisipkan objek palsu ke dalam sistem.
Contohnya adalah pengiriman pesan palsu kepada orang lain.

Ada beberapa prinsip yang perlu dihindari dalam menangani masalah keamanan :

diam dan semua akan baik-baik saja
sembunyi dan mereka tidak akan dapat menemukan anda
teknologi yang digunakan kompleks/rumit, artinya

2. Kepedulian Masalah Jaringan

Overview
Pendefinisian keamanan (pada jaringan komputer) dapat dilakukan dengan melihat target yang ingin dicapai melalui  konsep 'aman'. Berikut adalah daftar fitur  yang dapat mencegah/mengantisipasi serangan dari pihak luar ataupun pihak dalam.

Security Policy
Sebelum melanjutkan implementasi ke tingkat yang lebih jauh sebaiknya ditentukan dulu apa yang hendak dilindungi dan dilindungi dari siapa. Beberapa pertanyaan berikut dapat membantu penentuan kebijakan keamanan yang diambil.
1.   Informasi apa yang dianggap rahasia atau sensitif ?
2.   Anda melindungi sistem anda dari siapa ?
3.   Apakah anda membutuhkan akses jarak jauh?
4.   Apakah password dan enkripsi cukup melindungi ?
5.   Apakah anda butuh akses internet?
6.   Tindakan apa yang anda lakukan jika ternyata sistem anda dibobol?
Serta masih banyak pertanyaan lain tergantung bentuk organisasi yang anda kelola. Kebijaksanaan keamanan  tergantung sebesar apa anda percaya orang lain, di dalam ataupun di luar organisasi anda. Kebijakan haruslah merupakan keseimbangan antara mengijinkan user untuk mengakses informasi yang dibutuhkan dengan tetap menjaga keamanan sistem.

Keamanan Secara Fisik
Fisik dalam bagian ini diartikan sebagai situasi di mana seseorang dapat masuk ke dalam ruangan  server/jaringan dan dapat mengakses piranti tersebut secara illegal. Orang yang tidak berkepentingan ini bisa saja seorang tamu, staf pembersih, kurir pengantar paket, dan lainnya yang dapat masuk ke ruangan tersebut dan mengutak-atik piranti yang ada. Apabila seseorang memiliki akses terhadap ruangan tersebut, orang  tersebut bisa saja memasang program trojan horse di komputer, melakukan booting dari floppy disk, atau  mencuri data-data penting (seperti file password) dan membongkarnya di tempat yang lebih aman.
Untuk  menjaga keamanan, taruhlah server di ruangan yang dapat dikunci dan pastikan bahwa ruangan tersebut  dikunci dengan baik. Untuk menghindari pengintaian, gunakan screen-saver yang dapat di password. Atur  juga semua komputer untuk melakukan fungsi auto-logout setelah tidak aktif dalam jangka waktu tertentu.

BIOS Security
Sebenarnya seorang  admin direkomendasikan men-disable boot dari floppy. Atau bisa dilakukan dengan membuat password pada BIOS dan memasang boot password.

Password Attack
Banyak orang menyimpan informasi pentingnya pada komputer dan seringkali sebuah password hal yang mencegah orang lain untuk melihatnya. Untuk menghindari serangan password maka sebaiknya user menggunakan password yang cukup baik. Petunjuk pemilihan password :
·  Semua password harus terdiri dari paling sedikit 7 karakter.
· Masukkan kombinasi huruf, angka, dan tanda baca sebanyak mungkin dengan catatan bahwa password  tetap mudah untuk diingat. Salah satu caranya adalah mengkombinasikan kata-kata acak dengan tanda baca  atau dengan mengkombinasikan kata-kata dengan angka. Contoh : rasa#melon@manis, komputer0digital1, kurang<lebih>2001
· Gunakan huruf pertama frasa yang gampang diingat. Contoh: dilarang parkir antara pukul 7 pagi hingga pukul 8 sore à dpap7php8s, tidak ada sistem yang benar-benar aman dalam konteks jaringan à tasybbadkj
· Gunakan angka atau tanda baca untuk menggantikan huruf di password. Contoh : keberhasilan à k3b3rh45!l4n
·  Gantilah password secara teratur

Malicious Code
Malicious code bisa berupa virus, trojan atau worm, biasanya berupa kode instruksi yang akan memberatkan sistem sehingga performansi sistem menurun. Cara mengantisipasinya bisa dilihat pada 6 contoh berikut :
1. berikan kesadaran pada user tentang ancaman virus.
2. gunakan program anti virus yang baik pada workstation, server dan gateway internet (jika punya).
3. ajarkan dan latih user cara menggunakan program anti virus
4. sebagai admin sebaiknya selalu mengupdate program anti-virus dan database virus
5. biasakan para user untuk TIDAK membuka file attachment email atau file apapun dari floppy sebelum 110 % yakin atau tidak attachment/file tsb “bersih”.
6.  pastikan kebijakan kemanan anda up to date.

Sniffer
Sniffer adalah sebuah device penyadapan komunikasi jaringan komputer dengan memanfaatkan mode premicious pada ethernet. Karena jaringan komunikasi komputer terdiri dari data biner acak maka sniffer ini biasanya memiliki penganalisis protokol sehingga data biner acak dapat dipecahkan. Fungsi sniffer bagi pengelola bisa untuk pemeliharaan jaringan, bagi orang luar bisa untuk menjebol sistem.
Cara paling mudah untuk mengantisipasi Sniffer adalah menggunakan aplikasi yang secure, misal : ssh, ssl, secureftp dan lain-lain

Scanner
Layanan jaringan (network service) yang berbeda berjalan pada port yang berbeda juga. Tiap layanan jaringan berjalan pada alamat jaringan tertentu (mis. 167.205.48.130) dan mendengarkan (listening) pada satu atau lebih port (antara 0 hingga 65535). Keduanya membentuk apa yang dinamakan socket  address yang mengidentifikasikan secara unik suatu layanan dalam jaringan. Port 0 hingga 1023 yang paling umum dipergunakan didefinisikan sebagai well-known number dalam konvensi UNIX dan dideskripsikan dalam RFC 1700.
Port Scanner merupakan program yang didesain untuk menemukan layanan (service) apa saja yang dijalankan pada host jaringan. Untuk mendapatkan akses ke host, cracker harus mengetahui titik-titik kelemahan yang ada. Sebagai contoh, apabila cracker sudah mengetahui bahwa host menjalankan proses ftp server, ia dapat menggunakan kelemahan-kelemahan yang ada pada ftp server untuk mendapatkan akses. Dari bagian ini kita dapat mengambil kesimpulan bahwa layanan yang tidak benar-benar diperlukan sebaiknya dihilangkan untuk memperkecil resiko keamanan yang mungkin terjadi.
Mirip dengan port scanner pada bagian sebelumnya, network scanner memberikan informasi mengenai sasaran yang dituju, misalnya saja sistem operasi yang dipergunakan, layanan jaringan yang aktif, jenis mesin yang terhubung ke network, serta konfigurasi jaringan. Terkadang, network scanner juga mengintegrasikan port scanner dalam aplikasinya. Tool ini berguna untuk mencari informasi mengenai target sebanyak mungkin sebelum melakukan serangan yang sebenarnya. Dengan mengetahui kondisi dan konfigurasi jaringan, seseorang akan lebih mudah masuk dan merusak sistem.
Contoh scanner : Nmap, Netcat, NetScan Tools Pro 2000, SuperScan

Spoofing
Spoofing (penyamaran) biasa dilakukan oleh pihak yang tidak bertanggungjawab untuk menggunakan fasilitas dan resource sistem. Spoofing adalah teknik melakukan penyamaran sehingga terdeteksi sebagai identitas yang bukan sebenarnya, misal : menyamar sebagai IP tertentu, nama komputer bahkan e-mail address tertentu. Antisipasinya dapat dilakukan dengan menggunakan aplikasi firewall.

Denial of Service
Denial of Service (DoS) merupakan serangan dimana suatu pihak mengekploitasi aspek dari suite Internet Protocol untuk menghalangi akses pihak yang berhak atas informasi atau sistem yang diserang.  Hole yang memungkinkan DoS berada dalam kategori C, yang berada dalam prioritas rendah. Serangan ini  biasanya didasarkan pada sistem operasi yang dipergunakan. Artinya, hole ini berada di dalam bagian  jaringan dari sistem operasi itu sendiri. Ketika hole macam ini muncul, hole ini harus diperbaiki oleh  pemilik software tersebut atau di-patch oleh vendor yang mengeluarkan sistem operasi tersebut. Contoh dari serangan ini adalah TCP SYN dimana permintaan koneksi jaringan dikirimkan ke server dalam jumlah yang sangat besar. Akibatnya server dibanjiri permintaan koneksi dan menjadi lambat atau bahkan tidak dapat dicapai sama sekali. Hole ini terdapat nyaris di semua sistem operasi yang menjalankan TCP/IP  untuk berkomunikasi di internet. Hal ini tampaknya menjadi masalah yang terdapat di dalam desain suite  TCP/IP, dan merupakan sesuatu yang tidak mudah diselesaikan.
Dalam serangan DoS, sesorang dapat melakukan sesuatu yang mengganggu kinerja dan operasi jaringan atau server. Akibat dari serangan ini adalah lambatnya server atau jaringan dalam merespon, atau bahkan bisa menyebabkan crash. Serangan DoS mengganggu user yang sah untuk mendapatkan layanan yang sah, namun tidak memungkinkan cracker masuk ke dalam sistem jaringan yang ada. Namun, serangan semacam ini terhadap server yang menangani kegiatan e-commerce akan dapat berakibat kerugian dalam bentuk  finansial.


3.   Enkripsi Untuk Keamanan Data Pada Jaringan
             Salah satu hal yang penting dalam komunikasi menggunakan computer untuk menjamin kerahasian data adalah enkripsi. Enkripsi dalah sebuah proses yang melakukan perubahan sebuah kode dari yang bisa dimengerti menjadi sebuah kode yang tidak bisa dimengerti (tidak terbaca). Enkripsi dapat diartikan sebagai kode atau chiper. Sebuah sistem pengkodean menggunakan suatu table atau kamus yang telah didefinisikan untuk mengganti kata dari informasi atau yang merupakan bagian dari informasi yang dikirim. Sebuah chiper menggunakan suatu algoritma yang dapat mengkodekan semua aliran data (stream) bit dari sebuah pesan menjadi cryptogram yang tidak dimengerti (unitelligible). Karena teknik cipher merupakan suatu sistem yang telah siap untuk di automasi, maka teknik ini digunakan dalam sistem keamanan komputer dan network.
    Pada bagian selanjutnya kita akan membahas berbagai macam teknik enkripsi yang biasa digunakan dalam sistem sekuriti dari sistem komputer dan network.
     
      A. Enkripsi Konvensional.
           Proses enkripsi ini dapat digambarkan sebagai berikut :



Plain teks -> Algoritma Enkripsi -> Cipher teks ->Algoritma Dekrispsi -> Plain teks
User A |                                                       | User B
|----------------------Kunci (Key) --------------------|
Gambar 1


   Informasi asal yang dapat di mengerti di simbolkan oleh Plain teks, yang kemudian oleh algoritma Enkripsi diterjemahkan menjadi informasi yang tidak dapat untuk dimengerti yang disimbolkan dengan cipher teks. Proses enkripsi terdiri dari dua yaitu algoritma dan kunci. Kunci biasanya merupakan suatu string bit yang pendek yang mengontrol algoritma. Algoritma enkripsi akan menghasilkan hasil yang berbeda tergantung pada kunci yang digunakan. Mengubah kunci dari enkripsi akan mengubah output dari algortima enkripsi.Sekali cipher teks telah dihasilkan, kemudian ditransmisikan. Pada bagian penerima selanjutnya cipher teks yang diterima diubah kembali ke plain teks dengan algoritma dan dan kunci yang sama.

    Keamanan dari enkripsi konvensional bergantung pada beberapa faktor. Pertama algoritma enkripsi harus cukup kuat sehingga menjadikan sangat sulit untuk mendekripsi cipher teks dengan dasar cipher teks tersebut. Lebih jauh dari itu keamanan dari algoritma enkripsi konvensional bergantung pada kerahasian dari kuncinya bukan algoritmanya. Yaitu dengan asumsi bahwa adalah sangat tidak praktis untuk mendekripsikan informasi dengan dasar cipher teks dan pengetahuan tentang algoritma diskripsi / enkripsi. Atau dengan kata lain, kita tidak perlu menjaga kerahasiaan dari algoritma tetapi cukup dengan kerahasiaan kuncinya.Manfaat dari konvensional enkripsi algoritma adalah kemudahan dalam penggunaan secara luas. Dengan kenyataan bahwa algoritma ini tidak perlu dijaga kerahasiaannya dengan maksud bahwa pembuat dapat dan mampu membuat suatu implementasi dalam bentuk chip dengan harga yang murah. Chips ini dapat tersedia secara luas dan disediakan pula untuk beberapa jenis produk. Dengan penggunaan dari enkripsi konvensional, prinsip keamanan adalah menjadi menjaga keamanan dari kunci.Model enkripsi yang digunakan secara luas adalah model yang didasarkan pada data encrytion standard (DES), yang diambil oleh Biro standart nasional US pada tahun 1977. Untuk DES data di enkripsi dalam 64 bit block dengan menggunakan 56 bit kunci. Dengan menggunakan kunci ini, 64 data input diubah dengan suatu urutan dari metode menjadi 64 bit output. Proses yang yang sama dengan kunci yang sama digunakan untuk mengubah kembali enkripsi.
    
      B. Enkripsi Public-Key
    Salah satu yang menjadi kesulitan utama dari enkripsi konvensional adalah perlunya untuk mendistribusikan kunci yang digunakan dalam keadaan aman. Sebuah cara yang tepat telah diketemukan untuk mengatasi kelemahan ini dengan suatu model enkripsi yang secara mengejutkan tidak memerlukan sebuah kunci untuk didistribusikan. Metode ini dikenal dengan nama enkripsi public-key dan pertama kali diperkenalkan pada tahun 1976.

    Plain teks -> Algoritma Enkripsi -> Cipher teks -> Algoritma Dekrispsi -> Plain teks

                                   User A |                                                       | User B
                                                                                      Private Key B ----|
                                 |----------------------Kunci (Key) --------------------|
                                                               Gambar 2

    Algoritma tersebut seperti yang digambarkan pada gambar diatas. Untuk enkripsi konvensional, kunci yang digunakan pada prosen enkripsi dan dekripsi adalah sama. Tetapi ini bukanlah kondisi sesungguhnya yang diperlukan. Namun adalah dimungkinkan untuk membangun suatu algoritma yang menggunakan satu kunci untuk enkripsi dan pasangannya, kunci yang berbeda, untuk dekripsi. Lebih jauh lagi adalah mungkin untuk menciptakan suatu algoritma yang mana pengetahuan tentang algoritma enkripsi ditambah kunci enkripsi tidak cukup untuk menentukan kunci dekrispi. Sehingga teknik berikut ini akan dapat dilakukan :
   1. Masing - masing dari sistem dalam network akan menciptakan sepasang kunci yang digunakan untuk enkripsi dan dekripsi dari informasi yang diterima.
    2. Masing - masing dari sistem akan menerbitkan kunci enkripsinya ( public key ) dengan memasang dalam register umum atau file, sedang pasangannya tetap dijaga sebagai kunci pribadi ( private key ).
    3.  Jika A ingin mengisim pesan kepada B, maka A akan mengenkripsi pesannya dengan kunci publik dari B.
   4. Ketika B menerima pesan dari A maka B akan menggunakan kunci privatenya untuk mendeskripsi pesan dari A.

         Seperti yang kita lihat, public-key memecahkan masalah pendistribusian karena tidak diperlukan suatu kunci untuk didistribusikan. Semua partisipan mempunyai akses ke kunci publik (public key) dan kunci pribadi dihasilkan secara lokal oleh setiap partisipan sehingga tidak perlu untuk didistribusikan. Selama sistem mengontrol masing - masing private key dengan baik maka komunikasi menjadi komunikasi yang aman. Setiap sistem mengubah private key pasangannya public key akan menggantikan public key yang lama. Yang menjadi kelemahan dari metode enkripsi publik key adalah jika dibandingkan dengan metode enkripsi konvensional algoritma enkripsi ini mempunyai algoritma yang lebih komplek. Sehingga untuk perbandingan ukuran dan harga dari hardware, metode publik key akan menghasilkan performance yang lebih rendah. Tabel berikut ini akan memperlihatkan berbagai aspek penting dari enkripsi konvensional dan public key.

     Enkripsi Konvensional
     Yang dibutuhkan untuk bekerja :
    1.   Algoritma yang sama dengan kunci yang sama dapat digunakan untuk proses dekripsi - enkripsi.
      2.   Pengirim dan penerima harus membagi algoritma dan kunci yang sama.
     Yang dibutuhkan untuk keamanan :
      1.   Kunci harus dirahasiakan.
     2.  Adalah tidak mungkin atau sangat tidak praktis untuk menerjemahkan informasi yang telah dienkripsi.
      3. Pengetahuan tentang algoritma dan sample dari kata yang terenkripsi tidak mencukupi untuk menentukan kunc.

      Enkripsi Public Key
      Yang dibutuhkan untuk bekerja :
     1.   Algoritma yang digunakan untuk enkripsi dan dekripsi dengan sepasang kunci, satu untuk enkripsi satu untuk dekripsi.
     2.   Pengirim dan penerima harus mempunyai sepasang kunci yang cocok.
     Yang dibutuhkan untuk keamanan :
     1.   Salah satu dari kunci harus dirahasiakan.
     2.   Adalah tidak mungkin atau sangat tidak praktis untuk menerjemahkan informasi yang telah dienkripsi.
     Pengetahuan tentang algoritma dan sample dari kata yang terenkripsi tidak mencukupi untu menentukan kunci.

Selasa, 22 Januari 2013

Komponen Server Tipe-RAID


Mengenal Komponen Hardware Server Tipe-RAID



Secara sederhana, RAID adalah sebuah cara menggabungkan sekelompok hard disk untuk membentuk satu “virtual” drive. Tujuannya bukan hanya sekedar untuk mendapatkan ruang yang lebih besar, tetapi juga membangun perlindungan data dengan fungsi redundansi / melakukan duplikasi data dalam drive tambahan. Oleh karena itu, bila kelak salah satu drive gagal/down, maka data akan tetap aman dan tersedia. Singkatnya, RAID menyediakan dua keunggulan utama: ruang dan keamanan data. Nah, dalam artikel berikut saya akan berbicara mengenai RAID beserta tingkatan, kelebihan dan kekurangannya.
A. TIPE RAID
Ada dua tipe implementasi RAID. Yaitu:
Software RAID: Semua konfigurasi ditangani oleh sistem operasi/software. Keuntungan dari RAID software yang sangat murah, karena tidak perlu membeli perangkat keras tambahan untuk mengelola RAID. Tetapi karena tidak dikelola oleh hardware sendiri, maka kelemahannya adalah dia butuh sumber daya memori dan daya CPU tambahan dari komputer.
Hardware RAID: Semua informasi tentang konfigurasi RAID disimpan dalam interface card dalam bentuk perangkat keras. Keuntungannya adalah meningkatkan kinerja. Karena semuanya ditangani oleh interface card, sehingga komputer tidak tidak perlu menggunakan memori atau daya CPU untuk menjalankan RAID.
Dulu sekali, Hardware RAIDbisa dikatakan jadi primadona. Namun seiring berkembangnya waktu,  multi-core CPU dan memori sudah bisa didapatkan dengan harga yang semakin terjangkau dan semakin mumpuni kualitasnya. Maka dengan CPU yang lebih cepat, Software RAID pun sekarang bisa melakukan kinerja sebaik Hardware RAID dan bahkan bisa lebih cepat dalam beberapa kasus.
B. LEVEL RAID
Tingkatan RAID pada dasarnya merupakan cara / teknik konfigurasi hard drive. Setiap level memiliki kelebihan dan kekurangan. Ada yang unggul di sisi ruang /storage tetapi lemah di sisi keamanan datanya, ada yang unggul di sisi keamanan namun lemah kinerjanya, dsb. Pada dasarnya tidak ada yang “terbaik” untuk RAID. Masing-masing dari level berikut bisa dikatakan “terbaik” tergantung dengan situasinya. Jadi terserah kebijaksanaan kita untuk menentukan.

Raid 0

Dengan RAID 0, kita menggunakan dua / lebih hard disk yang bertindak seolah-olah mereka satu hard disk. Raid 0 diibaratkan memiliki  “0″ perlindungan. Bahkan karena kita menggunakan dua hard disk maka kita memiliki dua kali risiko kehilangan data. Karena bila salah satu drive mengalami error, maka kita terancam kehilangan data.
Kelebihan:
  • RAID 0 menggunakan ruang hard disk secara maksimal karena tidak ada redundasi data.
  • RAID 0 punya kecepatan yang lebih karena lebih banyak ruang dari dua hard disk yang dijadikan satu.
Kekurangan:
  • Tidak ada perlindungan. Jadi jika kita kehilangan satu hard disk tunggal, data kita akan hilang.
  • Karena kita menggunakan dua hard drive tanpa redundansi, maka resiko kita jadi dua kali lipat. Makanya akan lebih aman untuk menyimpan data dalam hard disk tunggal, misalnya bila kita menyimpan file 10MB dimana masing-masing drive menerima 5MB, maka jika salah satu drive rusak, kita hanya kehilangan data 5MB.
Kapan pakainya:
Raid 0 lebih pas digunakan oleh orang-orang yang mengutamakan ruang tetapi tidak peduli tentang kehilangan data mereka. Jadi di kondisi apa kita menggunakan RAID 0? Salah satu contohnya adalah sebagai server backup yang murah. Katakanlah kita punya banyak harddisk lama yang sudah tidak dipakai lagi, kemudian ingin membuat cadangan/backup data tetapi harddisk tua kita tidak cukup besar untuk pekerjaan itu. Maka kita bisa tempatkan semua hard disk yang ada untuk membentuk array RAID 0 dan menggabungkan kapasitas hardisk yang sudah ada. Tetapi pastikan data-data yang masuk ke server ini adalah hanya untuk tujuan backup/cadangan.

Raid 1

Dalam RAID 1 terjadi mirrorring antar hard disk. Sehingga dia menyediakan redundansi jika  salah satu disk mengalami error. Tidak seperti RAID 0 di mana semua space digabungkan, RAID 1 hanya menggunakan setengah ruang karena drive kedua digunakan untuk redundansi. Dengan syarat kedua hard drive ukurannya harus sama.
Kelebihan:Redundansi dan Kecepatan.
Kekurangan: Space hard disk tidak digunakan secara efisien. Karena kedua hard disk adalah salinan satu sama lain, hanya setengah dari ukuran jumlah gabungan yang digunakan.
Kapan pakainya:RAID 1 memakan ruang/space hard disk, tetapi lebih baik untuk kecepatan dan redundansi. Ini jadi pilihan yang baik untuk menjalankan sistem operasi. Server pada umumnya memiliki dua level RAID. RAID 1 yang berisi sistem operasi saja dan RAID tingkat kedua (biasanya RAID 5) untuk penyimpanan/storage.

RAID 5

RAID 5 adalah tingkat atau level yang paling populer digunakan di server saat ini.
raid5 array
Dengan RAID 5 kita bisa memiliki performa dan efisiensi penggunaan ruang. Dalam RAID 5 redundansi didistribusikan di antara semua drive. Jumlah minimum dari drive yang dapat digunakan pada RAID 5 adalah tiga.
Kelebihan:
  • Efisiensi penggunaan kombinasi harddisk.
  • Toleransi kesalahan: Jika  salah satu hard disk down/error  maka data tetap aman.
Kekurangan:
  • Kecepatan RAID 5 tidak secepat RAID 0 atau 1.
  • Jika lebih dari satu hard disk mengalami error, maka data terancam hilang.
Kapan menggunakan: RAID 5 adalah pilihan terbaik untuk data storage, karena efisien dalam penggunaan ruang dan menyediakan redundansi data.

RAID 6

RAID 6 pada dasarnya sama dengan RAID 5, dengan perbedaan dua drive bisa down pada saat yang sama bukan hanya satu. Jumlah minimum dari drive yang dapat digunakan dengan RAID 6 adalah empat.
Kelebihan:  Meskipun dua hard disk down bersamaan, data kita tetap aman.
Kekurangan:
  • Space total hard drive sangat berkurang karena lebih banyak dialokasikan untuk partisi redundansi.
  • Kecepatan RAID 6 tidak secepat RAID 0 atau 1.
  • Proses rebuilt lebih lambat. Ketika drive down, maka perlu rebuilt kembali. Kinerja akan menurun jauh bila dibandingkan dengan metode RAID lainnya.
Kapan menggunakan:
RAID 6 baik digunakan untuk media storage. Sebab pada dasarnya RAID 6 sama dengan RAID 5 dengan keamanan data yang lebih baik. Namun akibatnya, kita akan kehilangan sekitar 40% dari ruang gabungan total.

RAID Z

Raid Z dan RAID Z2 adalah penemuan Sun Micro System. RAID Z memiliki semua manfaat dari RAID 5 dan fitur lainnya yang membuatnya jauh lebih unggul. Seperti dengan RAID 5, RAID Z dapat mendukung sejumlah hard disk yang bekerja sama dan satu disk untuk redudansi. Jumlah minimum dari hard disk adalah tiga dan hanya satu yang bisa down pada suatu waktu. Jika lebih dari satu hard disk rusak pada saat yang sama, maka kita beresiko kehilangan data.
Kelebihan: Memiliki semua kelebihan dari RAID 5 dan fitur lainnya.
Kelemahan: Hanya dapat digunakan dengan OS berbasis Open Solaris seperti Nexenta dan atau sistem berbasis BSD seperti FreeBSD.
Kapan menggunakan: RAID Z adalah level RAID terbaik untuk penyimpanan/storage. Pada dasarnya RAID Z melengkapi hampir semua kekurangan dari RAID tingkat sebelumnya dan menambahkan banyak fitur baru. Namun hanya bisa digunakan dengan sistem berbasis Solaris dan BSD. RAID Z sangat baik untuk digunakan dalam NAS / lainnya untuk penyimpanan data berskala besar.

RAID Z2

Raid Z2 hampir identik dengan Raid Z dan mirip dengan RAID 6. Dalam RAID Z2, meski dua hard disk bisa down di waktu bersamaan namun data akan tetap aman dan mudah diakses. Sama seperti RAID Z, RAID Z2 jauh lebih unggul dengan RAID 6 karena di dalamnya terdapat banyak fitur lainnya. Jumlah minimum drive untuk menggunakan RAID Z2 adalah empat.
Keuntungan:
  • Data lebih aman meski dua drive bisa down pada saat yang sama bukan hanya satu.
  • Memiliki semua manfaat dari RAID Z.
Kekurangan:
  • Dua hard disk digunakan untuk paritas, sehingga ukuran jumlah gabungan space sangat terbatas.
  • Hanya dapat digunakan dengan OS berbasis Open Solaris seperti Nexenta dan atau sistem berbasis BSD seperti FreeBSD.
Kapan menggunakan:Sama seperti RAID Z tetapi dilengkapi dengan tambahan tingkat keamanan. Tidak untuk digunakan jika butuh space yang besar.
RAID 10
RAID 10 adalah gabungan dari  RAID 1 + RAID 0. Makanya dia bisa memberikan optimasi untuk toleransi kesalahan. Dimana RAID 0 memiliki kecepatan yang lebih karena lebih banyak ruang dari dua hard disk yang dijadikan satu, sedangkan RAID 1 memberikan mirroring disk untuk redundansi. Dalam beberapa kasus, RAID 10 menawarkan data yang lebih cepat membaca dan menulis daripada RAID 5 karena tidak perlu mengelola paritas. Minimum harddisk yang bisa digunakan adalah 4 hard disk.
Keunggulan:
  • Memiliki manfaat dari kecepatan dari RAID 0 dan Mirroring dari Raid 1.
  • Tingkat keamanan terhadap kemungkinan hilangnya data yang lebih baik dari penggunaan sebuah harddisk.
Kelemahan:
  • Memiliki segala kekurangan yang dimiliki RAID 1 dan RAID 0.
  • Kegagalan disk memiliki efek pada throughput, meskipun hal ini masih dapat ditoleransi.

 






Komponen Hardware jaringan



 Macam Macam Komponen Hardware Jaringan

Server
image002
Komputer yang menjalankan sistem operasi jaringan yang berfungsi sebagai server. Server menyediakan file, printer dan pelayanan lain untuk client. Ada dua buah jenis server, yaitu :
• Server dedicated, server yang tidak memiliki fungsi lain. Ia tidak bisa digunakan sebagai workstation. Untuk melihat jenis dari server tersebut dapat diketahui melalui sistem operasi jaringan yang dijalankannya, misalnya Novell Netware.
• Server Non-Dedicated, server yang juga bisa berfungsi sebagai workstation. Contohnya : Microsoft Windows NT Server, Mocrosoft Windows NT Workstation, Microsoft Windows 95/98, Unix, Linux, Mac OS/2.
Dari fungsinya, server dapat digunakan :
• Menyimpan file-file yang digunakan bersama-sama pada hard disk-nya
• Mengatur komunikasi (seperti pesan e-mail) antar workstation
• Mengkoordinasikan pencetakan kepada printer yang dipakai bersama-sama
• Server juga dapat menyimpan CD-ROM yang dapat dipakai oleh para pemakai network
• Bisa menyimpan tape drive atau drive lain yang digunakan untuk menyimpan hard disk server atau hard disk pada workstation
• Dengan perangkat lunak dan keras tambahan, server bisa mengarahkan e-mail dari dan ke internet. Server juga bisa mengirimkan 
fax ke luar jaringan ke mesin-mesin fax yang ada di luar. Kenyataannya server hampir dapat melakukan semua pekerjaan yang mencakup pengiriman data.
Workstation
image003
Komputer yang terhubung ke server dan dapat mengakses data dari server. Workstation menjalankan beragam sistem operasi dan merupakan bagian dari network yang ada. Pada kenyataannya workstation digunakan oleh pemakai secara langsung
Kabel
utp
kabel-coaxial-rca-rca-di_885
Kabel yang digunakan bisa mneggunakan kabel coaxial ataupun UTP
Network Interface Card (NIC)
image004
NIC atau adapter network adalah sebuah komputer hardware yang mutlak dibutuhkan jika kita menginginkan merakit jaringan komputer menggunakan media penghubung kabel. NIC berfungsi menghubungkan server ke sistem pengkabelan network. Berdasarkan tipe slot pada motherboard dibedakan menjadi dua jenis:
• Tipe slot ISA (slot warna hitam/coklat, lebih panjang)
• Tipe slot PCI (slot warna putih, lebih pendek)

Switch/Hub (Concentrator/Repeater)

image005
Sistem pengkabelan yang paling populer untuk Network Ethernet menggunakan kabel Unshielded Twisted Pair (UTP) atau kabel terpilin yang terbuka dengan konektor yang mirip dengan konektor telepon. Ini disebut dengan 10BaseT. Untuk setiap adapter network pada setiap server atau workstation, salah satu dari kabel-kabel ini berhubungan ke Hub/Switch atau pusat pengkabelan.
Bridge, Router Dan Gateway
image006
Bridge berfungsi menghubungkan dua network dengan mentransfer data diantara network tersebut. Sebagai contoh, bridge bisa menghubungkan segmen kabel dari arsitektur Token Ring dengan arsitektur Ethernet, atau menghubungkan dua segmen Ethernet menjadi satu. Bridge mampu mengurangi lalu lintas dengan hanya mengirimkan data yang benar-benar diniatkan untuk komputer tujuan. Bridge pintar (intelligent bridge) bisa berbuat lebih baik lagi dengan menyaring atau hanya mengirimkan paket-paket tertentu ke tujuan.
Printer Dan Peripheral Lain
image008
Printer adalah salah satu alasan utama kenapa ada network. Karena printer tidak selalu digunakan oleh setiap pemakai, akan lebih ekonomis jika memakai satu printer bersama-sama. Printer bisa dihubungkan langsung pada workstation atau ke server.
Anda juga bisa memasang scanner, CD-ROM eksternal dan peralatan lain yang berguan dan dapat digunakan secara bersama-sama pada network. Sama seperti yang lainnya, hal ini membutuhkan perangkat lunak dan perangkat keras yang tepat.

Senin, 21 Januari 2013

Nilai Jaringan Komputer 1. Stikom Arthabuana



kelas B



Kelas A





Silahkan tinggalkan Komentar.....

pemograman dasar dengan Bash pada Linux


  1.  Pendahuluan
Apa itu shell ? shell adalah program (penterjemah perintah) yang menjembatani user dengan sistem operasi dalam hal ini kernel (inti sistem operasi), umumnya shell menyediakan prompt sebagai user interface, tempat dimana user mengetikkan perintah-perintah yang diinginkan baik berupa perintah internal shell (internal command), ataupun perintah eksekusi suatu file progam (eksternal command), selain itu shell memungkinkan user menyusun sekumpulan perintah pada sebuah atau beberapa file untuk dieksekusi sebagai program.

Macam - macam shell?

Tidak seperti sistem operasi lain yang hanya menyediakan satu atau 2 shell, sistem operasi dari keluarga unix misalnya linux sampai saat ini dilengkapi oleh banyak shell dengan kumpulan perintah yang sangat banyak, sehingga memungkinkan pemakai memilih shell mana yang paling baik untuk membantu menyelesaikan pekerjaannya, atau dapat pula berpindah-pindah dari shell yang satu ke shell yang lain dengan mudah, beberapa shell yang ada di linux antara lain:
  • Bourne shell(sh),
  • C shell(csh),
  • Korn shell(ksh),
  • Bourne again shell(bash),
  • dsb.
Masing - masing shell mempunyai kelebihan dan kekurangan yang mungkin lebih didasarkan pada kebutuhan pemakai yang makin hari makin meningkat, untuk dokumentasi ini shell yang digunakan adalah bash shell dari GNU, yang merupakan pengembangan dari Bourne shell dan mengambil beberapa feature (keistimewaan) dari C shell serta Korn shell, Bash shell merupakan shell yang cukup banyak digunakan pemakai linux karena kemudahan serta banyaknya fasilitas perintah yang disediakan.versi bash shell yang saya gunakan adalah 2.04
[fajar@linux$]echo $BASH_VERSION
bash 2.04.12(1)-release
Mungkin saat anda membaca dokumentasi ini versi terbaru dari bash sudah dirilis dengan penambahan feature yang lain.

2. Pemrograman Shell ?

Yaitu menyusun atau mengelompokkan beberapa perintah shell (internal atupun eksternal command) menjadi kumpulan perintah yang melakukan tugas tertentu sesuai tujuan penyusunnya. Kelebihan shell di linux dibanding sistem operasi lain adalah bahwa shell di linux memungkinkan kita untuk menyusun serangkaian perintah seperti halnya bahasa pemrograman (interpreter language), melakukan proses I/O, menyeleksi kondisi, looping, membuat fungsi, dsb. adalah proses - proses yang umumnya dilakukan oleh suatu bahasa pemrograman, jadi dengan shell di linux kita dapat membuat program seperti halnya bahasa pemrograman, untuk pemrograman shell pemakai unix atau linux menyebutnya sebagai script shell.

3. Kebutuhan Dasar

Sebelum mempelajari pemrograman Bash shell di linux sebaiknya anda telah mengetahui dan menggunakan perintah - perintah dasar shell baik itu internal command yang telah disediakan shell maupun eksternal command atau utility, seperti
  • cd, pwd, times, alias, umask, exit, logout, fg, bg, ls, mkdir, rmdir, mv, cp, rm, clear, ...
  • utilitas seperti cat, cut, paste, chmod, lpr,...
  • redirection (cara mengirim output ke file atau menerima input dari file), menggunakan operator redirect >, >>, <, <<, contohnya:
    ls > data
    hasil ls dikirim ke file data, jika file belum ada akan dibuat tetapi jika sudah ada isinya akan ditimpa.
    ls >> data
    hampir sama, bedanya jika file sudah ada maka isinya akan ditambah di akhir file.
    cat < data
    file data dijadikan input oleh perintah cat
  • pipa (output suatu perintah menjadi input perintah lain), operatornya : | , contoh:
    ls -l | sort -s
    ouput perintah ls -l (long) menjadi input perintah sort -s (urutkan secara descending), mending pake ls -l -r saja :-)
    ls -l | sort -s | more
    cat <data | sort > databaru
  • Wildcard dengan karakter *, ?, [ ], contohnya:
    ls i*
    tampilkan semua file yang dimulai dengan i
    ls i?i
    tampilkan file yang dimulai dengan i, kemudian sembarang karakter tunggal, dan diakhiri dengan i
    ls [ab]*
    tampilkan file yang dimulai dengan salah satu karakter a atau b

4. Simple Bash Script

Langkah awal sebaiknya periksa dulu shell aktif anda, gunakan perintah ps (report process status)
[fajar@linux$]ps
 PID TTY          TIME CMD
  219 tty1     00:00:00 bash
  301 tty1     00:00:00 ps
bash adalah shell aktif di system saya, jika disystem anda berbeda misalnya csh atau ksh ubahlah dengan perintah change shell
[fajar@linux$]chsh
Password:
New shell [/bin/csh]:/bin/bash
Shell changed
atau dengan mengetikkan bash
[fajar@linux$]bash
sekarang coba anda ketikkan perintah dibawah ini pada prompt shell
echo "Script shell pertamaku di linux"
[fajar@linux$]echo "Script shell pertamaku di linux"
Script shell pertamaku di linux
string yang diapit tanda kutip ganda (double quoted) akan ditampilkan pada layar anda, echo adalah statement (perintah) built-in bash yang berfungsi menampilkan informasi ke standard output yang defaultnya adalah layar. jika diinginkan mengulangi proses tersebut, anda akan mengetikkan kembali perintah tadi, tapi dengan fasilitas history cukup menggunakan tombol panah kita sudah dapat mengulangi perintah tersebut, bagaimana jika berupa kumpulan perintah yang cukup banyak, tentunya dengan fasilitas hirtory kita akan kerepotan juga mengulangi perintah yang diinginkan apalagi jika selang beberapa waktu mungkin perintah-perintah tadi sudah tertimpa oleh perintah lain karena history mempunyai kapasitas penyimpanan yang ditentukan. untuk itulah sebaiknya perintah-perintah tsb disimpan ke sebuah file yang dapat kita panggil kapanpun diinginkan.
coba ikuti langkah - langkah berikut:
  1. Masuk ke editor anda, apakah memakai vi,pico,emacs,dsb...
  2. ketikkan perintah berikut
    #!/bin/bash
    echo "Hello, apa khabar"
    
  3. simpan dengan nama file tes
  4. ubah permission file tes menggunakan chmod
    [fajar@linux$]chmod 755 tes
    
  5. jalankan
    [fajar@linux$]./tes
    
kapan saja anda mau mengeksekusinya tinggal memanggil file tes tersebut, jika diinginkan mengeset direktory kerja anda sehingga terdaftar pada search path ketikkan perintah berikut
PATH=$PATH:.
setelah itu script diatas dapat dijalankan dengan cara
[fajar@linux$]tes
Hello, apa khabar
tanda #! pada /bin/bash dalam script tes adalah perintah yang diterjemahkan ke kernel linux untuk mengeksekusi path yang disertakan dalam hal ini program bash pada direktory /bin, sebenarnya tanpa mengikutkan baris tersebut anda tetap dapat mengeksekusi script bash, dengan catatan bash adalah shell aktif. atau dengan mengetikkan bash pada prompt shell.
[fajar@linux$]bash tes
tentunya cara ini kurang efisien, menyertakan path program bash diawal script kemudian merubah permission file sehingga dapat anda execusi merupakan cara yang paling efisien.
Sekarang coba kita membuat script shell yang menampilkan informasi berikut:
  1. Waktu system
  2. Info tentang anda
  3. jumlah pemakai yang sedang login di system
contoh scriptnya:
#!/bin/bash
#myinfo

#membersihkan tampilan layar
clear           

#menampilkan informasi
echo -n "Waktu system   :"; date
echo -n "Anda           :"; whoami
echo -n "Banyak pemakai :"; who | wc -l
sebelum dijalankan jangan lupa untuk merubah permission file myinfo sehingga dapat dieksekusi oleh anda
[fajar@linux$]chmod 755 myinfo
[fajar@linux$]./myinfo
Waktu system   : Sat Nov 25  22:57:15 BORT 2001
Anda           : fajar
Banyak pemakai : 2
tentunya layout diatas akan disesuaikan dengan system yang anda gunakan statement echo dengan opsi -n akan membuat posisi kursor untuk tidak berpindah ke baris baru karena secara default statement echo akan mengakhiri proses pencetakan ke standar output dengan karakter baris baru (newline), anda boleh mencoba tanpa menggunakan opsi -n, dan lihat perbedaannya. opsi lain yang dapat digunakan adalah -e (enable), memungkinkan penggunaan backslash karakter atau karakter sekuen seperti pada bahasa C atau perl, misalkan :
echo -e "\abunyikan bell"
jika dijalankan akan mengeluarkan bunyi bell, informasi opsi pada statement echo dan backslash karakter selengkapnya dapat dilihat via man di prompt shell.
[fajar@linux$]man echo

5. Pemakaian Variabel

Secara sederhana variabel adalah pengenal (identifier) berupa satuan dasar penyimpanan yang isi atau nilainya sewaktu-waktu dapat berubah baik oleh eksekusi program (runtime program) ataupun proses lain yang dilakukan sistem operasi. dalam dokumentasi ini saya membagi variabel menjadi 3 kategori:
  1. Environment Variable
  2. Positional Parameter
  3. User Defined Variable

5.1. Environment Variable

atau variabel lingkungan yang digunakan khusus oleh shell atau system linux kita untuk proses kerja system seperti variabel PS1, PS2, HOME, PATH, USER, SHELL,dsb...jika digunakan akan berdampak pada system, misalkan variabel PS1 yang digunakan untuk mengeset prompt shell pertama yaitu prompt tempat anda mengetikkan perintah - perintah shell (defaultnya "\s-\v\$"), PS2 untuk prompt pelengkap perintah, prompt ini akan ditampilkan jika perintah yang dimasukkan dianggap belum lengkap oleh shell (defaultnya ">"). anda dapat mengeset PS1 danPS2 seperti berikut.
simpan dahulu isi PS1 asli system anda, sehingga nanti dapat dengan mudah dikembalikan
[fajar@linux$]PS1LAMA=$PS1
sekarang masukkan string yang diinginkan pada variabel PS1
[fajar@linux$]PS1="Hi ini Promptku!"
Hi ini Promptku!PS2="Lengkapi dong ? "
maka prompt pertama dan kedua akan berubah, untuk mengembalikan PS1 anda ke prompt semula ketikkan perintah
[fajar@linux$]PS1=$PS1LAMA
Jika anda ingin mengkonfigurasi prompt shell, bash telah menyediakan beberapa backslash karakter diantaranya adalah:
\aASCII bell character (07)
\ddate dengan format "Weekday Month Date" (misalnya "Tue May 26")
\eASCII escape character (033)
\Hhostname (namahost)
\nnewline (karakter baru)
\wDirektory aktif
\ttime dalam 24 jam dengan format HH:MM:SS
dllman bash:-)
contoh pemakaiannya:
[fajar@linux$]PS1="[\t][\u@\h:\w]\$"
agar prompt shell hasil konfigurasi anda dapat tetap berlaku (permanen) sisipkan pada file .bashrc atau .profile

5.2. Positional Parameter

atau parameter posisi yaitu variabel yang digunakan shell untuk menampung argumen yang diberikan terhadap shell baik berupa argumen waktu sebuah file dijalankan atau argumen yang dikirim ke subrutin. variabel yang dimaksud adalah 1,2,3,dst..lebih jelasnya lihat contoh script berikut :
#!/bin/bash
#argumen1

echo $1 adalah salah satu $2 populer di $3
Hasilnya
[fajar@linux$]./argumen1 bash shell linux
bash adalah salah satu shell populer di linux
ada 3 argumen yang disertakan pada script argumen1 yaitu bash, shell, linux, masing2 argumen akan disimpan pada variabel 1,2,3 sesuai posisinya. variabel spesial lain yang dapat digunakan diperlihatkan pada script berikut:
#!/bin/bash
#argumen2

clear
echo "Nama script anda : $0";
echo "Banyak argumen   : $#";
echo "Argumennya adalah: $*";
Hasilnya:
[fajar@linux$]./argumen 1 2 3 empat
Nama script anda  : ./argumen
Banyak argumen    : 4
Argumennya adalah : 1 2 3 empat

5.3. User Defined Variable

atau variabel yang didefinisikan sendiri oleh pembuat script sesuai dengan kebutuhannya, beberapa hal yang perlu diperhatikan dalam mendefenisikan variabel adalah:
  • dimulai dengan huruf atau underscore
  • hindari pemakaian spesial karakter seperti *,$,#,dll...
  • bash bersifat case sensitive, maksudnya membedakan huruf besar dan kecil, a berbeda dengan Anama berbeda dengan Nama,NaMa,dsb..
untuk mengeset nilai variabel gunakan operator assignment (pemberi nilai)"=", contohnya :
myos="linux"        #double-quoted
nama='pinguin'      #single-quoted 
hasil=`ls -l`;      #back-quoted
angka=12
kalau anda perhatikan ada 3 tanda kutip yang kita gunakan untuk memberikan nilai string ke suatu variabel, adapun perbedaannya adalah:
  • dengan kutip ganda (double-quoted), bash mengizinkan kita untuk menyisipkan variabel di dalamnya. contohnya:
    #!/bin/bash
    
    nama="pinguin"
    kata="Hi $nama, apa khabarmu"    #menyisipkan variabel nama
    echo $kata;
    
    Hasilnya:
    Hi pinguin, apa khabarmu
    
  • dengan kutip tunggal (single-quoted), akan ditampilkan apa adanya. contohnya:
    #!/bin/bash
    
    nama="pinguin"
    kata='Hi $nama, apa khabarmu'    #menyisipkan variabel nama
    echo $kata;
    
    Hasilnya:
    Hi $nama, apa khabarmu
    
  • dengan kutip terbalik (double-quoted), bash menerjemahkan sebagai perintah yang akan dieksekusi, contohnya:
    #!/bin/bash
    
    hapus=`clear`;
    isi=`ls -l`;        #hasil dari perintah ls -l disimpan di variabel isi
    
    #hapus layar
    echo $hapus
    
    #ls -l
    echo $isi;      
    
    Hasilnya: silahkan dicoba sendiri
Untuk lebih jelasnya lihat contoh berikut:
#!/bin/bash
#varuse

nama="fajar"
OS='linux'
distro="macam-macam, bisa slackware,redhat,mandrake,debian,suse,dll"
pc=1
hasil=`ls -l $0`

clear
echo -e "Hi $nama,\npake $OS\nDistribusi, $distro\nkomputernya, $pc buah"
echo "Hasil ls -l $0 adalah =$hasil"
Hasilnya:
[fajar@linux$]./varuse
Hi fajar,
pake linux Distribusi, macam-macam, bisa slackware,redhat,mandrake,debian,suse,dll
komputernya, 1 buah
Hasil ls -l ./varuse adalah -rwxr-xr-x 1 fajar users 299 Nov 21 06:24 ./varuse
untuk operasi matematika ada 3 cara yang dapat anda gunakan, dengan statement builtin let atau expr atau perintah subtitusi seperti contoh berikut:
#!/bin/bash
#mat1

a=10
b=5
#memakai let
let jumlah=$a+$b
let kurang=$a-$b
let kali=$a*$b

#memakai expr
bagi=`expr $a / $b`

#memakai perintah subtitusi $((ekspresi))
modul =$(($a%$b))  #sisa pembagian

echo "$a+$b=$jumlah"
echo "$a-$b=$kurang"
echo "$a*$b=$kali"
echo "$a/$b=$bagi"
echo "$a%$b=$mod"
Hasilnya:
[fajar@linux$]./mat1
10+5=15
10-5=5
10*5=50
10/5=2
10%5=0
fungsi expr begitu berdaya guna baik untuk operasi matematika ataupun string contohnya:
[fajar@linux$]mystr="linux"
[fajar@linux$]expr length $mystr
5
Mungkin anda bertanya - tanya, apakah bisa variabel yang akan digunakan dideklarasikan secara eksplisit dengan tipe data tertentu?, mungkin seperti C atau pascal, untuk hal ini oleh Bash disediakan statement declare dengan opsi -i hanya untuk data integer (bilangan bulat). Contohnya:
#!/bin/bash

declare -i angka
angka=100;
echo $angka;
apabila variabel yang dideklarasikan menggunakan declare -i ternyata anda beri nilai string (karakter), maka Bash akan mengubahnya ke nilai 0, tetapi jika anda tidak menggunakannya maka dianggap sebagai string.

6. Simple I/O

I/O merupakan hal yang mendasar dari kerja komputer karena kapasitas inilah yang membuat komputer begitu berdayaguna. I/O yang dimaksud adalah device yang menangani masukan dan keluaran, baik itu berupa keyboard, floppy, layar monitor,dsb. sebenarnya kita telah menggunakan proses I/O ini pada contoh -contoh diatas seperti statement echo yang menampilkan teks atau informasi ke layar, atau operasi redirect ke ke file. selain echo, bash menyediakan perintah builtin printf untuk mengalihkan keluaran ke output standard, baik ke layar ataupun ke file dengan format tertentu, mirip statement printf kepunyaan bahasa C atau perl. berikut contohnya:

6.1 Output dengan printf

#!/bin/bash
#pr1

url="pemula.linux.or.id";
angka=32;

printf "Hi, Pake printf ala C\n\t\a di bash\n";
printf "My url %s\n %d decimal = %o octal\n" $url $angka $angka;
printf "%d decimal dalam float = %.2f\n" $angka $angka
Hasilnya:
[fajar@linux$]./pr1
Hi, Pake printf ala C
    di bash
My url  pemula.linux.or.id
32 decimal = 40 octal
32 decimal dalam float = 32.00
untuk menggunakan format kontrol sertakan simbol %, bash akan mensubtitusikan format tsb dengan isi variabel yang berada di posisi kanan sesuai dengan urutannya jika lebih dari satu variabel, \n \t \a adalah karakter sekuen lepas newline,tab, dan bell,
Format controlketerangan
%duntuk format data integer
%ooctal
%ffloat atau decimal
%xHexadecimal
pada script diatas %.2f akan mencetak 2 angka dibelakang koma, defaultnya 6 angka, informasi lebih lanjut dapat dilihat via man printf

6.2 Input dengan read

Setelah echo dan printf untuk proses output telah anda ketahui, sekarang kita menggunakan statement read yang cukup ampuh untuk membaca atau menerima masukan dari input standar
syntax :
read -opsi [nama_variabel...]
berikut contoh scriptnya:
#!/bin/bash
#rd1

echo -n "Nama anda :"
read nama;

echo    "Hi $nama,  apa khabarmu";
echo    "Pesan dan kesan :";
read 
echo    "kata $nama, $REPLY";
Hasilnya:
[fajar@linux$]./rd1
Nama anda : pinguin
Hi pinguin, apa khabarmu
Pesan & kesan :
 pake linux pasti asyk - asyk aja
kata pinguin, pake linux pasti asyk - asyk aja
jika nama_variabel tidak disertakan, maka data yang diinput akan disimpan di variabel REPLY contoh lain read menggunakan opsi
-t(TIMEOUT), -p (PROMPT), -s(SILENT), -n (NCHAR) dan -d(DELIM)
#!/bin/bash

read -p "User Name : " user
echo -e "Password 10 karakter,\njika dalam 6 second tidak dimasukkan pengisian password diakhiri"
read -s -n 10 -t 6 pass
echo    "kesan anda selama pake linux, _underscore=>selesai"
read -d _ kesan

echo    "User = $user"
echo    "Password = $pass"
echo    "Kesan selama pake linux = $kesan"
Hasilnya: silahkan dicoba sendiri :-)
OpsiKeterangan
-pmemungkinkan kita membuat prompt sebagai informasi pengisian
-smembuat input yang dimasukkan tidak di echo ke layar (seperti layaknya password di linux)
-nmenentukan banyak karakter yang diinput
-dmenentukan karakter pembatas masukan
informasi secara lengkap lihat man bash

6.3. Output dengan konstanta ANSI

6.3.1. Pengaturan Warna

Untuk pewarnaan tampilan dilayar anda dapat menggunakan konstanta ANSI (salah satu badan nasional amerika yang mengurus standarisasi).
syntaxnya:
\033[warnam
Dimana:
m menandakan setting color
contohnya:
[fajar@linux$]echo -e "\033[31m HELLO\033[0m"
HELLO
konstanta 31m adalah warna merah dan 0m untuk mengembalikan ke warna normal (none), tentunya konstanta warna ansi ini dapat dimasukkan ke variabel PS1 untuk mengatur tampilan prompt shell anda, contohnya:
[fajar@linux$]PS1="\033[34m"
[fajar@linux$]
berikut daftar warna yang dapat anda gunakan:
foreground
       None    0m 
       Black       0;30     Dark Gray     1;30
       Red         0;31     Light Red     1;31
       Green       0;32     Light Green   1;32
       Brown       0;33     Yellow        1;33
       Blue        0;34     Light Blue    1;34
       Purple      0;35     Light Purple  1;35
       Cyan        0;36     Light Cyan    1;36
       Light Gray  0;37     White         1;37
background
       dimulai dengan 40 untuk BLACK,41 RED,dst
lain-lain
       4 underscore,5 blink, 7 inverse
tentunya untuk mendapatkan tampilan yang menarik anda dapat menggabungkannya antara foreground dan background
[fajar@linux$]echo -e "\033[31;1;33m Bash and ansi color\033[0m"
Bash and ansi color

6.3.2 Pengaturan posisi kursor

sedangkan untuk penempatan posisi kursor, dapat digunakan salah satu cara dibawah.
  • Menentukan posisi baris dan kolom kursor:
    \033[baris;kolomH
    
  • Pindahkan kursor keatas N baris:
    \033[NA
    
  • Pindahkan kursor kebawah N baris:
    \033[NB
    
  • Pindahkan kursor kedepan N kolom:
    \033[NC
    
  • Pindahkan kursor kebelakang N kolom:
     \033[ND
    
Contohnya:
#!/bin/bash

SETMYCOLOR="\033[42;1;37m"
GOTOYX="\033[6;35H"
clear
echo -e "\033[3;20H INI DIBARIS 3, KOLOM 20"
echo -e "\033[44;1;33;5m\033[5;35H HELLO\033[0m";
echo -e "$SETMYCOLOR$GOTOYX ANDA LIHAT INI\033[0m"
Hasilnya: Silahkan dicoba sendiri

Menggunakan utulity tput untuk penempatan posisi kursor

kita dapat pula mengatur penempatan posisi kursor di layar dengan memanfaatkan utility tput,
syntaxnya:
tput cup baris kolom
contohnya:
#!/bin/bash

clear
tput cup 5 10
echo  "HELLO"
tput cup 6 10
echo  "PAKE TPUT"
jika dijalankan anda akan mendapatkan string HELLO di koordinat baris 5 kolom 10, dan string PAKE TPUT dibaris 6 kolom 10. informasi selengkapnya tentang tput gunakan man tput, atau info tput

7. Seleksi dan Perulangan

Bagian ini merupakan ciri yang paling khas dari suatu bahasa pemrograman dimana kita dapat mengeksekusi suatu pernyataan dengan kondisi terntentu dan mengulang beberapa pernyataan dengan kode script yang cukup singkat.

7.1 test dan operator

test adalah utility sh shell yang berguna untuk memeriksa informasi tentang suatu file dan berguna untuk melakukan perbandingan suatu nilai baik string ataupun numerik
syntaxnya: test ekspresi
proses kerja test yaitu dengan mengembalikan sebuah informasi status yang dapat bernilai 0 (benar) atau 1 (salah) dimana nilai status ini dapat dibaca pada variabel spesial $?.
[fajar@linux$]test 5 -gt 3
[fajar@linux$]echo $?
0
pernyataan 5 -gt (lebih besar dari) 3 yang dievaluasi test menghasilkan 0 pada variabel status $? itu artinya pernyataan tersebut benar tetapi coba anda evaluasi dengan expresi berikut
[fajar@linux$]test 3 -lt 1
[fajar@linux$]echo $?
1
status bernilai 1, berarti pernyataan salah.
anda lihat simbol -gt dan -lt, itulah yang disebut sebagai operator, secara sederhana operator adalah karakter khusus (spesial) yang melakukan operasi terhadap sejumlah operand, misalkan 2+3, "+" adalah operator sedangkan 2 dan 3 adalah operandnya, pada contoh test tadi yang bertindak sebagai oparatornya adalah -lt dan -gt, sedangkan bilangan disebelah kiri dan kanannya adalah operand. cukup banyak operator yang disediakan bash antara lain:

7.1.1. Operator untuk integer

OperatorKeterangan
bil1 -eq bil2Mengembalikan Benar jika bil1 sama dengan bil2
bil1 -ne bil2-||- Benar jika bil1 tidak sama dengan bil2
bil1 -lt bil2-||- Benar jika bil1 lebih kecil dari bil2
bil1 -le bil2-||- Benar jika bil1 lebih kecil atau sama dengan bil2
bil1 -gt bil2-||- Benar jika bil1 lebih besar dari bil2
bil1 -ge bil2-||- Benar jika bil1 lebih besar atau sama dengan bil2

7.1.2. Operasi string

OperatorKeterangan
-z STRINGMengembalikan Benar jika panjang STRING adalah zero
STRING1 == STRING2-||- Benar jika STRING1 sama dengan STRING2

7.1.3 Operator file

OperatorKeterangan
-f FILEMengembalikan Benar jika FILE ada dan merupakan file biasa
-d FILE-||- Benar jika FILE ada dan meruapakan direktory

7.1.3 Operator logika

ekspr1 -o ekspr2Benar jika jika salah satu ekspresi benar (or,||)
ekspr1 -a ekspr2Benar jika ekspresi1 dan ekspresi2 benar (and,&&)
! ekspresiMengembalikan Benar jika ekspresi tidak benar (not!)
untuk informasi lebih lengkap man bash atau info bash di prompt shell anda.

7.2. Seleksi

7.2.1 if

Statement builtin if berfungsi untuk melakukan seleksi berdasarkan suatu kondisi tertentu
syntax:
if test-command1; 
   then 
      perintah1;
elif test-command2;
   then
      perintah2;
else
      alternatif_perintah;
fi
contoh script if1:
#!/bin/bash
#if1

clear;
if [ $# -lt 1 ]; 
   then 
     echo "Usage : $0 [arg1 arg2 ...]"
     exit 1;
fi

echo "Nama script anda : $0";
echo "Banyak argumen   : $#";
echo "Argumennya adalah: $*";
Hasilnya:
[fajar@linux$]./if1
 
Usage : ./if1 [arg1 arg2 ...]
statement dalam blok if...fi akan dieksekusi apabila kondisi if terpenuhi, dalam hal ini jika script if1 dijalankan tanpa argumen. kita tinggal membaca apakah variabel $# lebih kecil (less than) dari 1, jika ya maka eksekusi perintah di dalam blok if ..fi tsb. perintah exit 1 akan mengakhiri jalannya script, angka 1 pada exit adalah status yang menandakan terdapat kesalahan, status 0 berarti sukses, anda dapat melihat isi variabel $? yang menyimpan nilai status exit, tetapi jika anda memasukkan satu atau lebih argumen maka blok if...fi tidak akan dieksekusi, statement diluar blok if..filah yang akan dieksekusi.
contoh script if2:
#!/bin/bash

kunci="bash";
read -s -p "Password anda : " pass
if [ $pass==$kunci ]; then
    echo "Sukses, anda layak dapat linux"
else
    echo "Wah sorry, gagal nih";
fi
Hasilnya
[fajar@linux$]./if2
Password anda : bash
Sukses, anda layak dapat linux
[fajar@linux$]./if2
Password anda : Bash
Wah sorry, gagal nih
klausa else akan dieksekusi jika if tidak terpenuhi, sebaliknya jika if terpenuhi maka else tidak akan dieksekusi
contoh script if3: penyeleksian dengan kondisi majemuk
#!/bin/bash

clear
echo "MENU HARI INI";
echo "-------------";
echo "1. Bakso     ";
echo "2. Gado-Gado ";
echo "3. Exit      ";
read -p "Pilihan anda [1-3] :" pil;

if [ $pil -eq 1 ]; 
then
   echo "Banyak mangkuk =";
   read jum
   let bayar=jum*1500;
elif [ $angka -eq 2 ]; 
then
   echo "Banyak porsi =";
   read jum
   let bayar=jum*2000;
elif [ $angka -eq 3 ]; 
then
   exit 0
else
   echo "Sorry, tidak tersedia"
   exit 1
fi

echo "Harga bayar = Rp. $bayar"
echo "THX"
Hasilnya:
[fajar@linux$]./if3
MENU HARI INI
-------------
1. Bakso    
2. Gado-Gado 
3. Exit    
Pilihan anda :2

Banyak porsi = 2

Harga bayar = Rp. 4000
THX

7.2.2. statement builtin case

seperti halnya if statement case digunakan untuk menyeleksi kondisi majemuk, dibanding if, pemakaian case terasa lebih efisien
syntax:
case WORD in [ [(] PATTERN [| PATTERN]...) COMMAND-LIST ;;]...
esac
contoh script cs1
#!/bin/bash

clear
echo -n "Masukkan nama binatang :";
read binatang;

case $binatang in
    pinguin | ayam | burung ) echo "$binatang berkaki 2"
                  break   
                              ;;
    onta | kuda | anjing ) echo "$binatang berkaki 4"
                  break
                  ;;
    *) echo "$binatang blom didaftarkan"
                  break
                  ;;
esac
Hasilnya:
[fajar@linux$]./cs1
Masukkan nama binatang : pinguin
pinguin berkaki 2

7.3. Perulangan

7.3.1. statement for

syntax:
for NAME [in WORDS ...]; do perintah; done
contoh script for1
#!/bin/bash

for angka in 1 2 3 4 5;
do
   echo "angka=$angka";
done
Hasilnya:
[fajar@linux$]./for1
angka=1
angka=2
angka=3
angka=4
angka=5
contoh script for2 berikut akan membaca argumen yang disertakan waktu script dijalankan
#!/bin/bash

for var 
do
   echo $var
done
Hasilnya:
[fajar@linux$]./for2 satu 2 tiga
satu
2
tiga
atau variasi seperti berikut
#!/bin/bash

for var in `cat /etc/passwd`
do
   echo $var
done
Hasilnya: hasil dari perintah cat terhadap file /etc/passwd disimpan ke var dan ditampilkan menggunakan echo $var ke layar, mendingan gunakan cat /etc/passwd saja biar efisien. :-)

7.3.2. statement while

selama kondisi bernilai benar atau zero perintah dalam blok while akan diulang terus
syntax:
while KONDISI; do perintah; done;
contoh script wh1 mencetak bilangan ganjil antara 1-10
#!/bin/bash

i=1;
while [ $i -le 10 ];
do
  echo "$i,";
  let i=$i+2;
done
Hasilnya:
[fajar@linux$]./wh1
1,3,5,7,9,
kondisi tidak terpenuhi pada saat nilai i=11 (9+2), sehingga perintah dalam blokwhile tidak dieksekusi lagi
contoh script wh2 akan menghitung banyak bilangan genap dan ganjil yang ada.
#!/bin/bash

i=0;
bil_genap=0;
bil_ganjil=0;

echo -n "Batas loop :";
read batas

if [ -z $batas ] || [ $batas -lt 0 ]; then
  echo "Ops, tidak boleh kosong atau Batas loop  harus >= 0";
  exit 0;
fi

while [ $i -le $batas ]; 
do
    echo -n "$i,";
    if [ `expr  $i % 2` -eq 0 ]; then 
       let bil_genap=$bil_genap+1;
    else
       let bil_ganjil=$bil_ganjil+1;
    fi
    let i=$i+1;    #counter untuk mencapai batas
done

echo 
echo "banyak bilangan genap  = $bil_genap";
echo "banyak bilangan ganjil = $bil_ganjil";
Hasilnya:
[fajar@linux$]./wh2
Batas loop : 10
0,1,2,3,4,5,6,7,8,9,10,
banyak bilangan genap  = 6
banyak bilangan ganjil = 5
untuk mengetahui apakah nilai i berupa bilangan genap kita cukup menggunakan operasi matematika % (mod), jika nilai i dibagi 2 menghasilkan sisa 0 berarti i adalah bilangan genap (semua bilangan genap yang dibagi dengan 2 mempunyai sisa 0) maka pencacah (bil_genap) dinaikkan 1, selain itu i bilangan ganjil yang dicatat oleh pencacah bil_ganjilproses ini dilakukan terus selama nilai i lebih kecil atau samadengan nilai batas yang dimasukkan. script juga akan memeriksa dahulu nilai batas yang dimasukkan apabila kosong atau lebih kecil dari 0 maka proses segera berakhir.tentunya dengan statement while kita sudah dapat membuat perulangan pada script kedai diatas agar dapat digunakan terus-menerus selama operator masih ingin melakukan proses perhitungan. lihat contoh berikut:
#!/bin/bash
#kedai

lagi='y'
while  [ $lagi == 'y' ] || [ $lagi == 'Y' ];
do
   clear
   echo "MENU HARI INI";
   echo "-------------";
   echo "1. Bakso      ";
   echo "2. Gado-Gado  ";
   echo "3. Exit       ";
   read -p "Pilihan anda [1-3] :" pil;

if [ $pil -eq 1 ]; 
then
   echo -n "Banyak mangkuk =";
   read jum
   let bayar=jum*1500;
elif [ $pil -eq 2 ];
then
   echo -n "Banyak porsi =";
   read jum
   let bayar=jum*2000;
elif [ $pil -eq 3 ];
then
   exit 0
else
   echo "Sorry, tidak tersedia"
   exit 1
fi

echo "Harga bayar = Rp. $bayar"
echo "THX"
echo 
echo -n "Hitung lagi (y/t) :";
read lagi;

    #untuk validasi input
    while  [ $lagi != 'y' ] && [ $lagi != 'Y' ] && [ $lagi != 't' ] && [ $lagi != 'T' ];
    do
       echo "Ops, isi lagi dengan (y/Y/t/Y)";
       echo -n "Hitung lagi (y/t) :";
       read lagi;
    done

done
proses pemilihan menu dan perhitungan biaya akan diulang terus selama anda memasukkan y/Y dan t/T untuk berhenti. dalam script terdapat validasi input menggunakan while, sehingga hanya y/Y/t/T saja yang dapat diterima soalnya saya belum mendapatkan fungsi yang lebih efisien :-)

7.3.3. statement until

jika while akan mengulang selama kondisi benar, lain halnya dengan statement until yang akan mengulang selama kondisi salah.
berikut contoh script ut menggunakan until
#!/bin/bash

i=1;
until [ $i -gt 10 ];
do
  echo $i;
  let i=$i+1
done
Hasilnya:
[fajar@linux$]./ut
1,2,3,4,5,6,7,8,9,10,
perhatikan kodisi until yang salah [ $i -gt 10], dimana nilai awal i=1 dan akan berhenti apabila nilai i = 11 (bernilai benar) 11 -gt 10.

7.3.4. statement select

select berguna untuk pembuatan layout berbentuk menu pilihan, anda lihat contoh script pembuatan menu diatas kita hanya melakukannya dengan echo secara satu persatu, dengan selectakan terlihat lebih efisien.
syntax:
select varname in (&ltitem list>); do perintah; done
sewaktu dijalankan bash akan menampilkan daftar menu yang diambil dari item list, serta akan menampilkan prompt yang menunggu masukan dari keyboard, masukan tersebut oleh bash disimpan di variabel builtin REPLY, apabila daftar item list tidak dituliskan maka bash akan mengambil item list dari parameter posisi sewaktu script dijalankan. lebih jelasnya lihat contoh berikut:
#!/bin/bash
#menu1

clear
select menu
do
  echo "Anda memilih $REPLY yaitu $menu"
done
Hasilnya:
layout:
[fajar@linux$]./menu1 Slackware Redhat Mandrake
1) Slackware
2) Redhat
3) Mandrake
 #? 1
Anda memilih 1 yaitu Slackware
karena item list tidak disertakan dalam script, maka sewaktu script dijalankan kita menyertakan item list sebagai parameter posisi, coba gunakan statement select pada program kedai diatas.
#!/bin/bash
#kedai

lagi='y'
while  [ $lagi == 'y' ] || [ $lagi == 'Y' ];
do
   clear
   select menu in "Bakso" "Gado-Gado" "Exit";
   case $REPLY in 
        1) echo -n "Banyak mangkuk =";
           read jum
           let bayar=jum*1500;
           ;;
        2) echo -n "Banyak porsi =";
           read jum
           let bayar=jum*2000;
           ;;
        3) exit 0
           ;;
        *) echo "Sorry, tidak tersedia"
           ;;
  esac 
do

echo "Harga bayar = Rp. $bayar"
echo "THX"
echo 
echo -n "Hitung lagi (y/t) :";
read lagi;

    #untuk validasi input
    while  [ $lagi != 'y' ] && [ $lagi != 'Y' ] && [ $lagi != 't' ] && [ $lagi != 'T' ];
    do
       echo "Ops, isi lagi dengan (y/Y/t/Y)";
       echo -n "Hitung lagi (y/t) :";
       read lagi;
    done
done

8. Array

adalah kumpulan variabel dengan tipe sejenis, dimana array ini merupakan feature Bash yang cukup indah :-) dan salah satu hal yang cukup penting dalam bahasa pemrograman, anda bisa membayangkan array ini sebagai tumpukan buku - buku dimeja belajar. lebih jelasnya sebaiknya lihat dulu contoh script berikut:
#!/bin/bash
#array1

buah=(Melon,Apel,Durian);
echo ${buah[*]};
Hasilnya:
[fajar@linux$]./array1.
Melon,Apel,Durian
anda lihat bahwa membuat tipe array di Bash begitu mudah, secara otomatis array buah diciptakan dan string Melon menempati index pertama dari array buah, perlu diketahui bahwa array di Bash dimulai dari index 0, jadi array buah mempunyai struktur seperti berikut:
buah[0] berisi Melon
buah[1] berisi Apel
buah[2] berisi Durian
0,1,2 adalah index array, berarti ada 3 elemen pada array buah, untuk menampilkan isi semua elemen array gunakan perintah subtitusi seperti pada contoh diatas, dengan index berisi "*" atau "@". dengan adanya index array tentunya kita dapat mengisi array perindexnya dan menampilkan isi array sesuai dengan index yang diinginkan. anda lihat contoh berikut:
#!/bin/bash
#array2

bulan[0]=31
bulan[1]=28
bulan[2]=31
bulan[3]=30
bulan[4]=31
bulan[5]=30
bulan[6]=31
bulan[7]=31
bulan[8]=30
bulan[9]=31
bulan[10]=30
bulan[11]=31
echo "Banyak hari dalam bulan November adalah ${bulan[10]} hari"
Hasilnya:
[fajar@linux$]./array2
Banyak hari dalam bulan November adalah 30 hari
sebenarnya kita dapat mendeklarasikan array secara eksplisit menggunakan statement declare
contohnya:
declare -a myarray
mendeklarasikan variabel myarray sebagai array dengan opsi -a, kemudian anda sudah dapat memberinya nilai baik untuk semua elemen atau hanya elemen tertentu saja dengan perulangan yang telah kita pelajari pengisian elemen array dapat lebih dipermudah, lihat contoh :
#!/bin/bash
#array3

#deklarasikan variabel array
declare -a angka    

#clear
i=0;
while [ $i -le 4 ];
do
let isi=$i*2;
angka[$i]=$isi;
let i=$i+1;
done

#tampilkan semua elemen array
#dengan indexnya berisi "*" atau "@"
echo ${angka[*]};  

#destroy array angka (memory yang dipakai dibebaskan kembali)
unset angka

Hasilnya:
[fajar@linux$]./array3
0 2 4 6 8

9. Subrutin atau Fungsi

merupakan bagian script atau program yang berisi kumpulan beberapa statement yang melaksanakan tugas tertentu. dengan subrutin kode script kita tentunya lebih sederhana dan terstruktur, karena sekali fungsi telah dibuat dan berhasil maka akan dapat digunakan kapan saja kita inginkan. beberapa hal mengenai fungsi ini adalah:
  • Memungkinkan kita menyusun kode script ke dalam bentuk modul-modul kecil yang lebih efisien dengan tugasnya masing-masing.
  • Mencegah penulisan kode yang berulang - ulang.
untuk membuat subrutin shell telah menyediakan keyword function seperti pada bahasa C, akan tetapi ini bersifat optional (artinya boleh digunakan boleh tidak).
syntax:
function nama_fungsi() { perintah; }
nama_fungsi adalah pengenal (identifier) yang aturan penamaannya sama seperti pemberian nama variabel, setelah fungsi dideklarasikan atau dibuat anda dapat memaggilnya dengan menyebutkan nama fungsinya. lebih jelasnya lihat contoh script fungsi1 berikut:
#!/bin/bash

function say_hello() {
    echo "Hello, apa kbabar"
}


#panggil fungsi 
say_hello;

#panggil sekali lagi
say_hello;

Hasilnya:
[fajar@linux$]./fungsi1
Hello, apa khabar
 
Hello, apa khabar
jika keyword function disertakan maka kita boleh tidak menggunakan tanda kurung (), tetapi jika keyword function tidak disertakan maka tanda kurung harus digunakan, lihat contoh berikut:
#!/bin/bash 

function say_hello{
  echo "Hello,apa khabar"
}

balas(){
  echo "Baik-baik saja";
  echo "Bagaimana dengan anda ?";
}


#panggil fungsi say_hello
say_hello;

#panggil fungsi balas
balas;
Hasilnya:
[fajar@linux$]./fungsi2
Hello, apa khabar
Baik-baik saja
Bagaimana dengan anda ?

9.1. Mengirim argumen sebagai parameter ke fungsi

tentunya suatu fungsi lebih berdaya guna apabila dapat menerima argumen yang dikirim oleh pemanggilnya dan memproses argumen tsb didalam fungsinya, fungsi yang kita buat pada bash shell tentunya dapat melakukan hal tsb, apabila pada pemanggilan fungsi kita menyertakan argumen untuk diproses fungsi tsb, maka bash akan menyimpan argumen - argumen tsb pada parameter posisi 1,2,3,dst..., nah dengan memanfaatkan parameter posisi tsb tentunya kita dapat mengambil nilai yang dikirim. lebih jelasnya anda lihat contoh berikut:
#!/bin/bash

function hello{
   if [ -z $1 ]; then
      echo "Hello, apa khabar anda"
   else
      echo "Hello $1, apa khabar";
   fi
}

#masukkan nama anda disini
echo -n "Nama anda :";
read nama

#panggil fungsi dan kirim isi variabel nama ke fungsi untuk dicetak
hello $nama;
Hasilnya:
[fajar@linux$]./fungsi3
Nama anda : pinguin
Hello pinguin, apa khabar
lihat fungsi hello, sebelum mencetak pesan kita melakukan pemeriksaan dengan if terhadap parameter posisi $1 apabila kosong maka pesan "Hello, apa khabar anda" yang akan ditampilkan, tetapi jika ada string yang kita input maka string tersebut akan dicetak di dalam blok else pada fungsi. argumen pertama diteruskan ke variabel 1, argumen kedua pada variabel 2, dst.. jika argumen yang dikirim lebih dari satu.

9.2. Cakupan Variabel

secara default variabel - variabel yang digunakan dalam script adalah variabel bersifat global, maksud global adalah bahwa variabel tsb dikenal dan dapat diakses oleh semua fungsi dalam script, tetapi bash menyediakan keyword local yang berfungsi membatasi cakupan (scope) suatu variabel agar dikenal hanya oleh fungsi yang mendeklarasikannya.coba lihat contoh berikut:
#!/bin/bash

proses(){
   echo "Isi variabel a=$a";
}

a=2;
proses();
proses $a

Hasilnya:
Isi variabel a=2
Isi variabel a=2
coba anda tambahkan local a pada fungsi proses menjadi
proses(){
   local a;
   echo -e "a didalam fungsi, a=$a";
}


a=10;
proses()

echo "a diluar fungsi, a=$a"
proses $a
Hasilnya:
a didalam fungsi, a= 
a diluar fungsi,  a=10
a didalam fungsi  a=
nah jelas perbedaannya jika mendeklarasikan variabel memakai keyword local menyebabkan variabel tersebut hanya berlaku pada fungsi yang mendekalarasikannya. pada contoh dalam fungsi proses variabel a dideklarasikan sebagai variabel local dan tidak diberi nilai.
Diakhir dokumentasi ini saya menyertakan contoh script sederhana untuk melakukan entry data-data KPLI (Kelompok Pencinta Linux Indonesia) dan menyimpannya ke sebuah file. perintah-perintah shell dan beberapa utility yang digunakan adalah:
  • apa yang telah anda pelajari diatas
  • utility test, touch
  • operator redirection ">>" untuk menambah data
  • sleep, grep (global regular expression parser), cut, cat, | (pipa), sort dan more
  • tput untuk menempatkan cursor pada koordinat tertentu (baris kolom)
sebagai latihan silahkan mengembangkan sendiri script dibawah ini:
#!/bin/bash
#------------------------------------------------------------------
#(C) Moh.fajar Makassar 2001, contoh script buat para linuxer
#file ini adalah public domain, silahkan mendistribusikan kembali
#atau mengubahnya asalkan anda mengikuti aturan - aturan dari GPL
#

menu(){
  clear  
  tput cup 2 8;
  echo "SIMPLE DATABASE KPLI"
  tput cup 3 11; 
  echo "1. Entry Data"
  tput cup 4 11;
  echo "2. Cari  Data"
  tput cup 5 11;
  echo "3. Cetak Data"
  tput cup 6 11;
  echo "4. Exit"
  tput cup 7 9;
  read -p "Pilihan anda [1-4] :" pil;
  while [ -z $pil ] || [ $pil -lt 1 ] || [ $pil -gt 4 ];
  do
     tput cup 7 9 
     read -p "Pilihan anda [1-4] :" pil;
  done 

}

entry()
{
 
  tput cup 9 27 
  echo "Enrty data"
  tput cup 11 27
  echo -n "Nama KPLI :";
  read nama;
         
  while  [ -z $nama ] || grep  $nama $data -q -i;
  do
      tput cup 13 27
      echo "Ops Tidak boleh kosong atau $nama sudah ada";
      sleep 3 
      clear
      tput cup 11 27
      echo -n "Nama KPLI :";
      read nama;
  done
    
   
  tput cup 12 27
  echo -n "Kota      :";
  read kota;
  tput cup 13 27
  echo -n "Alamat    :";
  read alamat;
  tput cup 14 27
  echo -n "Email     :";
  read email;
  tput cup 16 27
  echo "Rekam data ke file"
  if !(echo $nama:$kota:$alamat:$email>>$data); then
       echo "Ops, gagal merekam ke file"
       exit 1;
  fi
  sleep 3;
}


cari(){
  tput cup 9 27 
  echo "Cari data per record"  
  tput cup 11 27
  echo -n "Nama KPLI   :";
  read nama;
  while [ -z $nama ]; 
  do
    tput cup 13 27
    echo "Ops, nama tidak boleh kosong"
    sleep 3;
    tput cup 11 27
    echo -n "Nama KPLI   :";
    read nama;
  done

      if found=`grep $nama $data -n -i`; then
     tput cup 12 27 
     echo -n "Kota        :"; 
         echo "$found" | cut -d: -f3
         tput cup 13 27 
         echo -n "Alamat      :"; 
         echo "$found" | cut -d: -f4
     tput cup 14 27 
         echo -n "Mail        :"; 
         echo "$found" | cut -d: -f5
         tput cup 16 27 
         echo -n "Record ke- $found" | cut -d: -f1
      else
         tput cup 13 27 
         echo "Ops, data tidak ditemukan";
      fi

}

cetak()
{
  tput cup 12 27
  echo "Tampilkan Data"
  tput cup 13 27 
  echo -n "1->Ascendig, 2->Descending :"
  read mode
  clear;
  if [ -z $mode ] || [ $mode -eq 1 ]; then
     cat $data | sort  | more -d
  elif [ $mode -eq 2 ]; then
     cat $data | sort -r | more -d
  else 
  cat $data | sort | more -d
  fi  
}


#block utama

  data="mydata"

  if !(test -e $data); then
    if !(touch $data); then
       echo "gagal buat file database"
       exit 1
    fi
  fi

  lagi='y'
  while [ $lagi == 'y' ] || [ $lagi == 'Y' ]
  do
  menu;
    case $pil in
       1) entry
          ;; 
       2) cari;
          ;;
       3) cetak
          ;;
       4) clear;
          exit 0;
          ;;
       *) 
          echo "$pil, tidak ada dalam pilihan"
          ;;
    esac

  tput cup 18 27
  echo -n "Ke Menu (y/t): ";
  read lagi;
  done      

  clear      
tentunya kemampuan script ini dapat kita tambahkan dengan mudah sehingga mendekati program database sesungguhnya, utility seperti tr, paste, egrep, lpr, dll.. cukup baik dan membantu untuk digunakan.