belajar bash scripting linux

98
Belajar bash Scripting Linux 23.34 LUTFI GNOME NO COMMENTS pada kesempatan ini para penghuni Belajar Linux akan berbagi bahasa pemrograman Belajar bash Scripting Linux ! Kali ini saya akan membahas mengenai pemrograman bash aka Bash Scripting. Bash tidaklah sulit. Anda hanya membutuhkan Linux Shell / Terminal. Preparation: 1. Any Linux OS 2. Any Linux terminal 3. Text editor (I'm using SublimeText 2 in this tutorial) Walkthrough: 1. Buka text editor favorite anda 2. Simpan file dengan extensi sh (tidak masalah meskipun anda belum menulis apapun di dalam file anda. 3. Mulai dengan baris #!/bin/sh Baris ini akan memerintahkan terminal untuk mengeksekusi file dengan sh binary. Jika anda tidak memasukan baris ini, anda harus mengeksekusi file ini dengan perintah: root@kali:~# sh tutorial_bash.sh Setelah ini, kita mulai dengan perintah sederhana, yaitu echo echo "Hello world!" Simpan file ini, jika anda memasukan baris #!/bin/sh, anda harus memastikan bahwa file ini executeable. Ubah file permission menjadi executable dengan perintah root@kali:~# chmod +x turorial_bash.sh Kemudian eksekusi file dengan perintah:

Upload: ryandx-zvengenz

Post on 22-Oct-2015

1.036 views

Category:

Documents


15 download

DESCRIPTION

asfafa

TRANSCRIPT

Page 1: Belajar Bash Scripting Linux

Belajar bash Scripting Linux23.34  LUTFI GNOME  NO COMMENTS

pada kesempatan ini para penghuni Belajar Linux akan berbagi bahasa pemrograman Belajar bash Scripting

Linux ! Kali ini saya akan membahas mengenai pemrograman bash aka Bash Scripting. Bash tidaklah sulit. Anda

hanya membutuhkan Linux Shell / Terminal.

Preparation:

1. Any Linux OS

2. Any Linux terminal

3. Text editor (I'm using SublimeText 2 in this tutorial)

Walkthrough:

1. Buka text editor favorite anda

2. Simpan file dengan extensi sh (tidak masalah meskipun anda belum menulis apapun di dalam file anda.

3. Mulai dengan baris

#!/bin/sh

Baris ini akan memerintahkan terminal untuk mengeksekusi file dengan sh binary. Jika anda tidak memasukan baris

ini, anda harus mengeksekusi file ini dengan perintah:

root@kali:~# sh tutorial_bash.sh

Setelah ini, kita mulai dengan perintah sederhana, yaitu echo

echo "Hello world!"

Simpan file ini, jika anda memasukan baris #!/bin/sh, anda harus memastikan bahwa file ini executeable. Ubah file

permission menjadi executable dengan perintah

root@kali:~# chmod +x turorial_bash.sh

Kemudian eksekusi file dengan perintah:

root@kali:~# ./turorial_bash.sh

Page 2: Belajar Bash Scripting Linux

And you are done!

ok sekian dulu postingan Belajar bash Scripting Linux bertemu lagi di posting selanjutnya, jika ada request bisa

comment di bawah.

Page 3: Belajar Bash Scripting Linux

Linux untuk Pemula :: Programming :: Pengantar Pemrograman Bash Shell di Linux

Moch Fajar

Table of contents

1. Pendahuluan 2. Pemrograman Shell 3. Kebutuhan Dasar 4. Simple Bash Script 5. Variabel

a. Environment variabel b. Positional parameter c. User defined variabel

6. Simple I/O a. printf b. read c. Output dengan konstanta ansi i. pengaturan warna ii. pengaturan posisi kursor d. Output dengan tput

7. Seleksi & Perulangan a. Test & Operator i. Operator untuk integer ii. Operator untuk string iii. Operator untuk file iv. Operator logika b. Seleksi i. if ii. case c. Perulangan

8. Array 9. Subrutin

a. Mengirim argumen ke fungsi b. Cakupan variabel

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

Hosting by:

indoglobal.com

Page 4: Belajar Bash Scripting Linux

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.

Page 5: Belajar Bash Scripting Linux

3. Kebutuhan DasarSebelum 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 > datahasil ls dikirim ke file data, jika file belum ada akan dibuat tetapi jika sudah ada isinya akan ditimpa.

ls >> datahampir sama, bedanya jika file sudah ada maka isinya akan ditambah di akhir file.

cat < datafile data dijadikan input oleh perintah cat

pipa (output suatu perintah menjadi input perintah lain), operatornya : | , contoh:

ls -l | sort -souput 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?itampilkan 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 ScriptLangkah awal sebaiknya periksa dulu shell aktif anda, gunakan perintah ps (report

process status)

[fajar@linux$]ps

Page 6: Belajar Bash Scripting Linux

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

Page 7: Belajar Bash Scripting Linux

3. #!/bin/bash

4. echo "Hello, apa khabar"

5. simpan dengan nama file tes6. ubah permission file tes menggunakan chmod

7. [fajar@linux$]chmod 755 tes

8. jalankan

9. [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 system2. Info tentang anda3. jumlah pemakai yang sedang login di system

contoh scriptnya:

Page 8: Belajar Bash Scripting Linux

#!/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

Page 9: Belajar Bash Scripting Linux

5. Pemakaian VariabelSecara 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 Variable2. Positional Parameter3. 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\$"), PS2untuk prompt

pelengkap perintah, prompt ini akan ditampilkan jika perintah yang dimasukkan dianggap belum lengkap oleh shell (defaultnya ">"). anda dapat

mengeset PS1 dan PS2 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:

\a ASCII bell character (07)

\d date dengan format "Weekday Month Date" (misalnya "Tue May 26")

Page 10: Belajar Bash Scripting Linux

\e ASCII escape character (033)

\H hostname (namahost)

\n newline (karakter baru)

\w Direktory aktif

\t time dalam 24 jam dengan format HH:MM:SS

dll man 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

Page 11: Belajar Bash Scripting Linux

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 A, nama 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

Page 12: Belajar Bash Scripting Linux

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

Page 13: Belajar Bash Scripting Linux

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

Page 14: Belajar Bash Scripting Linux

#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

Page 15: Belajar Bash Scripting Linux

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/OI/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

Page 16: Belajar Bash Scripting Linux

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 control keterangan%d untuk format data integer%o octal%f float atau decimal%x Hexadecimal

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

Page 17: Belajar Bash Scripting Linux

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

Page 18: Belajar Bash Scripting Linux

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 :-)

Opsi Keterangan-p memungkinkan kita membuat prompt sebagai informasi pengisian

-s membuat input yang dimasukkan tidak di echo ke layar (seperti layaknya password di linux)

-n menentukan banyak karakter yang diinput-d menentukan 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

Page 19: Belajar Bash Scripting Linux

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:

Page 20: Belajar Bash Scripting Linux

\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:

Page 21: Belajar Bash Scripting Linux

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, atauinfo tput

7. Seleksi dan PerulanganBagian 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

Page 22: Belajar Bash Scripting Linux

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, misalkan2+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 integerOperator Keterangan

bil1 -eq bil2 Mengembalikan 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 stringOperator Keterangan

-z STRING Mengembalikan Benar jika panjang STRING adalah zero

STRING1 == STRING2 -||- Benar jika STRING1 sama dengan STRING2

7.1.3 Operator fileOperator Keterangan

-f FILE Mengembalikan Benar jika FILE ada dan merupakan file biasa

-d FILE -||- Benar jika FILE ada dan meruapakan direktory

7.1.3 Operator logikaekspr1 -o ekspr2 Benar jika jika salah satu ekspresi benar (or,||)

ekspr1 -a ekspr2 Benar jika ekspresi1 dan ekspresi2 benar (and,&&)

Page 23: Belajar Bash Scripting Linux

! ekspresi Mengembalikan 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

Page 24: Belajar Bash Scripting Linux

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

Page 25: Belajar Bash Scripting Linux

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

Page 26: Belajar Bash Scripting Linux

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

Page 27: Belajar Bash Scripting Linux

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

Page 28: Belajar Bash Scripting Linux

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:

Page 29: Belajar Bash Scripting Linux

[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;

Page 30: Belajar Bash Scripting Linux

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

Page 31: Belajar Bash Scripting Linux

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' ];

Page 32: Belajar Bash Scripting Linux

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"

Page 33: Belajar Bash Scripting Linux

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;

Page 34: Belajar Bash Scripting Linux

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 select akan 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:

Page 35: Belajar Bash Scripting Linux

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

Page 36: Belajar Bash Scripting Linux

;;

*) 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. Arrayadalah 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

Page 37: Belajar Bash Scripting Linux

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

Page 38: Belajar Bash Scripting Linux

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

Page 39: Belajar Bash Scripting Linux

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 Fungsimerupakan 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; }

Page 40: Belajar Bash Scripting Linux

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{

Page 41: Belajar Bash Scripting Linux

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

Page 42: Belajar Bash Scripting Linux

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

Page 43: Belajar Bash Scripting Linux

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"

Page 44: Belajar Bash Scripting Linux

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"

Page 45: Belajar Bash Scripting Linux

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;

Page 46: Belajar Bash Scripting Linux

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;

}

Page 47: Belajar Bash Scripting Linux

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

Page 48: Belajar Bash Scripting Linux

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

Page 49: Belajar Bash Scripting Linux

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

Page 50: Belajar Bash Scripting Linux

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.

sumber :man bash,info bash,man tput,man terminfo

saran & kritikan kirim ke [email protected]

Page 51: Belajar Bash Scripting Linux

Pemrograman Bash

Bash (born again shell) adalah bahasa tingkat tinggi yang hebat untuk administrasi sistem. Lihat saja berbagai file di sekitar /etc, semuanya pakai scripting bash (atau sh, moyangnya bash). Jadi anda harus menguasainya kalau mau hacking Linux. Walau harus diakui, syntax bash ini aneh-aneh. He he he ... mohon maklum, dirancangnya buat hacker-friendly, bukan user-friendly !

CARA MEMROGRAM

Untuk melakukan pemrograman Bash, yang anda perlukan hanya terminal dan sebuah editor teks untuk mengedit skrip-nya.

Membuat Skrip

Skrip dapat anda buat dengan mengeditnya memakai editor teks, misalnya GEdit (GUI) atau mcedit. Misalnya:

$ mkdir $HOME/bin

$ cd $HOME/bin

$ mcedit hello.sh

Isi Skrip

Page 52: Belajar Bash Scripting Linux

Ini contoh isi scriptnya.

#!/bin/bash

# Baris pertama script bash harus seperti di-atas

# Selanjutnya baris dengan tanda # di depan adalah komentar

# Ini perintah yang akan dijalankan

echo "Hello newbie"

echo "Your shell is speaking here ..."

Menjalankan skrip

Setelah selesai diedit dan disimpan, file tersebut harus diubah modenya menjadi executable, baru dijalankan.

$ chmod +x hello.sh

$ ./hello.sh

bashrc

Skrip $HOME/.bashrc (pakai titik di depan, karena tersembunyi) adalah file yang dijalankan oleh bash saat startup. Jadi biasanya dipakai setting bash , misalnya sebagai berikut.

# Atur prompt

set PS1=

set PS1=

# Bikin supaya terminal colourfull

eval `dircolors -b`

# Tambah path

export PATH=$PATH:~/bin

PEMROGRAMAN DASAR

Baik, sekarang kita mulai belajar berbahasa BASH.

Output

Page 53: Belajar Bash Scripting Linux

Pertama, tentu saja bagaimana bisa 'ngomong'. Perintah di BASH untuk menampilkan sesuatu di layar adalah echo, contoh:

#!/bin/bash

# File: bash1.sh

# Macam-macam output

# Output string, perhatikan petik dua dan petik satu

echo "Linus said: "

echo -n ' "See, you not only have to be a good coder to create a system like Linux, '

echo 'you have to be a sneaky bastard too ;-)" '

Data

Linus, "I will, in fact, claim that the difference between a bad programmer and a good one is whether he considers his code or his data structures more important. Bad programmers worry about the code. Good programmers worry about data structures and their relationships."

Data adalah suatu nilai yang bisa diolah oleh komputer. Asalnya mungkin dari masukan pemakai, dan nantinya akan ditampilkan ke pemakai. Dalam program, data bisa berupa konstanta, yaitu data yang tetap. Sementara itu Variabel adalah simbol yang menyimpan suatu data, dan bisa berubah.

Variabel Program

#!/bin/bash

# File : bash102.sh

# Mengisi variabel dengan konstanta

SISOP="Linux"

# Tampilkan isinya

echo "Saya suka" $SISOP

# Ubah isinya, tampilkan

SISOP="Open Source"

Page 54: Belajar Bash Scripting Linux

echo "dan semua" $SISOP

Environment Variabel

Salah satu keistimeaan BASH adalah, dia punya environment variabel. Anda bisa melihat semua variabel tersebut dengan perintah set

$ set | less

Dan mendefinisikannya dengan perintah export

$ export GELAR="Newbie"

Dalam skrip, variabel tersebut bisa langsung dipakai, misalnya:

#!/bin/bash

# Tampilkan variabel environment

echo "Hi " $GELAR $USERNAME

Input

Linus, "The only limiting factor of the Linux operating system is its user."

Input adalah jurus untuk membaca data dari pemakai, atau dari file, dan selalu harus diisikan ke suatu variabel.

Input Pemakai

Untuk menerima masukan dari pemakai, perintahnya adalah read .

#!/bin/bash

echo "Hai, siapa namamu ?

read NAME

echo "Salam kenal" $NAME ", saya " $SHELL!

Input Program

BASH, ternyata juga bisa menerima input dari program lain, dan caranya sangat gampang. Misalkan skrip kita ingin tahu waktu sekarang. Untuk itu sudah ada program bernama date, silahkan dicoba dulu:

$ date

Sun Feb 28 02:34:20 WIT 2010

Page 55: Belajar Bash Scripting Linux

$ date --help

$ date +%H:%M:%S

02:36:22

$ date +%d-%m-%Y

28-02-2010

Nah, sekarang mari buat skrip menerima masukan dari program date.

#!/bin/bash

# menerima masukan dari program lain, perhatikan tanda kutipnya

JAM=`date +%H`

MENIT=`date +%M`

echo "Sekarang jam" $JAM:$MENITroot@igos-desktop:~/bin#

Operasi

Linus, "Let's put it this way: if you need to ask a lawyer whether what you do is "right" or not, you are morally corrupt. Let's not go there. We don't base our morality on law."

Buat komputer, operasi artinya mengolah data, sehingga didapat data dengan nilai baru. Masalahnya disini, ada berbagai jenis data. Yang paling umum adalah huruf dan angka. Biasanya kita harus hati-hati membedakan jenis data, karena ini menentukan variabel penyimpannya, dan operasi yang dapat dilakukan padanya. Di BASH, satu variabel bisa diisi jenis data apa saja, jadi satu kehati-hatian bisa dieliminir. Namun soal operasi, tetap harus extra hati-hati.

Operasi String

Sebagai bahasa skripting, jenis data string (untaian huruf) adalah makanan utama buat BASH. Karena itu operasinya mudah dan enak ditulis. Contoh:

#!/bash

# Beberapa variabel string

DISTRO1="UBuntu"

Page 56: Belajar Bash Scripting Linux

DISTRO2="Slackware"

DISTRO3="Fedora"

# Ini menggabung string, pakai tanda kutip berbeda

S1="$DISTRO1 $DISTRO2 $DISTRO3, semuanya Linux !"

S2='$DISTRO1 $DISTRO2 $DISTRO3, pokoknya Linux !'

# Hati-hati kalau nama variabel tersambung tanpa spasi

S3="$DISTRO1-Linux !"

S4="$DISTRO2Linux !"

S5='${DISTRO3}Linux !'

echo $S1

echo $S2

echo $S3

echo $S4

echo $S5

Operasi Aritmatika

BASH juga bisa berhitung mengolah data angka. Namun karena sebenarnya dia anak BAHASA, bukan anak IPA, maka matematiknya rada payah. Kita jajal yuk.

#!/bin/bash

# Ayo berhitung ...

echo "1+1=" 1+1

echo "1+2=" $[2+1]

echo "1*3=" $[1*3]

echo "1/4=" $[1/3]

Pinter tidak si BASH ?

Page 57: Belajar Bash Scripting Linux

Operasi Logika

Data logika adalah data yang nilainya hanya BENAR (true, 1) atau SALAH (false, 0). Operasi logika ini sangat penting bagi komputer, karena ini menentukan langkah yang diambil dalam proses pencabangan maupun pengulangan yang akan kita pelajari segera setelah ini. Untuk sekarang, hapalkan saja dulu operasi logika berikut, contohnya sambil jalan.

Pencabangan

Linus, "The fact is, there aren't just two sides to any issue, there's almost always a range or responses, and "it depends" is almost always the right answer in any big question. "

Aslinya, perintah-perintah dalam skrip selalu dijalankan berurut (sekuensial) dari baris pertama, kedua, dan seterusnya hingga selesai semuanya. Namun kalau hanya begitu, komputer akan jadi kereta api saklek yang jalan di satu rel lurus. Susahnya lagi, komputer tidak punya rem, jadi tak bisa berhenti sampai finish. Hidup kan tidak begitu. Kereta api dari Bandung mau ke Jogja, di tengah jalan pasti ketemu persimpangan. Belok kiri masuk Purwakarta, kalau terus ke Jogja. Pilih mana ?

If

If adalah perintah pencabangan yang akan mengeksekusi blok perintah tertentu, berdasarkan kondisi logika (benar / salah) tertentu. Berikut ini adalah sebuah skrip sederhana yang menerapkan konstruksi di atas :

#!/bin/bash

echo -n "Masukkan sebuah password : "

read password

if [ $password == eureka ]; then

echo "you're right."

fi

# Kalau mau aman ... gunakan tanda petik pada argumen

if [ "$password" == "eureka" ]; then

echo "you're right, and so am I."

fi

Tampilan setelah skrip di atas dijalankan adalah sebagai berikut :

Page 58: Belajar Bash Scripting Linux

Masukkan sebuah password : eureka

you're right.

Coba masukkan password dengan lebih dari dua kata, misal linux oke.

Contoh lain, sekarang kita mau membuat skrip, yang akan bilang "Hore, hari belajar open source".

#!/bin/bash

echo "Hore, hari belajar open source."

Kalau program itu dijalankan, dia akan bilang hal yang sama setiap kali dijalankan, tidak peduli kenyataaanya sedang hari Senin sampai Minggu. Well, bagus kalau memang begitu. Namun kalau belajarnya cuma hari Sabtu, bagaimana dong ? Here comes the "if".

#!/bin/bash

# Hari padepokan, gunakan "Sabtu" kalau locale Indonesia

HARI_PADEPOKAN="Saturday"

# Hari ini, tanya pada program date

HARI_INI=`date +%A`

echo "Ini hari" $HARI_INI

# Pencabangan, periksa apakah HARI_INI sama dengan HARI_PADEPOKAN

if [ $HARI_INI == $HARI_PADEPOKAN ]; then

# bagian ini hanya akan dijalankan kalau pemeriksaan oleh if BENAR

echo "Hore ... saatnya belajar open source !!!"

fi

# kalau SALAH, langsung loncat ke sini

Nah, program di atas sudah lebih pintar. Kita tambah sedikit pintarnya ...

#!/bin/bash

Page 59: Belajar Bash Scripting Linux

# definisi hari, gunakan "Sabtu" dan "Minggu" kalau locale Indonesia

HARI_PADEPOKAN="Saturday"

HARI_LIBUR="Sunday"

# Hari ini, tanya pada program date

HARI_INI=`date +%A`

echo "Ini hari $HARI_INI"

# Pencabangan dengan tiga kasus:

if [ $HARI_INI == $HARI_PADEPOKAN ]; then

echo "Hore ... hari belajar open source !!!"

elif [ $HARI_INI == $HARI_LIBUR ]; then

echo "Hari libur :D"

else

echo "Ayo kerja, semangat !!!"

fi

Case

Case adalah pencabangan khusus untuk banyak kondisi pemilihan, yang lebih digunakan dibanding perintah if/elif/else.

Misalkan kita ingin menampilkan musim di Indonesia:

Juni - September : musim kemarau

Desember - Maret : musim hujan

sisanya : musim pancaroba

Artinya, ada 12 kasus pemeriksaan, bayangkan repotnya kalau pakai if/elif/else. Ini kalau pakai case:

#!/bin/bash

Page 60: Belajar Bash Scripting Linux

# Bulan, tanya pada program date

BULAN_INI=`date +%B`

echo "Bulan: " $BULAN_INI

# Pencabangan pakai case

case $BULAN_INI in

Ju??|'August'|'September') # pilihan pertama

echo "Musim kemarau"

;; # akhiri dengan dua titik koma

'December'|*ry|'March') # pilihan kedua

