Praktikum V Shell Programming
PRAKTIKUM V I.
II.
III.
Judul Dasar Pemrograman Shell BASH (Fundamental II) Tujuan 1. Mengetahui proses start-up dan profile dalam Shell BASH 2. Memahami lebih lanjut mengenai variabel dan deklarasinya 3. Memahami opsi-opsi yang dapat digunakan dalam perintah Echo 4. Memahami masalah prompt dan penggunaannya dalam Shell BASH 5. Memahami dasar Command Line dan command completion 6. Mengetahui proses alias 7. Mengerti tentang history dalam Shell BASH 8. Memahami proses PIPES 9. Mengerti format bentuk dasar fungsi dalam program Shell BASH 10. Memahami mengenai I/O redirection Dasar Teori 3.1 Shell start-up dan lingkup proses. Ketika seorang user sedang dalam proses login ke dalam Linux/Unix, pada dasar itu adalah sedang berada di pintu masuk menuju sebuah Shell, jenis Shell yang dimasuki bisa jadi bukan BASH(Bourne-Again Shell), melainkan KORN, atau, CSH, atau TCSH, atau bisa jadi SH(Bourne Shell). Pada bab sebelum telah dijelaskan bahwa Shell sendiri adalah sebuah program khusus yang digunakan untuk berinteraksi dengan kernel, jadi secara logika jika seorang user login ke dalam sebuah Shell hal itu sama saja dengan masuk menuju ke sebuah tempat dimana dari tempat itu seorang user dapat berinteraksi dengan kernel. Namun dalam buku ini bahasan spesifik tentang Shell yang dimaksud adalah Shell BASH. Pada saat proses Start-up BASH memiliki beberapa file inisialisasi yang diloading. File ini berisi variabel dan konfigurasi environment dari BASH Shell. Dari beberapa file inisialisasi tersebut memiliki lingkup tersendiri. Ada file yang hanya diloading sekali saja pada saat login, ada juga file-file yang diloading pada saat BASH dipanggil, sehingga file inisialiasi ini berlaku pada subshell. File /etc/profile adalah salah satu file inisialisasi BASH yang berlaku secara menyeluruh. File ini diloading pada saat sebelum proses login dilakukan. Sementara file ~/.bashrc dan ~/.bash_profile merupakan beberapa file inisialisasi yang diloading pada saat Shell dipanggil. Jika Shell dipanggil pada saat seorang user berada didalam sebuah Shell maka file inisialisasi tersebut akan diloading dan berlaku pada subshell yang dipanggil. Contoh file /etc/profile # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "`id -u`" -eq 0 ]; then PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" else PATH="/usr/local/bin:/usr/bin:/bin:/usr/games" fi if [ "$PS1" ]; then if [ "$BASH" ]; then PS1='\u@\h:\w\$ ' else if [ "`id -u`" -eq 0 ]; then PS1='A ' else PS1='B ' fi fi fi export PATH
Copyright Ach Subhan KH 2007
1
Praktikum V Shell Programming
Tabel 3.1.1 Daftar file inisialisasi BASH Shell Shell Nama file Versi Linux/Unix /bin/bash /etc/profile Hampir semua versi linux dan unix ~/.bashrc Hampir semua versi linux ~/.bash_profile
Debian dan versi linux
~/bash_history
Debian dan versi linux
Keterangan Dijalankan sekali pada saat login Dijalankan pada saat BASH dijalankan secara manual beberapa Dijalankan pada saat BASH dijalankan secara manual beberapa Dijalankan pada saat BASH dijalankan secara manual
3.2 Variabel (Lanjutan) 3.2.1 Variable Expansion Modifier Dalam BASH Shell, sebuah variabel dapat diuji dan dimodifikasi, maksud dari pengujian ini adalah apakah sebuah variabel itu ada nilainya atau tidak. Kasus ini biasa terjadi pada saat seorang user ingin memberikan sebuah nilai pada sebuah variabel namun harus terlebih dahulu melakukan pengujian apakah sebuah variabel yang dimaksud belum ada nilainya. Proses pengujian ini biasanya dilakukan dengan menggunakan mekanisme pengkodisian, namun di dalam BASH Shell terdapat mekanisme cepat (shortcut) untuk menguji dan merubah nilai sebuah variabel. Shortcut ini disebut dengan variable expansion modifier. Tabel 3.2.1.1 Variabel expansion modifier Modifier Nilai ${variabel:-nilai_baru} Jika nilai variabel sudah ada dan bukan NULL, maka nilai tersebut yang disubstitusi, jika selain itu variabel sama dengan nilai_baru ${variabel:=nilai_baru} Jika nilai variabel sudah ada atau bukan NULL, maka nilai tersebut yang disubtitusi, jika selain itu nilai_baru yang disubtitusi, nilai dari variabel bersifat permanent, dan tidak berlaku pada variabel parameter posisional ${variabel:+nilai_baru} Jika nilai variabel sudah ada dan bukan NULL maka nilai yang lama diganti dengan nilai_baru, jika selain itu tidak nilai variabel tidak diubah. ${variabel:?nilai_baru} Jika nilai variabel sudah ada dan bukan NULL, maka nilai tersebut disubtitusi, jika tidak cetak isi variabel dan keluar dari Shell. ${variabel:offset} Mengambil substring dari nilai variabel dimulai dari offset, dimana offset dimulai dari 0 dan panjangnya adalah sampai akhir dari sebuah string tersebut. ${variabel:offset:panjang} Mengambil substring dari nilai variabel dimulai dari offset, sampai dengan nilai panjang. $ buah=apel $ echo ${buah:-jeruk} apel $ echo ${buahku:-semangka} semangka $ foo=apel $ echo ${foo:+jambu} jambu $ echo $foo apel
Penjelasan :
Copyright Ach Subhan KH 2007
2
Praktikum V Shell Programming
1. Nilai variabel buah sama dengan apel 2. Pada saat modifier dilakukan karena variabel buah sudah ada nilainya maka nilai tersebut yang disubtitusi yaitu apel. 3. Variabel buahku sebelumnya tidak bernilai maka ketika expansion modifier dilakukan nilai buahku diubah menjadi semangka. 4. Nilai variabel foo = apel 5. Ketika modifier :+ dilakukan maka nilai foo disubtitusi dengan jambu, namun ini hanya bersifat sementara 6. Nilai foo setelah proses expansion tetap berisi apel. $ var=”selamat datang” $ echo ${var:6} t datang $ echo ${var:0:6} selama $ echo ${var:9:6} datang
Penjelasan : 1. Isi dari variabel var adalah “selamat datang” 2. ${var:6} memotong isi variabel mulai dari karakter ke-0 sampai dengan karakter ke-6, sehingga menjadi “t datang” 3. ${var:0:6} mengambil isi variabel var mulai dari karakter yang ke-0 sepanjang 6 karakter, sehingga menjadi “selama” 4. ${var:9:6} mengambil isi variabel var mulai dari karakter yang ke-9 sepanjang 6 karakter, sehingga nilai keluran menjadi “datang” 3.2.2 Variabel Expansion Substring Pencocokan bentuk(pattern-matching) biasanya digunakan dalam proses pencarian sebuah kata atau suku kata yang sama dari sebuah rangkaian kata atau string. Dalam BASH Shell variabel expansion substring dapat digunakan untuk memotong sebuah suku kata baik itu di bagian depan atau di bagian belakang sebuah string. Jika sebuah bentuk yang disubtitusikan ada kesamaan maka sisa dari suku kata tersebut akan dibuang, sehingga sebuah variabel akan bernilai suku kata yang ditemukan. Tabel 3.2.2.1 Variabel expansion subtring Ekspresi Fungsi ${variabel%sub-string} Jika subtring terpendek bagian belakang dari variabel sama dengan sub-string maka bagian yang sama akan dibuang dan nilai variabel sama dengan substring sisa. ${variabel%%sub-string} Jika substring terpanjang bagian belakang dari variabel sama dengan sub-string maka bagian yang sama akan dibuang dan isi dari variabel sama dengan substring sisa. ${variabel#sub-string} Jika substring terpendek bagian depan dai variabel sama dengan sub-string maka bagian yang sama akan dibuang dan isi dari variabel sama dengan substring sisa. ${variabel##sub-string} Jika substring terpanjang bagian depan dari variabel sama dengan sub-string maka bagian yang sama akan dibuang dan isi dari variabel sama dengan substring sisa. ${#variabel} Mendapatkan jumlah karakter dari isi sebuah variabel. $ nama_path=”/usr/bin/local/bin” $ echo ${nama_path%/bin*} /usr/bin/local
Penjelasan : 1. Isi dari variabel nama_path adalah “/usr/bin/local/bin”
Copyright Ach Subhan KH 2007
3
Praktikum V Shell Programming
2. % melakukan pemotongan terhadap bagian belakang isi variabel nama_path yang cocok dengan bentuk /bin*, sehingga isi dari variabel nama_path mejadi /usr/bin/local. $ nama_path=”/usr/bin/local/bin” $ echo ${nama_path%%/bin*} /usr
Penjelasan : 1. Isi dari variabel nama_path adalah “/usr/bin/local/bin” 2. %% melakukan pemotongan terhadap sebagian besar pada bagian belakang dari isi variabel nama_path yang cocok dengan bentuk /bin*, sehingga nilai dari nama_path menjadi /usr. $ kata=”inet: 10.252.13.90” $ echo ${kata#inet: } 10.252.13.90
Penjelasan : 1. Isi variabel kata adalah “inet: 10.252.13.90” 2. # memotong pada bagian depan dari isi varibel kata yang cocok dengan bentuk “inet: “, sehingga isi dari variabel kata adalah 10.252.13.90 $ nama=”/home/mrbee/kerja/percobaan1” $ echo ${nama##*/} percobaan1
Penjelasan : 1. Isi varibel nama adalah “/home/mrbee/kerja/percobaan1” 2. ## memotong sebagian besar bagian depan isi dari variabel nama dengan bentuk “*/”, sehingga nilai dari variabel nama adalah “percobaan1” $ nama=”/usr/sbin/local” $ echo ${#nama} 15
Penjelasan : 1. Isi dari variabel nama adalah “/usr/sbin/local” 2. ${#nama} mendapatkan jumlah karakter isi variabel nama yaitu sebanyak 15 karakter. Proses ini juga menghitung karakter spasi.
3.3 Perintah Echo Echo adalah perintah untuk menampilkan data yang ada pada argumen ke standard output (stdout), yang dalam hal ini stdout bisa merupakan layar monitor atau juga sebuah file. Perintah Echo dalam Shell memiliki opsi-opsi untuk membentuk atau memberikan format pada data yang dikeluarkan. Sama halnya dengan pemrograman yang lain misalnya bahasa C. karakter yang digunakan untuk membentuk sebuah format dalam perintah echo biasa disebut “escape sequences character”. Contoh escape sequences character adalah \n yang memiliki arti ganti baris atau baris baru. Untuk bisa menggunakan escape sequences dalam Shell yang perlu diperhatikan adalah bahwa secara default shell tidak menerima escape sequence, namun untuk bisa menggunakannya perlu ditambahkan beberapa opsi yang ada dalam perintah Echo. Berikut tabel opsi dan escape sequence dalam perintah Echo. Tabel 3.3.1 Option perintah Echo Option Arti -e Mengaktifkan karakter escape sequence -E Menonaktifkan karakter escape sequence (default Shell) -n Menambahkan baris baru disetiap akhir dari output Table 3.3.2 Escape sequence character
Copyright Ach Subhan KH 2007
4
Praktikum V Shell Programming
Esc Sequences \a \b \c \f \n \r \t \v \\ \nnn
Arti Alert Backspace Mencetak baris data tanpa ganti baris baru Form feed Baris baru Return (enter) Tab Vertical Tab Backslash Mencetak karakter dengan kode ascii nnn
Berikut ini contoh untuk menggunakan perintah Echo dan menambahkan escape karakter pada data yang dikerluarkan : $ echo –e “Selamat Datang $USER \n Di Shell Programming” Selamat Datang Andi Di Shell Programming
Penjelasan : 1. Perintah Echo digunakan untuk menampilkan data string yang berada dalam tanda “ “. 2. Opsi –e adalah opsi bagi perintah echo untuk mengaktifkan karakter escape sequence. 3. Pada string tersebut terdapat \n yang merupakan escape sequence character dengan arti ganti baris baru, sehingga output yang tampil menjadi dua baris. $ echo –e Selamat Datang $USER \n Di Shell Programming Selamat Datang Andi n Di Shell Programming
Penjelasan : 1. Sama seperti contoh sebelumnya namun output dari potongan kode tersebut menampilkan string tetap dalam satu baris. Ini disebabkan \n pada data tersebut yang seharusnya adalah escape sequence tetapi oleh Shell dianggap sebagai metakarakter, sehingga penggunaan tanda “” pada proses ini adalah wajib. Contoh lain adalah : $ echo –e “Benarkah ini Shell BASH \223” Benarkah ini Shell BASH ?
Penjelasan : 1. Keluaran dari program mencetak karakter ? karena escape squence \223 merupakan fungsi untuk mencetak karakter ascii dengan kode 223. 3.4 Prompt Ketika Shell digunakan pada mode interaktif, seorang user akan mendapatkan sebuah tulisan dilayar monitor yang biasa disebut dengan prompt. Shell BASH memiliki tanda prompt yang standard seperti $ dan tanda #. Shell BASH memiliki 4 buah prompt, antaral lain primary prompt(PS1), secondary prompt(PS2), third prompt(PS3), fourth prompt(PS4). PS1 biasanya diberi simbol $ atau bisa juga #, sedangkan PS2 biasanya berbentuk > (tanda lebih dari). Untuk PS3 dan PS4 akan dibahas lebih lanjut pada bagian lain dari pemrograman Shell. 3.4.1 Primary Prompt Primary prompt secara default ditandai dengan karakter $, user dapat merubah tanda $ ini dengan melakukan editing pada file /etc/profile atau di ~.bash_profile. Namun secara default file konfigurasi terdapat di /etc/bash_bashrc. Selain merubah konfigurasi file profile, promp juga bisa di setup melalui mode interaktif.
Copyright Ach Subhan KH 2007
5
Praktikum V Shell Programming
$ PS1=”$(uname -n) >” froodo >
Penjelasan : 1. PS1 adalah primary prompt 2. Uname –n perintah untuk menampilkan nama host 3. Prompt baru akan terbentuk dengan tulisan nama host dan diikuti oleh tanda >, dalam hal ini karena nama host adalah froodo maka prompt baru menjadi froodo > Prompt juga memiliki kode escape sequence, dengan menggunakan escape sequence maka pembentukan prompt akan lebih simple. Berikut ini dafta escape sequence untuk konfigurasi prompt : Tabel 3.4.1.1 Escape sequence konfigurasi prompt Escape Sequence Arti \d Tanggal dalam format mingguan (Tue May 26) \h atau \H Nama host \n Baris baru \nnn Karakter ascii nnn \s Nama shell \t atau \T Waktu saat ini dalam format HH:MM:SS \u Nama user \w Direktori saat itu \W Direktori user \# Jumlah perintah yang telah dijalankan \! Nomer history \$ UID jika user id = 0, maka # selain itu $ \\ Backslash \[ Awalan untuk non-printing karakter \] Akhiran untuk non-printing karakter \@ Waktu saat ini dalam format 12 jam AM/PM \V Versi bash \a Karakter bell Contoh penggunaan $ PS1=”\t on \d : \W$ ” 06:52:64 on Tue Oct 04 : ~$
Penjelasan : 1. \t escape sequence jam saat itu 2. \d escape sequence tanggal dalam format mingguan 3. \W escape sequence direktori user 4. dengan menambahkan tulis “on” , ”:”, dan “$” maka output dari konfigurasi prompt menjadi “06:52:64 on Tue Oct 04 : ~$”
3.4.2 Secondary Prompt PS2 adalah variabel yang berisi nilai untuk string yang akan ditampilkan ketika secondary prompt aktif. Secara default nilai dari PS2 adalah > (lebih dari). PS2 juga bisa dibentuk dengan memanfaatkan escape sequence seperti halnya primary prompt. $ echo “hello > ini root“ hello ini root
Penjelasan : 1. Ketika karakter double quote (“) digunakan shell akan menunggu sampai double quote berikutnya, jika dalam satu baris belum terpenuhi maka shell akan mengaktifkan secondary prompt untuk menerima data berikutnya.
Copyright Ach Subhan KH 2007
6
Praktikum V Shell Programming
2. > tanda karakter secondary prompt atau PS2 contoh untuk mengkonfigurasi PS2 : $ PS2=”\u > “
maka secondary prompt akan menjadi $ echo ‘hai bejo root > selamat datang’ hai bejo selamat datang
3.5 Command Line Ketika seorang user baru saja login, Shell akan menampilkan primary prompt yang secara default berisi tanda $. Pada saat itu juga Shell berjalan secara interaktif dan siap menerima baris perintah yang ditulis. 3.5.1 Proses Order Baris perintah dalam Shell interaktif memiliki arti bahwa kata pertama yang ditulis adalah perintah, dan kata selanjutnya akan diinterpreatsikan sebagai argumen. Di dalam Shell, sebuah perintah dikelompokkan menjadi 5 jenis, berturut-turut adalah Keyword, Alias, Fungsi, Built-in Command, Skrip Shell. Dari kelima jenis ini setiap kelompok memiliki prioritas untuk dijalankan yang biasa disebut dengan proses order. Perintah dengan order tertinggi akan dijalankan terlebih dahulu. Secara default proses order dalam BASH Shell adalah sebagai berikut : 1. Alias 2. Keyword (if , else, do, while, dll) 3. Fungsi 4. Built-in Command 5. Executable skrip. Untuk melihat apakah sebuah perintah termasuk dalam kelompok mana, dapat menggunakan cara seperti contoh berikut. $ type pwd pwd is a shell builtin $ type test test is a shell builtin $ type clear clear is /usr/bin/clear $ type if if is a shell keyword $ type ls ls is aliased to ‘ls –color=auto’
3.5.3 Exit Status Pada saat sebuah perintah selesai dijalankan, perintah tersebut memberikan sebuah nilai yang berisi tentang status dari proses ke parent process, yang dalam hal ini BASH Shell. Status proses ini biasa disebut dengan Exit Status. Exit status adalah sebuah nilai antara 0 sampai dengan 255, berdasarkan aturan, ketika sebuah program selesai dieksekusi dan memberikan nilai 0 maka perintah tersebut berhasil dijalankan tanpa ada permasalahan, namun jika tidak sama dengan 0 maka ada error pada proses pengerjaan perintah tersebut. Misalnya exit status 127 merupakan nilai yang menunjukkan sebuah perintah yang dijalankan tidak tersedia. Untuk kondisi error yang fatal nilai exit status akan lebih dari 128 ditambah nilai signal yang menyebabkan perintah tersebut error. Simbol variabel dari exit status adalah karakter ‘?’, ketika sebuah perintah dijalankan dan menuliskan subtitusi terhadap karakter ‘?’ maka hal ini berarti nilai dari exit status dibaca. $ grep “root” /etc/passwd root:MrHJEFdy2dpkJY:0:0::/bin/bash $ echo $?
Copyright Ach Subhan KH 2007
7
Praktikum V Shell Programming
0 $ grep “bejo” /etc/passwd 1 $ grep “root” /etc/paswd grep: /etc/paswd: no such file or directory $ echo $? 2 $ grip “root” /etc/passwd bash: grip: command not found $ echo $? 127
Penjelasan : 1. Perintah pertama berhasil dijalankan dan exit status sama dengan 0. 2. Perintah kedua tidak berhasil dijalankan karena “bejo” tidak ada dalam daftar, dan exit status sama dengan 1 3. Perintah ketiga tidak berhasil dijalankan, exit status sama dengan 2 karena argumen kedua yaitu file /etc/paswd tidak ada. 4. Perintah ke empat menghasilkan exit status sama dengan 127, karena perintah grip tidak ada dalam daftar perintah bash. 3.5.4 Command grouping dan multiple command Baris perintah(command line) dapat berisi lebih dari satu, istilah ini biasa disebut dengan multiple command line. Contoh : $ ls; pwd; date
Penjelasan : 1. baris perintah dijalankan mulai dari kiri ke kanan satu persatu yaitu ls kemudian pwd dan dilanjutkan dengan date. Selain multiple command BASH Shell juga mengenal command grouping. Sama halnya dengan multiple command, namun pada command grouping memungkinkan hasil dari eksekusi diarahkan ke dalam sebuah file. Contoh : $ ( ls; pwd; date ) > outfile
Penjelasan : 1. Group perintah akan dijalankan secara keseluruhan dan outputnya akan dituliskan ke dalam sebuah file yaitu outfile. Perhatikan bahwa setelah tanda kurung buka dan sebelum tanda kurung tutup ada spasi, ini diperlukan. 3.6 Command Line Completion Untuk lebih meningkatkan efisiensi dalam berinteraksi dalam Shell, BASH juga menyediakan mekanisme yang disebut dengan command completion. Degan adanya mekanisme ini maka user akan lebih cepat dalam menuliskan sebuah perintah dan juga mengurangi jumlah kesalahan dalam penulisan. Pada saat seorang user menuliskan sebuah baris perintah, ketika karakter pertama ditulis maka ada mekanisme dalam BASH untuk dengan cepat melengkapi perintah yang dimaksud yaitu dengan menekan tombol TAB. Jika perintah yang dimaksud memang ada dan hanya satu-satunya didalam Shell maka Shell akan langsung menuliskan perintah tersebut setelah tombol TAB ditekan. Pada sisi lain jika karakter pertama dari perintah yang dituliskan dan kemudian menekan tombol TAB dua kali maka Shell akan menampilkan semua kemungkinan perintah yang dimulai dengan karakter yang ditulis tadi. Contoh berikut adalah mekanisme command completion dalam BASH : $ ls file1
file2 percobaan1
Copyright Ach Subhan KH 2007
coba2
skrip_432
8
Praktikum V Shell Programming
$ ls s[tab] $ ls a[tab] $ ls fi[tab] $ ls fi[tab][tab] file1 file2 $ da[tab] date $ ca[tab][tab] ca captinfo
case
cat
Penjelasan : 1. Daftar file yang berada di direktori 2. Setelah ditulis s dan ditekan TAB maka tulisan akan menjadi lengkap yaitu skrip_432 3. Karena tidak ada dalam daftar , ketika ditulis a dan dilanjutkan dengan tab maka pada console akan berbunyi beep. 4. Pada saat fi ditulis kemudian TAB ditekan maka tulisan menjadi lengkap dengan tulisan “file” dengan posisi kursor berada di lokasi setelah huruf ‘e’. 5. Dengan menekan tab dua kali maka akan tampil semua daftar yang berawalan dengan fi. 6. Untuk proses sebuah perintah ketika da ditulis dan ditekan TAB maka tulisan akan menjadi lengkap yaitu date, karena hanya ada satu perintah yang berawalan dengan da yaitu date. 7. Ketika tab ditekan dua kali setelah menulis ca maka akan muncul semua perintah yang berawalan dengan ca. 3.6.1 History Mekanisme lain untuk lebih meningkatkan efisiensi dalam berinteraksi dalam Shell adalah memanfaatkan daftar perintah yang ada dalam daftar history. Pada dasarnya Shell menyediakan sebuah fitur dimana semua perintah yang pernah dijalankan oleh seorang user di Shell tersimpan dalam sebuah file. File ini biasanya bernama .bash_history dan file ini berada di dalam direktori user masing-masing. Dalam BASH Shell untuk melihat daftar history dapat digunakan perintah history. Contoh : $ history sementara untuk menghapus isi history dapat digunakan perintah : $ history –c Terdapat beberapa tombol shortcut untuk mengakses history, seperti tampak pada tabel 3.6.2 berikut. Tabel 3.6.2 Tombol untuk mengakses daftar history Tombol Fungsi Panah Atas Menggerakkan ke atas dalam daftar history Panah Bawah Menggerakkan ke bawah dalam daftar history Panah Kiri Menggerakkan cursor ke arah kanan pada baris perintah Panah Kanan Menggerakkan cursor ke arah kiri pada baris perintah
Untuk mengakses daftar history juga dapat digunakan perintah yang telah disediakan dalam BASH Shell yaitu fc(fix command). $ fc -l
Copyright Ach Subhan KH 2007
9
Praktikum V Shell Programming
Berikut daftar argumen untuk perintah fc. Tabel 3.6.2 Daftar argumen perintah fc Argumen Arti -e editor Membuka daftar history pada sebuah editor -l n-m Daftar history dari n sampai m -n Menonaktifkan nomer daftar history -r Reverse order daftar history -s string Mengakses daftar history dengan awalan string 3.7 Alias Alias adalah daftar kata yang dibuat oleh seorang user untuk menggantikan sebuah perintah. Penggunaan alias dapat membantu untuk mempersingkat sebuah perintah yang memiliki opsi dan argumen panjang dan susah untuk diingat. Di dalam BASH Shell daftar alias disimpan dalam sebuah file bernama .bashrc di direktori user. $ alias alias ls=’ls –color=auto’
Keterangan : 1. Perintah alias adalah perintah untuk menampilkan daftar alias. Dalam hal ini yang muncul dalam daftar adalah alias untuk perintah ls. Untuk membuat sebuah alias dapat dilakukan dengan menggunakan perintah berikut ini : $ $ $ $ $
alias alias alias alias alias
d=date dae=date gr=grep la=’ls -al’ dir=ls
Penjelasan : 1. Membuat alias dengan karakter d untuk perintah date 2. Membuat alias dengan kata dae untu perintah date 3. Membuat alias dengan kata gr untuk perintah grep 4. Membuat alias dengan kata la untuk perintah ls –al Sedangkan perintah untuk menghapus dan menonaktifkan sebuah alias yang ada di dalam daftar alias dapat dilakukan dengan menggunakan perintah berikut.
$ unalias dae $ \ls
Penjelasan : 1. Perintah untuk menghapus alias dae 2. Perintah untuk menonaktifkan sementara alias ls. 3.8 I/O Redirection Pada saat Shell berada dalam proses start-up, terdapat tiga jenis file standard yang diinisialiasi, ketiga jenis file ini akan difungsikan sebagai media untuk penangkapan input, output, dan error. Dalam ruang lingkup sistem komputer ketiga file ini disebut stdin, stdout, stderr. Stdin adalah file yang berfungsi untuk menangkan semua jenis input, dalam hal ini bisa jadi perangkat yang menjadi media input adalah keyboar. Stdout dan stderr berfungsi untuk menerima keluaran dan ditampilkan ke layar monitor atau bisa juga ke dalam sebuah file. Ada kemungkinan dimana seorang user ingin membaca sebuah input dari keyboard atau sebuah file dan kemudia mengirim input tersebut ke layar monitor. Di dalam Shell proses ini dapat dilakukan dengan mekanisme I/O redirection.
Copyright Ach Subhan KH 2007
10
Praktikum V Shell Programming
Terdapat beberapa simbol operator yang merupakan interpretasi dari I/O redirection, seperti tampak pada tabel 3.8.1 berikut. Tabel 3.8.1 Simbol operator I/O Redirection Operator Fungsi < nama file Mengarahkan input dari sebuah file > nama file Mengarahkan hasil ouput proses ke sebuah file >> nama file Menambahkan hasil output ke sebuah file 2> nama file Mengarahkan error ke sebuah file 2>> nama file Menambahkan pembacaan error ke sebuah file &> nama file Mengarahkan hasil ouput dan error ke sebuah file >& nama file Sama dengan &> 2>&1 Mengarahkan ouput dan error jika ada ke file stdout 1>&2 Mengarahkan output ke file stderr Contoh penggunaan I/O redirection adalah sebagai berikut : Pada sebuah kasus seorang user ingin membaca input dari sebuah file teks, benama “coba” dimana isi dari file ini nantinya akan diubah karakternya menjadi huruf kapital. $ tr ‘[a-z]’ ‘[A-Z]’ < coba
Penjelasan : 1. < merupakan operator pengarah input, dimana pada kasus ini input yang dibaca berupa sebuah file yang bernama coba. 2. Perintah tr adalah perintah yang berfungsi untuk merubah jenis huruf kapita menjadi huruf kecil atau sebaliknya, tergantung pada opsi yang digunakan. $ ls > myfile
Penjelasan : 1. > mengarahkan hasil dari perintah ls ke sebuah file yang bernama myfile, sehingga kalau myfile dibaca akan berisi daftar isi direktori. 3.9 PIPES Pipes adalah mekanisme untuk mengambil ouput dari perintah yang berada disisi kiri untuk diarahkan menjadi input bagi perintah yang berada disisi kanan tanda pipes. Simbol dari operator pipes adalah ‘|’. Dalam sebuah perintah yang dituliskan mekanisme pipe bisa lebih dari satu. Dengan menggunakan operator pipes ini sebuah proses akan menjadi lebih singkat dan efisien. $ ls > tmp $ wc –l tmp 4
Proses tersebut diatas bisa dipersingkat dengan menggunakan mekanisme tanda pipes sebagai berikut. $ ls | wc –l 4
Penjelasan : 1. Pada perintah pertama yaitu ls, hasil dari perintah ls diarahkan ke sebuah file bernama tmp. 2. Proses kedua adalah menghitung jumlah baris yang ada dalam file tmp dengan menggunakan perintah wc –l. 3. Dengan menggunakan mekanisme pipe pada proses ketiga, maka proses 1 dan 2 bisa menjadi lebih singka. Hasil dari perintah ls dalam hal ini stdout diarahkan menuju stdin dari perintah wc –l, sehingga keluaran dari proses ini adalah jumlah baris dari daftar direktori.
Copyright Ach Subhan KH 2007
11
Praktikum V Shell Programming
$ echo “scale=3; 15/2” > tmp $ bc < tmp 7.500 $ echo “scale=3; 15/2” | bc $ 7.500
3.10 Fungsi Fungsi adalah skrip yang berisi kumpulan perintah yang berada diluar program utama. Fungsi biasanya berisi perintah-perintah dalam Shell. Tujuan dari adanya fungsi adalah untuk lebih mengefisiensikan pemangilan sekumpulan perintah yang berulang-ulang pada program yang dibuat. Di dalam Shell fungsi juga bisa didefinisikan interaktif maupun secara skrip program, dan meskipun didefinisikan secara interaktif, sebuah fungsi juga bisa dipanggil melalui skrip yang dibuat dalam sebuah file dengan catatan fungsi tersebut sudah di export. Setelah melalui mekanisme export ini sub-shell juga bisa memanggil fungsi tersebut. Bentuk umum dalam mendefinisikan fungsi dalam BASH Shell adalah sebagai berikut : nama_fungsi () { command; command; } function nama_fungsi { command; command; } function nama_fungsi () { command; command; }
Contoh 1: $ > > >
function cetak_selamat { echo “Selamat Datang” echo “Di Shell Programming” }
$ cetak_selamat Selamat Datang Di Shell Programming
Contoh 2: $ > > >
cetak_selamat { echo “Selamat Datang” echo “Di Shell Programming” }
$ cetak_selamat Selamat Datang Di Shell Programming
Contoh 3: $ > > >
function cetak_selamat () { echo “Selamat Datang” echo “Di Shell Programming” }
$ cetak_selamat Selamat Datang Di Shell Programming
IV. Percobaan 4.1 Shell Start-up Percobaan 411 $ cat /etc/profile
Percobaan 412 1. Pastikan posisi direktori berada di home direktori 2. Lihat isi direktori (ls -la | grep “bash” ) 3. Catat semua nama file yang mengandung nama “bash”
Copyright Ach Subhan KH 2007
12
Praktikum V Shell Programming
Percobaan 413 1. Buka file .bashrc yang berada di home direktori dengan editor vim 2. Tambahkan pada baris terakhir skrip berikut echo “Selamat Datang $USER” 3. Simpan file dan keluar dari editor 4. Jalankan perintah berikut $ bash (catat baris terakhir keluaran dari perintah tsb) $ exit $ logout
5. Login kembali dengan username dan password masing-masing 6. Catat pesan ucapan selamat yang tampil setelah berhasil login
4.2 Variabel (Lanjut) Percobaan 421 $ data=`pwd` $ echo $data (catat keluarannya) $ echo ${data#*home} (catat keluarannya)
Percobaan 422 Catat isi variabel data, sdata, dan tdata $ $ $ $ $
data=”halo ini bejo” sdata=${data#*lo} echo $sdata tdata=${data%be*} echo $tdata
Percobaan 423 Catat isi variabel pat, lpat, spat, lpat_l, dan spat_l $ $ $ $ $ $ $ $ $
pat=”dari jam 2 siang hingga jam 2 malam ” spat=${pat%jam*} lpat=${pat%%jam*} echo $spat echo $lpat spat_l=${pat#*2} lpat_l=${path##*2} echo $spat_l echo $lpat_l
4.3 Echo Untuk setiap percobaan bagian 431 s/d 434, berdasarkan hasil pengamatan berikut penjelasan pada setiap escape sequence character yang digunakan. Percobaan 431 $ echo –e “Selamat Datang \nDi Shell Programming”
Percobaan 432 $ echo –e “\t\tHalo $USER\n\t\tHari ini $(date)”
Percobaan 433 $ echo –e “\aHalo\v$USER\vAnda\vBerada\vDi `hostname`”
Percobaan 434 $ echo –e “Ini adalah\b shell\n programming\b”
Percobaan 435 Jika diinginkan keluaran sebuah kalimat berikut Hai UUUU Anda Berada di Direktori DDDD Pada Komputer HHHH Dengan nama Login LLLL Dan pada saat ganti baris berbunyi alert UUUU=Name user DDDD=Nama direktori saat ini HHHH=Nama Host/komputer
Copyright Ach Subhan KH 2007
13
Praktikum V Shell Programming
LLLL=Nama Login Buatlah satu baris kode Shell interaktifnya dikomputer anda, dan catat kode hasil yang sudah benar di laporan sementara !!!!
4.4 Prompt Percobaan 441 1. Tulis primary prompt yang ada dilayar monitor anda saat ini 2. Jalankan Shell interaktif berikut : $ PS1=”\d \$ ” 3. Tulis perubahan primary prompt yang ada dilayar monitor anda saat ini
Percobaan 442 1. Jalankan Shell interaktif berikut : $ echo “halo bee > selamat datang “ 2. Tulis bentuk secondary prompt yang ada di layar monitor 3. Jalankan Shell interaktif berikut : $ PS2=”\t on \d ” 4. Jalankan kembali Shell interaktif pada langkah 1 5. Catat bentuk secondary prompt saat ini.
Percobaan 443 $ PS1=”\u@\h :\w \$ ” Catat bentuk primary prompt saat ini
Percobaan 444 1. Jika diinginkan bentuk primary prompt sebagai berikut : “Saya UUUU@HHHH on TTTT DDDD : cd $ “ Dimana, UUUU=Nama user HHHH=Nama Host TTTT=Waktu saat ini DDDD=Tanggal saat ini cd = direktori user 2. Tuliskan Shell interaktif hasil percobaan untuk membuat bentuk primary prompt pada langkah 1.
Percobaan 445 1. Buat kode Shell interaktif untuk secondary prompt berikut : “UUUU > “ Dimana, UUUU=Nama user 2. Uji kode Shell interaktif anda seperti pada percobaan 442 3. Tulis kode Shell interaktif hasil percobaan langkah 1.
4.5 Command Line Percobaan 451 $ $ $ $ $
ls pwd date ls;pwd;date ( ls;pwd;date )
Percobaan 452 $ $ $ $ $ $ $
type type type type type type type
ls pwd bash find cp man echo
Copyright Ach Subhan KH 2007
14
Praktikum V Shell Programming
Percobaan 453 $ ls bee $ echo $? Ouput error Kode Exit Status
= =
$ lb bee $ echo $? Ouput error Kode Exit Status
= =
$ grep “root” /etc/passwd $ data=$? $ echo $data Ouput error = Kode Exit Status = $ grep “root” /etc/paswd $ data=$? $ echo $data Ouput error = Kode Exit Status = $ grip “root” /etc/passwd $ echo $? Ouput error = Kode Exit Status =
4.6 Command Line Completion Percobaan 461 Catat respon yang keluar di layar monitor pada saat tombol tab ditekan 1 kali atau 2 kali. $ da [tab] ‘enter’ $ ca [tab][tab] s [tab] ‘enter’ $ lo [tab][tab] g [tab][tab] n [tab] ‘enter’
4.7 Alias Percobaan 471 $ $ $ $ $ $
alias alias alias alias alias alias
dir=’ls’ dr=’ls -al’ sl=’ls’ tgl=’date’ dae=’date’ hosnem=’hostname’
Percobaan 472 $ $ $ $ $ $ $
dir dr sl tgl dae hosnem alias
- Catat semua alias yang ada dalam daftar (output dari perintah terakhir) Percobaan 473 1. Buatlah alias untuk perintah berikut dengan suku kata apa saja Perintah uname –a who ps –aux who | wc –l grep “root” /etc/passwd
Kata Alias yunem hu ps wwc greprut
2. Jalankan perintah pada langkah 1 dengan menyebut nama aliasnya $ $ $ $ $
yunem ps hu greprut wwc
Copyright Ach Subhan KH 2007
15
Praktikum V Shell Programming
3. 4. 5. 6.
Catat daftar alias yang telah dibuat. (selain alias pada percobaan 471) Logout dari Shell Login ke dalam Shell dengan username dan password Lihat daftar alias saat ini.
Percobaan 474 1. Lihat file .bashrc dengan menggunakan perintah $ cd ~ $ ls .bashrc .bashrc (output yang benar)
2. Buka file .bashrc dengan menggunakan editor vim. 3. Masuk ke mode insert dan arahkan kursor ke baris paling akhir 4. Tambahkan alias berikut pada bagian akhir alias alias alias alias
sl=’ls –l’ grip=’grep “root” /etc/passwd’ jam=’date +%T’ tgl=’date +D’
5. Simpan file dan keluar dari editor 6. Catat daftar alias yang ada dengan mengunakan perintah $ alias 7. Jalankan perintah dengan menyebut aliasnya $ $ $ $
sl grip jam tgl
8. Logout dari Shell 9. Login ke dalam Shell dengan username dan password 10. Lihat kembali daftar alias
4.8 I/O Redirection Percobaan 481 $ ls $ ls > myfile $ cat myfile
Amati output perintah ke-1 dengan output perintah ke-3 Percobaan 482 $ date >> myfile $ cat myfile
Percobaan 483 $ cat << EOF > > > EOF Percobaan 484 #!/bin/bash cat << _EOF <TITLE>Create HTML FIle Html ini dibuat melalui skrip Shell BASH _EOF
4.9 PIPES Percobaan 491 $ ls > tmp $ sort –nr < tmp $ rm tmp $ ls | short -nr
Copyright Ach Subhan KH 2007
16
Praktikum V Shell Programming
Percobaan 492 $ du > tmp $ sort -nr < tmp $ rm tmp $ du | sort -nr
Percobaan 493 $ ls $ ls > tmp $ cat tmp
Bandingkan hasil perintah ls dengan isi file tmp Percobaan 494 $ $ $ $
ps ps ps ps
ax ax ax ax
| | | |
grep grep grep grep
bas[h] “init” “bash” ini[t]
4.10 Fungsi Percobaan 4101 $ > > >
function halo(){ echo “Selamat datang $USER” echo “Di Shell Programming” }
$ halo
Percobaan 4102 #!/bin/bash function test_fungsi(){ echo “ini test_fungsi” } echo “hai $USER” $(test_fungsi)
Percobaan 4103 #!/bin/bash TITEL=”Membuat Fungsi Sistem Informasi $HOSTNAME” SAAT_INI=$(date+”%d %T %Z”) UPD=”Sistem ini di update oleh $USER pada tanggal $SAAT_INI” function info_uptime(){ echo “
informasi uptime
” echo “<pre>” uptime echo “” } cat <<- EOF <TITLE>$TITEL
$TITEL
$UPD
$(info_uptime) EOF
V. Tugas
Copyright Ach Subhan KH 2007
17