Sistem Operasi 2 : Linux BAB VIII
SHELL (Pertemuan 10 dan 11)
Shell adalah “command Executive”, artinya program yang menunggu instruksi dari pemakai, memeriksa sintak dari instruksi yang diberikan, kemudian mengeksekusi perintah tersebut.
Shell ditandai dengan prompt. Umumnya adalah $ (bash shell) untuk pemakai biasa dan # untuk superuser (root). Pada awalnya UNIX (System V) mengembangkan Shell yang dikenal dengan nama Bourne Shell (/bin/sh), shell tersebut dirancang oleh Steve Bourne dari AT & T.
Pada perjalanannya /bin/sh kemudian dikembangkan oleh David Korn, oleh karenanya Shell tersebut kemudian dikenal dengan nama Korn Shell (/bin/ksh).
UNIX Berkeley (BSD = Berkeley Software Distribution) juga mengembangkan Shell yang dikenal dengan nama C-Shell (/bin/csh). Shell ini mengambil syntac yang mirip dengan bahasa C (C-Language). Penciptanya adalah Bill Joy (salah satu pendiri/ Founder dari Sun MicroSystems).
Linux mengembangkan Shell yang kompatibel dengan Bourne-Shell, juga mengadaptasi kemampuan yang ada di Korn-Shell. Shell ini disebut sebagai bash (Bourne Again Shell) dengan nama program (/bin/bash).
Perbedaan antara shell-shell tersebut hampir tidak ada, kecuali pada fasilitas pemrograman dan editing. Umumnya pemakai UNIX aliran AT&T menggunakan Bourne-Shell dan Korn Shell, aliran BSD seperti SunOS menggunakan C-Shell, sedangkan pemakai Linux menggunakan BASH. Pada awalnya bash diciptakan untuk menghindari lisensi/copyright Unix.
Sistem Operasi 2 : Linux
Shell mana yang akan dipakai pengguna Linux, dapat dipilih saat membuat account baru, atau mengubahnya pada file /etc/passwd.
root:*:0:0:Charlie &,,,:/root:/bin/csh
demon:*:666:666::/home/bofh/demon:/bin/ksh
di0311111:*:1000:1001:Bill Gates:/home/di/di031111:/bin/sh
Pada prinsipnya shell adalah program yang dapat dibuat melalui bahasa pemrograman seperti C atau lainnya. Kreatifitas pengembang software banyak yang menciptakan shell lainnya, walaupun kurang populer seperti tcsh, zsh dan lainnya.
8.1 Profile
Saat seoarang user melakukan login, sistem akan menjalankan program antara lain : /etc/profile
Berisi shell script yang berlaku untuk seluruh pengguna Linux yang melakukan session login. PATH="/usr/local/bin:/usr/bin:/bin:/usr/games:/var/qmail/bin" PS1='\u@\h:\w\$ ' umask 022 HOSTNAME="`cat /etc/HOSTNAME`" HISTSIZE=1000 HISTFILESSIZE=1000
export PATH TERM PS1 HOSTNAME HISTSIZE HISTFILESIZE USER LOGNAME
PATH, merupakan daftar nama direktori. Bila sebuah instruksi diberikan dari prompt shell, maka instruksi tersebut akan dicari pada daftar tersebut.
PS1, adalah prompt. Dalam hal ini dirinci sebagai berikut : PS1='\u@\h:\w\$ ' \u = Nama user
\h = Nama Host
\W = Nama working directory
.bash_profile
Merupakan profile setiap pemakai yang terletak pada home direktori masing-masing user. Sebelumnya sistem melakukan pengecekan apakah ada file ini, jika ada sistem akan mengeksekusi. File .bash_profile adalah hiddent file yang terletak dihome direktori masing-masing user. Untuk melihatnya dapat digunakan perintah $ls –a
Sistem Operasi 2 : Linux .bash_login
File .bash_login juga terletak dalam direktori home user. Urutan pengeksekusiannya adalah, jika dalam home direktori user tidak ditemukan file .bash_profile, maka sistem akan mencari file .bash_login. Seterusnya jika sistem tidak menemukan file .bash_login, sistem akan mencari file .profile untuk dieksekusi bila ditemukan.
.bashrc
File .bashrc akan dieksekusi untuk perpindahan dari satu shell ke shell yang lainmelalui instruksi su (substitute user).
.bash_logout
User pada saat logout, shell terlebih dahulu akan mencari file .bash_logout, bile file tersebut ada maka file .bash_logout akan dieksekusi terlebih dahulu. Biasanya file ini diisi perintah-perintah untuk membersihkan jejak user, untuk keamanan.
$ cat .bash_logout clear
Pada contoh diatas .bash_logout hanya berisi satu instruksi, yaitu clear yang berarti membersihkan layar saat proses logout dilakukan oleh user tersebut.
8.2 History
History diadaptasi dari C-Shell, yaitu catatan dari semua instruksi yang sejauh ini telah dilakukan. Catatan ini dapat dilihat sebagai history, kemudian dapat dipilih kembali, diedit dan dieksekusi. History umumnya memudahkan pemakai untuk mengedit kembali instruksi kompleks dan panjang terutama bila terjadi kesalahan pada penulisan intruksi maupun parameter.
History mempunyai batasan maksimum instruksi yang dapat disimpan. Hal ini dinyatakan pada variabel HISTSIZE.
Sistem Operasi 2 : Linux
Untuk menampilkan instruksi yang telah dilakukan dengan menjalankan command history.
$history <enter> --cut----
667 w
668 cat /etc/profile 669 cat /etc/profile | less 670 ls -a
671 history
Daftar intruksi dilengkapi dengan nomor urut. Nomor kemudian dapat dijadikan parameter dalam mengedit atau mengulang instruksi. Selain instruksi history, instruksi fc (fix command) juga dapat digunakan, seperti berikut :
$ fc –l 667 w
668 cat /etc/profile 669 cat /etc/profile | less 670 ls -a
671 history 672 fc 673 history 674 fc –l
Secara lebih nyata, fc dapat menampilkan instruksi antara 2 buah nomor, misalnya no. 667 s.d 669 :
an71k@lug:~$ fc -l 667 669 667 w
668 cat /etc/profile 669 cat /etc/profile | less
Cara diatas dapat diganti dengan menggunakan kata depan instruksi yang diberikan, an71k@lug:~$ fc -l clear whereis
683 clear 684 ls -l 685 ps -aux 686 whereis ls
Sistem Operasi 2 : Linux
Intruksi dapat diedit dengan menggunakn fasilitas editor, misalnya editor vi. Penggunaan vi ini dapat dinyatakan dengan parameter sebagai berikut :
$ fc 685
Instruksi diatas akan mengaktifkan editor vi, dan instruksi tersebut dapat diedit dalam vi, kemudian setelah selesai tekan ESC ZZ untuk keluar dari editor.
Navigator history, dapat digunakan sebagai bantuan untuk bernavigasi terhadap instruksi dalam daftar history. Navigator tersebut antara lain :
^P (CTRL + P) : Melihat instruksi sebelumnya ^N (CTRL + N) : Melihat instruksi sesudahnya
!! : Eksekusi kembali instruksi sebelumnya !! -3 : Instruksi 3 sebelum terakhir akan di eksekusi !! 100 : Ulangi eksekusi instruksi no 100
8.3 Prompt String (PS)
Prompt String merupakan script yang berada pada file /etc/profile atau .bash_profile yang berfungsi untuk mengubah tampilan prompt user. Setelah mengganti variabel PS1, berikutnya jalankan instruksi export PS1 agar dikenal disemua shell.
Beberapa penggantian prompt seperti berikut ini :
$ PS1=”\! >” Æ prompt dari nomor history
69 >
69 > PS1=”\d > “ Æ Prompt dari tanggal sekarang Mon Apr 12 >
Mon Apr 12 >PS1=”\t >” ÆPrompt jam sistem 20:10:05 >
20:10:05 >PS1=”\u >” ÆPrompt username anjik >
anjik >PS1=”\w > “ ÆPrompt tanda “~” yang artinya home direktori
~ >
~>PS1=”\h >” ÆPrompt hostname
Sistem Operasi 2 : Linux
Untuk menghasilkan sebuah prompt NamaUser@NamaMesin didirectory x $ jika dituliskan dalam prompt adalah :
PS1=”\u@\h \w $ “
Dalam menulis prompt selain PS1, juga dapat digunakan PS2 yang nantinya sebagai prompt jika shell memerlukan input.
8.4 BASH-Script
Bash Script adalah file yang berisi koleksi program yang dapat dieksekusi melalui perintah shell (prompt). Program BASH-Script akan menjadi executable jika modus file ditambah dengan “x”. Perhatikan contoh,
$ cat > prg1.sh
echo “Contoh program Bash”
^ D
Untuk dapat dijalankan dalam prompt/shell, terlebih dahulu akses mode file harus ditambah executable atau “x”, sebagai berikut :
$ ls -l prg1.sh
-rw-r--r-- 1 an71k users 27 Apr 12 17:45 prg1.sh $ chmod +x prg1.sh
$ ls -l prg1.sh
-rwxr-xr-x 1 an71k users 27 Apr 12 17:45 prg1.sh*
Menjalankan Script
Untuk menjalankan script tersebut dapat dilakukan dengan beberapa cara, antara lain :
$ bash prg1.sh
Contoh Program BASH $ sh prg1.sh
Contoh Program BASH $ . prg1.sh
Contoh Program BASH $ ./prg1.sh
Sistem Operasi 2 : Linux Contoh Program BASH
Eksekusi menggunakan . prg1.sh berarti adalah eksekusi shell, sedangkan ./prg1.sh berada pada direktori aktual.
Aturan dalam pembuatan script shell dinyatakan dengan menulis pada baris pertama shell script dengan :
#! /bin/bash
8.4.1 Variabel
Variabel adalah suatu nama yang dapat digunakan untuk menampung suatu nilai dan nilai yang ada dapat diubah. Pemberian nilai ke suatu variabel dapat melalui penugasan, sebagai berikut :
Variabel=nilai Contoh :
jalan=“Kedung Baruk 98 Surabaya“
Apabila nilai mengandung karakter khusus seperti spasi, nilai harus ditulis dalam tanda petik. Pemberian string “Kedung Baruk 98 Surabaya“ ke variabel jalan, sebelum dan sesudah tanda sama dengan (+) tidak boleh ada spasinya.
Untuk memperoleh nilai/isi dari variabel perlu diawali dengan tanda “$”, perhatikan contoh :
echo $jalan
8.4.2 Parameter Posisi
Banyaknya sekali perintah UNIX yang melibatkan argumen (parameter). Misalnya untuk menciptakan file bernama a, b, dan c perlu menuliskan perintah berupa :
$touch a b c
Argumen-argumen seperti ini dapat dikenali pada skrip shell dan biasa disebut sebagai parameter posisi. Parameter di BASH Shell yang berhubungan dengan parameter posisi, antara lain :
$# Jumlah parameter $0 Nama skrip Shell
Sistem Operasi 2 : Linux $1 Parameter Pertama
$2 Parameter Kedua
${10} Parameter ke sepuluh
$* Semua parameter
Contoh penggunaan parameter : $cat prg3.sh
#! /bin/bash # prg3.sh # = = = = = =
echo “jumlah parameter = $#“ echo “semua parameter = $*“ echo “ Isi $0 : “ $0
echo “ Isi $1 : “ $1 echo “ Isi $2 : “ $2
$./prg3.sh mencoba parameter shell jumlah parameter = 3
semua parameter = mencoba parameter shell Isi $0 : ./prgprg3.sh
Isi $1 : mencoba Isi $2 : parameter
8.4.3 Perintah dan fungsi yang dapat digunakan :
Perintah - perintah dari yang diketikkan oleh user secara default telah disimpan ke dalam sebuah file. Perintah untuk melihat perintah yang terakhir anda ketikkan dengan menggunakan “history”.
Perintah-perintah dari Bourne Shell programming ini hampir sama digunakan oleh user. Perintah-perintah tersebut dapat diketikkan pada editor vi , sehingga dapat dijadikan sebuah program. Bentuk prompt dari Bourne Shell adalah ‘$’.
1. echo
Digunakan untuk menampilkan keterangan pada layar komputer. Option: -n digunakan untuk ganti baris baru.
Contoh :
Sistem Operasi 2 : Linux
Hasil :
Saya hendah belajar Bourne Shell.
2. tanda( $ )
Digunakan untuk melihat isi dari suatu variabel file. Contoh :
$ kalimat=‘Hallo apa kabar’ $ echo $kalimat
Hasil:
Hallo apa kabar
3. tanda ( ` ... ` )
Digunakan untuk menjalankan perintah yang ada di dalam tanda petik tunggal terbalik ( ` ... ` ) Contoh: $ coba=`pwd` $ echo $coba Hasil: /home/siswa 4. Tanda ( \ )
1.Digunakan untuk membedakan antara perintah dengan tanda yang akan dicetak.
Contoh :
$ echo “\” “
Hasil: “
2. Digunakan untuk menjalankan suatu perintah di dalam perintah. Contoh:
$echo “Sekarang saya ada di direktory : \`pwd\` ” Hasil:
Sistem Operasi 2 : Linux 5. Tanda titik koma ( ; )
Digunakan untuk memisahkan sederet perintah dalam 1 baris.
Contoh :
$ ls -al;who
Hasil :
* Akan menjalankan list direktory kemudian menjalankan perintah who.
6. Tanda Pipe ( | )
Digunakan untuk membatasi antara perintah yang satu dengan yang lainnya, dimana tiap output perintah menjadi intput perintah selanjutnya.
Contoh :
$ who | ls $ who | sort
Hasil :
* Akan memperlihatkan user yang aktif, diurutkan kemudian ditampilkan.
7. read <nama variabel>
Digunakan untuk mengisi nama variabel.
Contoh :
$ read siA siB
apa kabar
Hasil:
maka siA akan dimasukkan kata apa dan si B dimasukkan kata kabar.
8. if
Digunakan untuk perintah bersyarat.
Format :
if [ekspresi]
then
Sistem Operasi 2 : Linux elif [ekspresi] then perintah-perintah else perintah-perintah fi Option :
-r digunakan untuk menguji apakah file tersebut dapat dibaca oleh user. -w digunakan untuk menguji apakah file tersebut dapat ditulisi oleh user. -x digunakan untuk menguji apakah file tersebut dapat dijalankan oleh
user.
-s digunakan untuk menguji apakah file tersebut berukuran lebih besar dari 0.
-d digunakan untuk menguji apakah file tersebut merupakan direktory. -f digunakan untuk menguji apakah file tersebut merupakan sebuah file. -a digunakan untuk perintah AND.
-o digunakan untuk perintah OR. ! digunakan untuk perintah negasi.
Contoh :
if test -f “$1” (ket: perintah “test” menggantikan tanda [ ] )
then ls $1
elif test -d “$1”
then (cd $1;ls -a)
else echo $1 bukan suatu file atau direktory fi
9. case
Perintah ini digunakan sebagai optional. Format :
case string in
kondisi)
Sistem Operasi 2 : Linux kondisi) perintah-perintah;; *) perintah-perintah;; esac
Tanda ;; digunakan untuk mengakhiri suatu blok perintah Tanda esac digunakan untuk mengakhiri suatu case.
Contoh :
case $logname in
root)
echo ‘saya adalah supervisor’;; siswa)
echo ‘saya adalah siswa’;;
*)
echo ‘saya pendatang baru’;;
esac
10. Function.
Suatu fungsi dapat dibuat pada bourne shell. Format: function_name() { perintah-perintah shell } Contoh: getyn() {
while echo “0 (y/n) ? c “ > &2
do read yn rest
case $yn in
[Yy] return 0
[Nn] return 1
Sistem Operasi 2 : Linux esac
done }
Perintah - perintah di atas dapat digabungkan menjadi sebuah program sehingga user dapat menjalankan dengan perintah :
$ bsh <nama file>
maka sistem akan menjalankan nama file tersebut seperti halnya pada sistem operasi DOS yaitu autoexec.bat.
8.5 Dialog
Dialog dibuat untuk memudahkan para pembuat script shell dalam meningkatkan keindahan dan interaktifitas aplikasi. Beberapa kotak (box) pilihan dari perintah dialog diantaranya adalah :
1. msgbox
Pilihan msgbox dapat digunakan untuk memberikan pesan. Untuk memberikan pesan “Halo“ diatas sebuah kotak ukuran 10X40 dapat dilakukan dengan perintah $dialog –msgbox Halo 10 40 Maka setelah ditekan enter akan muncul sebuah kotak yang dilengkapi dengan tombol dengan label OK.
2. yesno
Ini adalah pilihan dari suatu perintah, tinggal dipilih, apakah kita milih yes, atau milih no. Misalkan contoh berikut :
$dialog --yesno “Apa anda baik-baik saja ! $LOGNAME “ 10 40
Sebenarnya pilihan yes dan no bisa ditindak lanjuti dengan action, misalnya kalau yes melakukan x jika no melakukan y. Maka bila dibuat sebuah script sebagai berikut :
Sistem Operasi 2 : Linux 3. inputbox
Pilihan box ini digunakan untuk meminta input dari user, segala input akan dimasukkan dalam variabel stderr, misalnya : $dialog –input halo 10 40
4. textbox
Fitur ini digunakan untuk menampilkan isi suatu file text kedalam dialog box. $ dialog –textbox /etc/passwd 10 40
5. menu
Dalam dialog ini pengguna dihadapkan pada pilihan menu, yang hasil pilihan tersebut disimpan dalam variabel stderr.
$dialog –menu “Kegiatanku: 20 60 10 makan makan minum minum tidur tidur
6. radiolist
Radiolist menyediakan kemampuan untuk memberikan serangkaian pilihan dimana hanya satu pilihan yang aktif.
$ dialog --radiolist "Distro anda : " 20 60 10 Debian Debian on Redhat Redhat off slackware slackware off other other off
7. checklist
Apabila radiolist hanya mengizinkan satu pilihan aktif, maka cheklist mengizinkan pemilihan beberapa item sekaligus.
$dialog --checklist "Distro anda : " 20 60 10 Debian Debian Redhat Redhat Slackware Slackware off other other off
dialog --yesno "Apa anda baik-baik saja ! $LOGNAME " 10 40 export retval=$?
if [ $retval -eq 0 ]; then
dialog --msgbox "Sukurlah $LOGNAME" 10 40 else
dialog --msgbox "Wah kasihan kamu : $LOGNAME" 10 40 fi
Sistem Operasi 2 : Linux 8. guage
Memberikan informasi seberapa jauh pekerjaan telah selesai dapat dilakukan. Gauge berfungsi seperti halnya progres bar. Nilai presentasi dari gauge dapat dibaca dari standard input.
$cat dialog2.sh
Latihan :
1. Buatlah program untuk menghitung jumlah harga pembelian 2 barang, jika totalnya melebihi 50.000 maka mendapat diskon 20 % dan berapa jumlah uang yang harus dibayar
2. Buatlah program untuk menghitung nilai akhir yang didapatkan dari 35 % nilai UTS + 45 % nilai UAS dan 20 % nilai Tugas.
3. Buahlah program untuk menghitung grade nilai mahasiswa, jika diketahui apabila total nilai adalah >80 grade=A, total nilai > 70 s.d 80 grade = B, total nilai 55 s.d 70 grade = C, sedangkan dibawah itu adalah E.
4. Buatlah program untuk menampilkan faktorial bilangan yang diimputkan ! i=0
while [ $i -le 100 ] do
echo $i | dialog --gauge processing 10 40 sleep 0.01
let i=$i+1 done