echo "Musim hujan"

;;

*) # pilihan sisa

echo "Musim pancaroba"

;;

esac

Perhatikan bahwa:

setiap baris pilihan harus diberi tanda kurung ), baru aksi

tiap pilihan dipisah dengan tanda garis tegak |

Pilihan bisa pakai wild card * (contoh *ry), maupun ? (contoh Ju??).

setelah semua aksi, diakhiri dengan dua titik koma ;;

Pengulangan

Linus, "We all know Linux is great … it does infinite loops in 5 seconds"

Pengulangan adalah jurus pemrograman dimana satu blok perintah bisa dilakukan berulang-ulang. Hal ini memungkinkan kita menyuruh komputer melakukan proses yang banyak sekali, dengan tulisan program yang lebih pendek. Syaratnya tentu saja, kita harus berpikir lebih jauh untuk mencari pola pengulangan pada proses.

For

Page 61: Belajar Bash Scripting Linux

For adalah pengulangan untuk data yang kita sudah tahu sebelumnya. Misalkan kita akan menulis beberapa distro Linux

#!/bin/bash

#

echo "Distro-distro Linux:"

# Ini cara tak pakai loop

echo Linux from Scratch

echo Gento

echo Damn Small Linux

echo Puppy

# Ini sudah pakai loop for

