Praktikum 9 Pemrograman Shell (2) A. T U J U A N 1. Mengetahui variable local dan global di shell 2. Mengetahui eksekusi bersyarat 3. Mengenal fungsi dan cara memanggilnya 4. Mampu membuat user interface dan dialog utility 5. Mampu melakukan trap command B. DASAR TEORI VARIABLE LOKAL DAN GLOBAL PADA SHELL Secara umum semua variable adalah lokal. Variable lokal digunakan pada shell yang sama, jika anda me-load atau memanggil shell lainnya (dengan mengetik /bin/bash pada prompt) maka shell yang baru tersebut akan mengabaikan variable pada shell sebelumnya. Global shell didefinisikan : Anda dapat mengkopi variable shell yang lama ke shell yang baru. Untuk membuat suatu variable lokal menjadi global digunakan perintah export sintaks : export variable1, variable2,...variablen
EKSEKUSI BERSYARAT Operatornya adalah && (dibaca AND) dan (dibaca OR) sintaks : command1 && command2 command1 command2 anda dapat menggunakan keduanya sintaks : command1 && command2 command3 jika command1 sukses dieksekusi maka shell akan menjalankan command2 dan jika command1 tidak sukses maka shell akan mengeksekusi command3. FUNGSI Fungsi adalah program yang dapat dipanggil oleh program lainnya dengan menggunakan notasi NamaFungsi(). Fungsi memberikan exit status ($?) yang dinyatakan dengan return nr, atau nilai 0 sebagai default. Membuat fungsi diawali dengan nama fungsi, parameter, kemudian blok program yang dinyatakan dalam { }. Contoh : F1( ) {.... return 1 } Variabel dapat didefinisikan dalam fungsi sebagai variable local atau
global. Hal yang perlu diperhatikan, nama variable yang digunakan dalam sebuah fungsi, jangan sampai bentrok dengan nama variable yang sama di luar fungsi, sehingga tidak terjadi isi variable berubah. USER INTERFACE DAN DIALOG UTILITY Program/Shell Script yang bagus harus dapat berinteraksi dengan user. Untuk itu kita dapat menggunakan : 1. Command line argument, misal $./coba.sh 4 3, dimana 4 dan 3 adalah command line argument bagi script coba.sh 2. Statemen echo dan read, untuk membaca input dari prompt. Selain itu dapat juga menggunakan dialog utility. sintaks : dialog --tilte {judul} --backtitle {judul belakang} {Box opsi} dimana Box opsi : --yesno {teks} {tinggi} {lebar} --msgbox {teks} {tinggi} {lebar} --infobox {teks} {tinggi} {lebar} --inputbox {teks} {tinggi} {lebar}[{init}] --textbox {teks} {tinggi} {lebar} --menu {teks} {tinggi} {lebar} {menu} {tinggi} {tag1} item1}... TRAP COMMAND Berfungsi untuk menjebak suatu command. sintaks :
trap {commands} {signal numberlist} Signal Number Keterangan 0 shell exit 1 hangup 2 interrupt (CTRL+C) 3 quit 9 kill C. LANGKAH-LANGKAH 1. Masuk ke sistem operasi Linux. 2. Login sebagai mahasiswa. 3. Lakukan operasi pembuatan variable local dan global. 4. Lakukan eksekusi bersyarat 5. Buatlah fungsi 6. Buat user interface : message box, input box, yesno box, dialog dengan menu 7. Lakukan trap command D. PERCOBAAN Percobaan 1 : Variable Local 1. Ketikkan variable berikut : $vehc=bus $echo $vehc 2. Buka shell baru (yang kedua), lihat isi variable
$/bin/bash $echo $vehc 3. Ketik variable di shell yang baru, tampilkan variable tersebut $vehc=sedan $echo $vehc 4. Keluar dari shell baru, tampilkan variable $exit $echo $vehc Percobaan 2: Variable Global 1. Ketik variable berikut : $vehc=bus $echo $vehc 2. Export variable tersebut agar menjadi global, masuk ke shell baru, lihat hasilnya $export vehc $/bin/bash $echo $vehc 3. Keluar dari shell baru $exit $echo $vehc Percobaan 3 : Eksekusi Bersyarat 1. Ketik command berikut : $rm myfile && echo File berhasil dihapus echo File tidak terhapus
Percobaan 4 : Fungsi 1. Ketik fungsi berikut setelah prompt $ Hallo() { echo Hallo $LOGNAME, have a nice day return } 2. Panggil fungsi tersebut $Hallo 3. Fungsi ini akan hilang ketika komputer di-restart. Untuk mengatasi hal ini dan untuk menambahkan fungsi anda dan untuk otomatisasi task harian, masukkan fungsi ke dalam file /etc/bashrc. Untuk ini anda harus logon sebagai root. $ su l 4. Buka file /etc/bashrc #vi /etc/bashrc 4.Tekan shift+g untuk ke akhir file, tambahkan fungsi today() berikut untuk mencetak format tanggal : # today() untuk mencetak tanggal # untuk menjalankan fungsi ini ketik today setelah prompt $ atau # today() { echo Hari ini adalah `date +"%A %d in %B of %Y (%r)"` return } 5. Simpan file, lihat file setelah dimodifikasi
#cat /etc/bashrc 6. Fungsi ini akan tersedia untuk semua user. Untuk menjalankan fungsi ini anda harus exit dahulu, lalu login kembali, kemudian jalankan fungsi ini #today $today 7. Untuk membuat fungsi bagi user tertentu dan hanya tersedia bagi user tertentu maka buka file.bashrc di home directory user $ vi.bashrc 8. Tekan (Shift+G) untuk ke akhir file, kemudian ketik contoh fungsi berikut Hai() { } echo Hai $LOGNAME! Tidak akan ada perubahan, kecuali anda login kembali! echo Tekan sembarang tombol read return 9. Simpan lalu exit. Untuk menjalankan fungsi ini anda harus exit dahulu lalu login kembali. Fungsi ini akan tersedia hanya bagi user anda, tidak bagi semua user di sistem. $ Hai Note : gunakan file.bashrc di home direktori anda untuk menambahkan alias dan fungsi Percobaan 6 : file.bash_logout 1. Untuk membuat pesan atau aksi ketika anda logout, buka file.bash_logout lalu tambahkan apa yang ingin anda jalankan ketika logout. Misal ketika logout anda ingin menampilkan pesan goodbye $vi.bash_logout 2. Lalu ketik pesan echo Goodbye $LOGNAME tekan sembarang tombol
Percobaan 7 : User Interface 1. Buat script di bawah ini untuk membaca masukan dari user $ cat > userinterf # script menggunakan echo dan read untuk interaksi user echo "Ketikkan nama anda..please :" read nama echo "Umur anda..please :" read umur umurbaru=`expr $umur + 1` echo "hallo $nama, tahun depan umurmu $umurbaru.." 2. Simpan lalu jalankan $chmod 755 userinterf $./userinterf Percobaan 8 : User Interface 1. Buat script berikut : $cat > menu1 while : do clear echo "---------------------------" echo " Menu Utama" echo "---------------------------" echo "[1] Lihat tanggal hari ini" echo "[2] Lihat file pada direktori" echo "[3] Lihat kalender" echo "[4] Buka teks editor untuk mengetik surat" echo "[5] Keluar" echo "===========================" echo -n "Pilihan anda [1-5]: " read pil case $pil in 1) echo "Hari ini `date`, tekan enter..." ; read ;; 2) echo "File di direktori `pwd`" ; ls -l ; echo "Tekan enter..." ; read ;; 3) cal ; echo "Tekan enter..." ; read ;; 4) vi ;; 5) exit 0 ;; *) echo "Ooopss..silakan pilih 1-5.."; echo "Tekan enter.." ; read ;;
esac done 2. Jalankan script tersebut Percobaan 9 : Dialog Utility 1. Ketik script berikut sebagai contoh penggunaan dialog utility. $cat > dialog1 dialog --title Linux Dialog Utility Infobox --backtitle Belajar Shell Script Linux --infobox Dialog Box ini disebut infobox, untuk menampilkan informasi di layar..tekan sembarang tombol... 7 50 ; read 2. Simpan dan jalankan $chmod +x dialog1 $./dialog1 Percobaan 10 : Message Box 1. Ketik script ini untuk membuat message box $cat > dialog2 dialog --title Linux Dialog Utility Message Box --backtitle Belajar Shell Script Linux --msgbox Dialog Box ini disebut message box, untuk menampilkan informasi di layar beserta tombol OK..Tekan sembarang tombol... 9 50 ; 2. Simpan dan jalankan $chmod +x dialog2 $./dialog2 Percobaan 11 : YesNo Box
1. Ketik script berikut untuk membuat yesno box $cat > dialog3 dialog --title Peringatan : Penghapusan File --backtitle Belajar Shell Script Linux --yesno \nyakin ingin menghapus '/usr/surat/lamarankerja' file 7 60 sel=$? case $sel in 0)echo user akan menghapus file ;; 1)echo user tidak jadi menghapus file ;; 255)echo dibatalkan user, dengan menekan tombol [ESC] ;; esac 2. Simpan dan jalankan $chmod +x dialog3 $./dialog3 Percobaan 12 : InputBox 1. Ketik script berikut untuk membuat input box $cat > dialog4 dialog --title Inputbox mengambil input dari user --backtitle Belajar Shell Script Linux --inputbox Silakan masukkan nama anda 8 60 2>/tmp/input.$$ sel=$? na=`cat /tmp/input.$$` case $sel in 0) echo Hallo $na ;; 1) echo Cancel ditekan ;; 255) echo Tombol [ESC] ditekan ;; esac rm -f /tmp/input.$$ 2. Simpan dan jalankan $chmod +x dialog4 $./dialog4
Percobaan 13 : Dialog Menu 1. Ketik script berikut untuk membuat menu dengan dialog $cat > dialogmenu dialog --backtitle Belajar Shell Script Linux --title Menu Utama --menu Gunakan panah [UP] [DOWN], [ENTER] untuk memilih 15 50 3 Tanggal Menampilkan Tanggal Kalender Melihat Kalender Editor Membuka Editor Vi 2>/tmp/menuitem.$$ menuitem=`cat /tmp/menuitem.$$` opt=$? case $menuitem in Tanggal) date;; Kalender) cal;; Editor) vi;; esac 2. Simpan dan jalankan $rm -f /tmp/menuitem.$$ $chmod +x dialogmenu $./dialogmenu Percobaan 14 : Trap Command 1. Ketik command berikut $cat > tessinyal ls -R / 2. Simpan dan jalankan $chmod +x tessinyal $./tessinyal 3. Tekan [ctrl]+c untuk menghentikannya. Ctrl+c merupakan sinyal 4. Sekarang buat script di bawah ini
$cat > tessinyal1 #Mengapa harus menjebak sinyal? Take_input() { recno=0 clear echo "Aplikasi Catatan Appointment di Linux" echo -n "Masukkan nama file database : " read filename if [! -f $filename ];then echo "Maaf, $filename tidak ada, sekarang akan dibuat $filename database" echo "Aplikasi Catatan Appointment database file" > $filename fi echo "Pemasukan data pada tanggal: `date`" >/tmp/input0.$$ while : do echo -n "Judul Appointment :" read nama echo -n "Time :" read waktu echo -n "Catatan :" read catatan echo -n "Data Okay (y/n)?" read jawaban } done if [ $jawaban = y -o $jawaban = Y ]; then recno=`expr $recno + 1` echo "$recno. $nama $waktu $catatan" >> /tmp/input0.$$ fi echo "Tambah data lagi (y/n)?" read isnext if [ $isnext = n -o $isnext = N ];then cat /tmp/input0.$$ >> $filename rm -f /tmp/input0.$$ return #stop loop fi #panggil fungsi Take_input 5. Simpan dan jalankan $chmod +x tessinyal1 $./tessinyal1
6. Setelah mengisi beberapa data, tampilkan isi database dengan perintah cat $cat namadatabase 7. Jalankan lagi file tersebut $./tessinyal1 Cukup isi satu data saja, setelah itu tekan ctrl+c sebelum menjawab pertanyaan Tambah data (y/n) maka program akan terminated(berhenti), dan temporay file akan tertinggal di /tmp direktori. 8. Cek keberadaan temporary filename $ls /tmp/input* 9. Untuk menghindari hal di atas maka kita perlu mendeteksi sinyal dengan menggunakan trap command. Untuk itu tambahkan trap statement sebelum memanggil fungsi Take_input, yaitu del_file 2. Trap statementnya yaitu fungsi del_file, 2 berarti penekanan CTRL+C. Buka file script di atas dan modifikasi sehingga menjadi sebagai berikut : $vi tessinyal1 del_file() { echo" Penjebakan penekanan tombol [ctrl]+c" rm -f /tmp/input0.$$ exit 1 } Take_input() { recno=0 clear echo "Aplikasi Pengingat Appointment di Linux" echo -n "Masukkan nama file database : " read filename if [! -f $filename ];then echo "Maaf, $filename tidak ada, sekarang akan dibuat $filename database" echo "Aplikasi Pengingat Appointment database file" >
$filename fi echo "Pemasukan data pada tanggal: `date`" >/tmp/input0.$$ while : do echo -n "Judul Appointment :" read nama echo -n "Waktu :" read waktu echo -n "Catatan :" read catatan echo -n "Data Okay (y/n)?" read jawaban } done if [ $jawaban = y -o $jawaban = Y ]; then recno=`expr $recno + 1` echo "$recno. $nama $waktu $catatan" >> /tmp/input0.$$ fi echo "Tambah data lagi (y/n)?" read isnext if [ $isnext = n -o $isnext = N ];then cat /tmp/input0.$$ >> $filename rm -f /tmp/input0.$$ return #stop loop fi #memanggil fungsi trap del_file 2 Take_input 10. Jalankan script di atas $./tessinyal1 11. Coba tekan CTRL+C ketika pengisian data. Periksa temporary file $ls /tmp/input*