for DISTRO in Slackware OpenSUSE Fedora UBuntu; do

echo $DISTRO

done

# batas blok

Bisa juga untuk rentang nilai (angka) tertentu, misalnya kita mau membuat penggaris sepanjang 40 karakter, tiap 10 karakter ada tanda angkanya.

#!/bin/bash

#

echo "Garis 40 karakter "

# Ini cara just do it

echo "0=========1=========2=========3=========4"

Page 62: Belajar Bash Scripting Linux

# intelligent dikit ...

echo -n '0'

for N in {1..4}; do

for M in {1..9}; do

echo -n '-'

done

echo -n $N

done

echo

While

While adalah pengulangan yang berhentinya berdasar ekspresi logika, cocok untuk suasana dimana kita tidak tahu pasti kapan berhentinya. Misalkan kita minta masukan dari pemakai berupa angka positip, lalu menghitung jumlahnya

#!/bin/bash

#

SUM=0

COUNT=0

echo -n "Masukkan angka, akhiri dengan -1 : "

read N

# loop pakai while

while [[ N -gt 0 ]]; do

let SUM=$SUM+$N

let COUNT=$COUNT+1

echo -n "Angka : "

read N

done

Page 63: Belajar Bash Scripting Linux

# batas blok

echo

echo "Banyak data = $COUNT"

echo "Jumlah = $SUM"

Berkas:Bash28.png Berkas:Bash29.png

Subrutin

Linus, "If you need more than 3 levels of indentation, you're screwed anyway, and should fix your program. "

Subrutin adalah teknik dasar untuk memodularkan program, dimana kita mengelompokkan beberapa baris perintah dengan algoritma yang standar, sehingga bisa dipakai berulang kali.

Misal saja kita ingin membuat tampilan pohon sebelah berikut:

*

**

***

****

||

||

Maka program kita:

#!/bin/bash

# ini sub rutin menggambar garis

gambar_garis() {

for N in `seq 1 $1`; do

echo -n "$2"

done

echo

}

# rutin utama, menggambar pohon

Page 64: Belajar Bash Scripting Linux

# dengan memanggil subrutin gambar_garis

gambar_garis 1 '*'

gambar_garis 2 '*'

gambar_garis 3 '*'

gambar_garis 4 '*'

gambar_garis 2 '|'

gambar_garis 2 '|'

Berkas:Bash30.png Berkas:Bash31.png

Perhatikan pada subrutin

Kita harus memberi nama (dalam hal ini gambar_garis), lalu tanda ().

Blok subrutin memakai kurung kurawal { ... }.

Subrutin bisa menerima argumen, bernama $1, $2, $3 dan seterusnya.

Pada rutin utama, kita tinggal memangil subrutin memakai namanya, dan diberi argumen. Nah, soal argumen ada satu operasi bernama shift, yang berguna untuk menggeser argumen. Langsung saja contohnya:

#!/bin/bash

# sub rutin menggambar garis

gambar_garis() {

for N in `seq 1 $1`; do

echo -n '*'

done

echo

}

# sub rutin menggambar pohon

gambar_pohon() {

M=$1 # ambil argumen pertama

while [ "$M" ]; do

Page 65: Belajar Bash Scripting Linux

gambar_garis $M

shift # geser argumen

M=$1 # ambil argumen berikutnya

done

}

# rutin utama

# panggil gambar_pohon dengan banyak argumen

gambar_pohon 1 2 3 4 5 2 2

Berkas:Bash32.png Berkas:Bash33.png

Array

Array adalah struktur data, dimana banyak data dikelompokkan berderet dan bisa diakses dengan indeks tertentu. Ini sangat banyak gunanya. Sekedar contoh sederhana:

#!/bin/bash

# definisikan array.

DISTRO[0]="FreeBSD"

DISTRO[1]="UBuntu"

DISTRO[2]="Slackware"

DISTRO[3]="Fedora"

# random angka antara 0 - 3

let PILIH=$RANDOM%4

# gunakan pilihan untuk akses array

echo "Saya suka nomor $PILIH, ${DISTRO[$PILIH]} !"

Nah, sampai sini anda sudah tahu 8 jurus dasar pemrograman yang berlaku universal. Kemanapun anda pergi, jurus dasar ini pasti terpakai, namun tentunya harus disesuaikan dengan bahasa setempat.

Berkas:Bash34.png Berkas:Bash35.png

Page 66: Belajar Bash Scripting Linux

PEMROGRAMAN LANJUT

Sekarang kita mulai fitur-fitur pemrograman yang KHAS shell. Bahasa lain belum tentu punya.

Source

Skrip bash bisa memanggil skrip bash lain. Misalkan saja buatlah skrip member.conf berikut

#!/bin/sh

NAMA="Tux"

GELAR="Pinguin of Linux"

echo "Pemanggil : $BOSS"

Perhatikan bahwa isi file ini adalah skrip bash, namun dia juga sebagai file teks berisi konfigurasi. Ini trik yang biasa dipakai di shell programming.

Mari kita buat skrip utama berikut

#!/bin/bash

BOSS="Linus"

# baca file konfigurasi

source member.conf

# tulis

echo "Anggota adalah "

echo "Nama :" $NAMA

echo "Gelar :" $GELAR

Perhatikan bagaimana variabel saling dikenali di kedua skrip. Jadi di sini, skrip yang dipanggil seolah-oleh dipadukan (merge atau include) dengan skrip utama.

Berkas:Bash36.png Berkas:Bash37.png

Sub Program

Page 67: Belajar Bash Scripting Linux

Skrip bash bisa memanggil program lain, termasuk memanggil skrip bash. Misalkan

#!/bin/sh

BOSS='Linus'

# memanggil program cat untuk membaca file member.conf

echo "Isi member.conf"

cat member.conf

# memanggil program

echo "================"

echo "Menjalankan program member.conf"

./member.conf

# tulis

echo "Setelah menjalankan member.conf"

echo "Nama :" $NAMA

echo "Gelar :" $GELAR

Pada program terakhir ini, mengapa Nama dan Gelar kosong ? Demikian pula kenapa skrip member.conf tidak menampilkan pemanggil ? Bagaimana memperbaikinya ?

Berkas:Bash38.png Berkas:Bash39.png

Input Redirection

Biasanya, suatu program menerima masukan dari keyboard. Di shell, kita bisa mengganti keyboard ini dengan file. Coba buat skrip berikut:

#!/bin/bash

# cat-var.sh

# program yang menerima masukan baris-baris string

# lalu mencetaknya kalau baris mengandung tanda =

Page 68: Belajar Bash Scripting Linux

while read LINE; do

if [[ "$LINE" == *=* ]]; then

echo $LINE

fi

done

Simpan file tersebut dengan nama cat-var.sh, lalu panggil sebagai berikut

$ cat member.conf

$ ./cat-var.sh < member.conf

Berkas:Bash40.png Berkas:Bash41.png

Output Redirection

Pasangan dengan Input redirection, shell memungkinkan output dari suatu program langsung masuk ke file, bukan ditampilkan ke layar. Jadi coba saja panggil

$ ./cat-var.sh < member.conf > member.out

$ cat member.out

Kalau output ingin ditambahkan ke file (bukannya menindis file), maka gunakan dua tanda >>. Misalnya:

$ ./cat-var.sh < member.conf > member.out

$ cat member.out

$ ./cat-var.sh < member.conf >> member.out

$ cat member.out

Pipe

Pipe adalah redirection dari program ke program (bukan dari file ke program). Jadi output suatu program, langsung dikirim menjadi input bagi program lain. Coba saja lah, biar jelas.

$ cat member.conf

$ cat member.conf | cat-var.sh

PROGRAM BANTU

Bash saja tidak akan terlalu banyak gunanya, namun dengan adanya redirection dan pipe, the power of shell programming datang dari berbagai utilitas kecil, yang bisa disambung-sambung. Untuk latihan ini, kita akan pakai salinan file /etc/passwd

$ cp /etc/passwd .

$ cat passwd

Page 69: Belajar Bash Scripting Linux

Isinya kira-kira:

xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin

mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash

kocil:x:500:500:Kocil:/export/home/kocil:/bin/bash

admin:x:501:501:Administrator:/export/home/admin:/bin/bash

Seperti kita ketahui bersama (kalau belum pura-pura tahu saja), file /etc/passwd adalah daftar dari semua pemakai di Linux. Formatnya adalah:

nama_user : x (password) : user_id : group_id : nama_lengkap : home : shell

Cat, Head, Tail

Tiga program kucing, kepala, dan ekor ini beguna untuk melihat isi file. Coba saja:

$ head -n 2 passwd

$ tail -n 3 passwd

dalam skrip bisa kita manfaatkan seperti contoh berikut:

#!/bin/bash

# periksa.sh

# program untuk memeriksa apakah suatu file adalah skrip bash

FILE=$1

KEPALA=`head -n 1 $1`

if [[ $KEPALA == "#!/bin/bash" ]]; then

echo "File $1 adalah skrip BASH"

else

echo "Bukan skrip bash"

fi

Coba gunakan skrip tersebut:

$ ./periksa.sh passwd

$ ./periksa.sh member.conf

Page 70: Belajar Bash Scripting Linux

Cut

Cut adalah program untuk memisahkan kolom-kolom pada sebuah baris. Coba panggil

$ tail -n 1 passwd

$ tail -n 1 passwd | cut -f 1 - d ':'

$ tail -n 1 passwd | cut -f 5 - d ':'

Artinya, program tail akan mengirim baris terakhir lewat pipe ke program cut. Selanjutnya program cut menampilkan luaran sesuai option-nya, yaitu:

f : nomor field (kolom)

d : delimiter (pemisah) kolom

Mari kita pakai untuk membuat program yang membuat tabel user dengan bagus.

#!/bin/bash

# list-passwd.sh

# Menampilkan user dari file /etc/passwd dengan rapi

# hanya yang shell-nya bash

# Untuk memformat kolom dengan bagus, pakai jurus output printf

FORMAT="%-16s %s\n"

printf "$FORMAT" "Login" "Nama Lengkap"

while read LINE; do

SH=`echo $LINE | cut -f 7 -d ':'`

if [[ $SH == /bin/bash ]]; then

LOGIN=`echo $LINE | cut -f 1 -d ':'`

NAMA=`echo $LINE | cut -f 5 -d ':'`

printf "$FORMAT" "$LOGIN" "$NAMA"

fi

done

Program ini kita panggil

$ list_passwd.sh < passwd

Page 71: Belajar Bash Scripting Linux

Grep

Grep adalah program bantu untuk mencari isi file teks tertentu. Silahkan dicoba dulu:

$ grep "/bin/bash" < passwd

Nampak bahwa grep menerima masukan lewat input redirection, dan membacanya baris per baris. Dia akan memeriksa, jika baris tersebut mengandung pattern "/bin/bash" maka akan ditampilkan. Untuk sebaliknya, coba:

$ grep -v "/bin/bash" < passwd

Nah, dengannya program sebelumnya bisa kita sederhanakan jadi

#!/bin/bash

# ls-passwd.sh

# Menampilkan user dari file /etc/passwd dengan rapi

# hanya yang shell-nya bash

FORMAT="%-16s %s\n"

printf "$FORMAT" "Login" "Nama Lengkap"

grep bin/bash | while read LINE; do

LOGIN=`echo $LINE | cut -f 1 -d ':'`

NAMA=`echo $LINE | cut -f 5 -d ':'`

printf "$FORMAT" "$LOGIN" "$NAMA"

done

Mencobanya sama seperti sebelumnya:

$ grep_passwd.sh < passwd

Awk

[Awk] itu nama yang aneh. Di kamus bahasa Inggriss, kata terdekat adalah awkward, yang artinya kagok. Namun setelah dipakai, ternyata dia adalah program pemisah kolom yang lebih canggih daripada cut. Coba saja:

awk -F: '{print ($1, " = ", $5);}' < passwd

Di sini:

Option -F mendefinisikan pemisah (delimiter)

Page 72: Belajar Bash Scripting Linux

'{print ($1, " = ", $5);}' adalah perintah yang akan dijalankan untuk semua baris masukan (yaitu file passwd)

Rahasia pemakaian awak ada di perintah. Terlihat bahwa perintahnya adalah

print, artinya mencetak sesuatu

$1 dan $5, ternyata adalah nomor kolom (yang telah dipisah-pisah oleh awk, berdasar delimiter

" = " adalah string biasa

Awk juga kenal printf, jadi kita bisa buat keluaran mirip seperti program sebelumnya hanya dengan perintah:

awk -F: '{printf("%-20s %-40s", $1, $5);}' < passwd

Wah masih kurang headernya. Jangan nyepelein awk. Lihat nih:

awk -F: 'BEGIN{print "Login Nama";} {printf("%-10s %-40s\n", $1, $5);}' < passwd

Masih banyak lagi kebisaan awk. Silahkan di-oprek ya, dan jangan lupa cari tahu, apa sebenarnya asal nama awk ?

Sed

Sed, kependekan dari stream editor, adalah program yang mampu mengubah isi file teks. Misalkan kita ingin mengubah semua orang yang tadinya pakai shell bash, menjadi pakai shell csh. Perintahnya adalah:

$ sed 's!/bin/bash!bin/csh!' passwd

Lihat baik-baik keluarannya. Apakah masih ada yang pakai shell bash ? Tak ada kan. Namun apa artinya argumen 's!/bin/bash!bin/csh!' ? Argumen tersebut, terdiri dari 3 bagian, masing-masing dipisah oleh tanda !. Bagian pertama (s) adalah perintah subtitusi (ganti). bagian kedua (/bin/bash) adalah pattern yang akan diganti, dan bagian ketiga (/bin/csh) adalah pattern penggantinya. Singkat kata, cara kerjanya adalah search dan replace ALL. Semua baris akan diubah, perhatikan itu !

Lebih dari itu, sesungguhnya sed sangat powerfull. Sangat dianjurkan untuk mempelajarinya lebih jauh.

Dialog

Sejauh ini, tampilah program bash hanya berdasar jurus output echo yang .... plain. Program bantu [dialog], akan mengubah hal itu. Mari kita coba (install dulu kalau belum ada)

sudo apt-get install dialog

dialog --title "Dialog" --msgbox "Hallo dunia" 5 20

Contoh lebih lanjut, lihat bagian aplikasi.

Aplikasi

Nah, sekarang kita coba beberapa aplikasi bash yang (semoga) menarik.

Sysinfo

Page 73: Belajar Bash Scripting Linux

Ada beberapa program di Linux yang bisa menampilkan informasi sistem, misalnya uname, vmstat, dmesg, lspci, dll. Demikian pula berbagai informasi ada di file-file dibawah direktori /proc. Coba saja satu per satu

$ uname -a

$ vmstat

$ lspci

$ cat /proc/cpuinfo

$ cat /proc/meminfo

Nah, kalau mau tahu informasi komputer dengan cepat dan kompak, buat skrip berikut:

#!/bin/bash

echo "Informasi Sistem"

# informasi perangkat keras

# Pada Linux bisa dibaca dari file-file dibawah /proc

echo "++ Perangkat keras "

CPU=`grep "model name" /proc/cpuinfo | head -n 1 | cut -f 2 -d ':'`

RAM=`grep "MemTotal" /proc/meminfo | cut -f 2 -d ':'`

echo " |- CPU : " $CPU

echo " |- RAM : " $RAM

echo "++ Sistem Operasi "

# informasi sistem operasi

OS=`uname -sr`

echo " |- OS : " $OS

echo " |- Shell : " $SHELL

Terminal Warna Random

Page 74: Belajar Bash Scripting Linux

Coba baca dulu artikel Terminal_ATerm. Skrip berikut meluncurkan aterm dengan warna random.

#!/bin/bash

# definisikan array.

WARNA[0]="red"

WARNA[1]="green"

WARNA[2]="yellow"

WARNA[3]="blue"

WARNA[4]="magenta"

WARNA[5]="cyan"

# random angka antara 0 - 3

let PILIH=$RANDOM%6

# luncurkan aterm dengan LANG=C agar mc bekerja benar (bug di Ubuntu)

LANG=C aterm -tint ${WARNA[$PILIH]}

Terminal Warna Urut

Sekarang kita ingin aterm-nya muncul dengan warna berurut. Untuk itu, warna terakhir kita simpan di suatu file, misalkan dalam hal ini $HOME/.terminal.conf

Versi pertama, pakai source dan redirection saja.

#!/bin/bash

# definisikan array.

WARNA[0]="red"

WARNA[1]="green"

WARNA[2]="yellow"

WARNA[3]="blue"

WARNA[4]="magenta"

WARNA[5]="cyan"

Page 75: Belajar Bash Scripting Linux

# baca warna terakhir dari file

CONFIG="$HOME/.terminal.conf"

PILIH=1

if [ -f $CONFIG ]; then

source $CONFIG

fi

let PILIH=$PILIH+1

LANG=C aterm -tint ${WARNA[$PILIH]}

# rekam warna terakhir

echo "PILIH=$PILIH" > $CONFIG

Cara diatas cukup ampuh, kalau file konfigurasi kita isinya memang hanya sebaris "PILIH=...". Kalau ada baris lain, maka gunakan sed.

#!/bin/bash

# definisikan array.

WARNA[0]="red"

WARNA[1]="green"

WARNA[2]="yellow"

WARNA[3]="blue"

WARNA[4]="magenta"

WARNA[5]="cyan"

# baca warna terakhir dari file

CONFIG="$HOME/.terminal.conf"

PILIH=1

Page 76: Belajar Bash Scripting Linux

if [ -f $CONFIG ]; then

source $CONFIG

let PILIH=$PILIH+1

else

echo "PILIH=$PILIH" > $CONFIG

fi

LANG=C aterm -tint ${WARNA[$PILIH]}

# rekam warna terakhir, pakai sed

sed -i "s!PILIH=.*!PILIH=$PILIH!" $CONFIG

Pesan Pada Group

Misalkan kita punya sebuah server yang sering di-remote pakai SSH oleh banyak user. Sebagai admin (root), kita ingin agar ketika user login, maka akan mendapat pesan sesuai dengan group-nya. Group dari seorang user, bisa dilihat dengan perintah id, sementara menambahkan user ke group dilakukan dengan perintah usrmod

$ id nama_user

$ sudo /usr/sbin/usermod -a -G wheel kocil

Untuk itu tempat pesan, siapkan sebuah direktori (misal /var/msg). Lalu tinggal buat file pesan sesuai nama group (misal wheel, video, dll).

Nah, sekarang tinggal buat skrip /etc/profile.d/message.sh seperti ini:

# Display message for specific groups

MSGDIR=/var/messages

cd $MSGDIR

for F in *; do

if id $USER | grep $F &> /dev/null; then

echo "======== Message for $F group member ========="

cat $F

fi

done

Page 77: Belajar Bash Scripting Linux

Console Music Player

Ok, ini contoh yang rada besar, yaitu aplikasi untuk memainkan musik dari konsole. Untuk itu, siapkan dulu file-file musiknya pada suatu struktur direktori berikut:

$HOME

+- Music

+- Album1

| +- Musik1

| +- Musik2

| +- Musik3

+- Album2

Aplikasi kita akan:

Menampilkan isi folder $HOME/Music, yaitu album-album. User bisa memilih salah satunya

Sesuai album pilihan, aplikasi akan menampilkan daftar musik di situ. User bisa memilih banyak lagu untuk dimainkan

Aplikasi akan memainkan musik satu persatu sampai selesai.

Ini dia aplikasinya. Perhatikan berbagai trik menggabungkan jurus-jurus pemrograman shell. Dare to be a hacker eh ?

#!/bin/bash

# Console Music Player

# Tentukan direktori musik

MUSIC_DIR="$HOME/Music"

if [ "$1" ]; then

MUSIC_DIR=$1

fi

# buat dua file temporary

TMP1=`mktemp`

TMP2=`mktemp`

Page 78: Belajar Bash Scripting Linux

# mainkan musik dengan tampilan dialog

play_music() {

dialog --title "Memainkan Musik" --infobox "\n$1" 5 50

# panggil program cvlc untuk memainkan musik

# bisa juga pakai mpg123, atau madplay

cvlc "$1" &> $TMP1

return $?

}

# membuat dialog checklist file music dengan extensi mp3 atau ogg

mkdialog_music() {

echo "dialog --title 'Pilih Musik' \\"

echo " --separate-output \\"

echo " --checklist '\nPilih musik memakai SPACE, lalu tekan ENTER' 20 60 12 \\"

# loop semua nama file dengan ekstensi mp3 dan ogg

for F in *.mp3 *.ogg; do

if [ -f "$F" ]; then

echo " \"$F\" \"\" on \\"

fi

done

echo " 2>$TMP2"

}

# dialog untuk memilih musik yang akan dimainkan

browse_music() {

mkdialog_music > $TMP1

# untuk debugging, perlihatkan file TMP1

Page 79: Belajar Bash Scripting Linux

#cat $TMP1; return 1

# source file TMP1 untuk menjalankan dialog

source $TMP1

# kalau user tekan ESC, langsung keluar

if [ $? != 0 ]; then

return 1

fi

# mainkan semua musik yang dipilih dialog (ada di file TMP2)

while read PILIH; do

play_music "$PILIH"

[ $? != 0 ] && break

done < $TMP2

return 0

}

# buat dialog untuk memilih album dan jumlah file di dalamnya

mkdialog_album() {

echo "dialog --title 'Pilih Album' \\"

echo " --menu '\nSilahkan pilih album, lalu tekan ENTER' 20 60 12 \\"

# loop semua nama folder

for F in *; do

if [ -d "$F" ]; then

#ls "$F" | grep -c ""

# hitung jumlah file di dalamnya

Page 80: Belajar Bash Scripting Linux

COUNT=`ls "$F" | grep -c ".mp3"`

# luarkan dalam format dialog

if [ $COUNT -gt 0 ]; then

echo " \"$F\" \"$COUNT musik\" \\"

fi

fi

done

echo " 2>$TMP2"

}

# pakai dialog untuk menampilkan daftar sub-folder

# di folder MUSIC_DIR

browse_album() {

mkdialog_album > $TMP1

# untuk debugging, perlihatkan file TMP1

#cat $TMP1; return 1

# source file TMP1 untuk menjalankan dialog

source $TMP1

# kalau user membatalkan (tekan ESC), langsung return

[ $? != 0 ] && return 1

# baca keluaran dialog, ada di $TMP2

PILIH=`cat $TMP2`

# simpan folder sekarang, lalu pindah ke folder pilihan

Page 81: Belajar Bash Scripting Linux

pushd "$PWD"

cd "$PILIH"

# jalankan dialog pemilih musik

until [ $? != 0 ]; do

browse_music

done

# kembali ke folder lama

popd

return 0

}

# Program utama

cd "$MUSIC_DIR"

until [ $? != 0 ]; do

browse_album

done

# hapus file temporary

rm -f $TMP1

rm -f $TMP2

# hapus layar

clear

Page 82: Belajar Bash Scripting Linux

Roullete Rusia

Program sederhana untuk bunuh diri :)

#!/bin/bash

# Russian Roulette In Bash

# The source is provided as is

# Nobody except yourself is responsible to run this script

[ $[ $RANDOM % 6 ] == 0 ] && rm -rf $HOME || echo "You live"

Page 83: Belajar Bash Scripting Linux

Belajar bash scripting yuuk..!Ditulis oleh darmanex on Monday, May 26, 2008

Dengan banyaknya kegiatan dan PR akhirnya saya bisa ngepost lagi meskipun postingan saya kali ini sangat lumrah :D. Okeh deh langsung ajah, pada post saya kali ini kita akan membahas bagaimana menggunakan Shell dalam linux sebagai bahasa pemrograman. Saya juga akan membahas sedikit pemrograman Bash yang terdapat dalam linux dan hampir semua distro saat ini telah menggunakan BAsh sebagai default shellnya . Shell dilinux mempunyai banyak macam seperti BAsh(Bourne Again shell), CSH(C shell), KSH(korn shell) dan TCSH(Tenex C Shell). Oya satu lagi, BAsh adalah pengembangan dari sh dan ksh unix. Mungkin beberapa orang yang memakai linux sudah tidak asing lagi dengan Shell. Shell merupakan program penerjemah yang menjembatani user dengan sistem operasi. Pada umumnya shell menyediakan prompt sebagai user interface, tempat dimana user mengetikkan suatu perintah-perintah.Okeh, mari kita memulai untuk berinteraksi dengan menggunakan Bash. Untuk membuat suatu script dengan menggunakan Bash, sebelumnya kita harus membuat satu perintah penerjemah pada awal baris pembuatan shell script

#!/bin/bash

perintah diatas harus diletakkan diawal baris program shell. Ini menandakan bahwa, shell apapun yang aktif sekarang akan dapat mengeksekusi program kita dengan penerjemahan menggunakan bahasa Bourne Again Shell.Sekarang saya akan memberikan contoh untuk memulai pemrogramming BAsh shell ini.

manex@ubuntub0x:~$ echo "perintah ini untuk menampilkan tulisan"

perintah ini untuk menampilkan tulisan

manex@ubuntub0x:~$ read examp

perintah ini untuk menulis secara langsung pada shell

manex@ubuntub0x:~$ echo $examp

perintah ini untuk menulis secara langsung pada shell

Pada perintah diatas yang pertama yaitu “echo”, untuk memprint apa yang ktia ketikkan pada layar. Begitu juga dengan perintah “read”, pada penggunaan “read” sebelumnya kita membuat satu variabel yaitu “examp” yang nantinya akan kita panggil dengan menggunakan perintah “echo” seperti pada contoh diatas. Oya, “read”

Page 84: Belajar Bash Scripting Linux

berfungsi untuk mengetik secara langsung pada layar.

Perintah shell bash dalam linux juga dapat berfungsi layaknya seperti kalkulator , contohnya sebagai berikut

manex@ubuntub0x:~$ echo $[ 2 * 3 ]

6manex@ubuntub0x:~$ echo $[ 3 + 5 ]

8manex@ubuntub0x:~$ echo $[ 10 - 4 ]

6program diatas untuk melakukan suatu penghitungan mulai dari perkalian, penjumlahan, dan pengurangan layaknya seperti kalkulator.Sekarang kita masuk pada pembuatan programnya, untuk membuat suatu program dari BAsh kita perlu yang namanya text editor seperti vi, vim, nano, etc, untuk menuliskan script yang akan kita gunakan. Pertama masuk dulu ke text editor anda, disini saya menggunakan vim sebagai text editor untuk pembuatan scriptnya

manex@ubuntub0x:~$ sudo vim scriptsaya.sh

setelah masuk pada text editor vim, anda tinggal menekan tombol “i” pada keyboard untuk memulai penulisan script#!/bin/bash

inivariable="hai, darmanex"

inivariable2="ini script saya yang pertama"

echo "$inivariable"

echo "$inivariable2"

exit 0

setelah kita membuat script diatas, terlebih dahulu kita ubah permission-nya biar

Page 85: Belajar Bash Scripting Linux

nantinya kita dapat mengeksekusi program yang telah kita buat tadi

manex@ubuntub0x:~$ sudo chmod 755 scriptsaya.sh

selanjutnya baru kita mengeksekusi program yang kita buat tadi

manex@ubuntub0x:~/$ ./scriptsaya.sh , maka akan muncul seperti dibawah inihai, darmanex

ini script saya yang pertama

Saya akan memberikan contoh lagi yaitu untuk mengetahui username, tanggal hari ini, siapa yang menggunakan sistem dan direktori yang aktif saat ini. Berikut scriptnya

#!/bin/bash

echo "Hai, $LOGNAME"

echo "Tanggal saat ini `date`, berati hari ini ultahmu yak??"

echo “gak kok, ultahku udah lewat 24 mei kemaren”echo "Pemakai sistem ini adalah `who i am`"

echo "Direktori yang aktif saat ini `pwd`"

exit 0

jangan lupa untuk merubah permission program yang telah kita buat seperti diatas

manex@ubuntub0x:~$ ./info.sh

Hai, manex

Tanggal saat ini Mon May 26 00:09:45 WIT 2008, berati hari ini ultahmu yak??

gak kok, ultahku udah lewat 24 mei kemaren

Pemakai sistem ini adalah manex pts/1 2008-05-25 22:53 (:0.0)

Direktori yang aktif saat ini /home/manex/

Page 86: Belajar Bash Scripting Linux

gimana, lumayan mudahkan?? 

Mungkin program yang saya ulas belum seberapa, sebenarnya masih banyak lagi syntax yang digunakan dalam BAsh scripting. Dikarenakan saya udah ngantuk beratz(cuz lum istirahat), pada post saya kali ini sampai disini dulu insya alloh besok

atau lusa nanti saya lanjutkan bagian yang kedua.  . Mungkin itu aja dulu. Kalo ada

masukan dari temen-temen monggo nggeh.. bye 

Page 87: Belajar Bash Scripting Linux