LAPORAN RESMI
PRAKTIKUM SISTEM OPERASI
MODUL IV
“ VARIABEL LINGKUNGAN
&
PROGRAM EKSTERNAL ”
Disusun Oleh :
LABORATORIUM TIA
JURUSAN TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS TRUNOJOYO MADURA
2012
BAB I
PENDAHULUAN
1.1
Latar Belakang
Pada skrip shell, ada beberapa variabel yang perlu untuk
kita ketahui, seperti Variabel Lingkungan. Variabel ini mungkin akan kita
butuhkan. Dan pada shell, kita juga mengenal program ekternal, maksudnya adalah
banyak perintah pada linux yang masih bukan bawaan dari shell (bash). Dan hal
ini mungkin juga akan sangat kita butuhkan kelak.
Oleh sebab itu,
pada modul IV ini, kita akan membahas tentang Variabel Lingkungan dan juga Program
Eksternal, yang nantinya akan membuat kita semua mengerti dan memahami apa itu
variabel lingkungan dan apa itu program eksternal.
1.2
Tujuan
Tujuan mahasiswa mengikuti
praktikum ini adalah :
1. Mahasiswa dapat mengetahui apa itu Variable Lingkungan dan Program
Eksternal
2. Mahasiwa dapat menggunakan atau mengimplementasikan Variabel
Lingkungan dan Program Eksternal
BAB II
DASAR TEORI
2.1. Variabel
Lingkungan
Ada beberapa
himpunan variabel yang telah disiapkan oleh shell Linux dan sebagian besar
tidak dapat diberikan suatu nilai tertentu. Variabel-variabel ini biasanya
menyimpan informasi penting yang bermanfaat mengenai lingkungan dimana ia
berjalan.
Himpunan variabel
pertama adalah $0 .. $9 dan $#. Variabel $0 adalah basename (nama dasar) dari program saat dipanggil. Variabel $1 - $9
adalah 9 parameter tambahan yang disertakan saat pemanggilan skrip.
Variabel $@ adalah
semua parameter $1 .. whatever. Variabel $*, serupa dengan $@, tetapi tidak
mempertahankan whitespace dan tanda
petik sehingga “File with spaces” menjadi “File” “with” “spaces”. Ini
menyerupai echo. Sebagai aturan umum, gunakan $@ dan hindari $*. $# adalah
jumlah dari parameter yang disertakan saat pemanggilan skrip.
Perhatikan skrip
contoh berikut :
#!/bin/sh
#
Nama file skrip: var3.sh
echo
“Saya telah dipanggil dengan $# parameter”
echo
“Nama saya adalah $0”
echo
“Parameter pertama saya adalah $1”
echo
“Parameter kedua saya adalah $2”
echo
“Semua parameter adalah $@”
Perhatikan luaran
yang diberikan saat program dijalankan :
$
/home/stave/var3.sh
Saya
telah dipanggil dengan 0 parameter
Nama
saya adalah /home/stave/var3.sh
Parameter
pertama saya adalah
Parameter
kedua saya adalah
Semua
parameter adalah
$
./var3.sh hello world earth
Saya
telah dipanggil dengan 3 parameter
Nama
saya adalah ./var3.sh
Parameter
pertama saya adalah hello
Paramerer
kedua saya adalah world
Semua
parameter adalah hello world earth
Nilai $0 berubah
tergantung pada bagaimana skrip dipanggil. Utilitas eksternal basename dapat
membatu menjelaskan :
echo
“Nama saya adalah `basename $0`”
$# dan $1 .. $2
nilainya adalah diset otomatis oleh shell. Kita dapat menyertakan lebih dari 9
parameter dengan menggunakan perintah shift. Perhatikan skrip berikut :
#!/bin/sh
#
Nama file skrip: var4.sh
while
[ “$#” –gt “0” ]
do
echo ‘\$1 is $1”
shift
done
Skrip ini berjalan
menggunakan shift sampai $# turun
menjadi nol, sampai daftar menjadi kosong.
Variabel khusus
lain adalah $?. Ini mengandung nalai keluar (exit) dari perintah yang terakhir berjalan. Sehingga kode :
#!/bin/sh
/usr/local/bin/my-command
if [
“$?” –ne “0” ]; then
echo “Afwan, ada masalah!”
fi
akan mencoba untuk
menjalankan /usr/local/bin/my-command yang akan keluar dengan nilai nol jika semua
berjalan baik atau tidak nol jika terjadi kegagalan. Kita dapat menangani ini dengan
memeriksa nilai $? Setelah memanggil perintah tersebut. Ini akan menjadikan
skrip robust (berkualitas) dan lebih
cerdas. Aplikasi yang bagus akan mengembalikan nol jika berhasil.
Dua himpunan variabel
utama lain yang disediakan oleh lingkungan shell Linux adalah $$ dan $!.
Keduanya digunakan untuk memproses bilangan.
Variabel $$ adalah
PID (Process Identifier) dari shell
yang sedang berjalan. Ini dapat berguna untuk pembuatan file sementara (temporer), seperti /tmp/my-script. $$
yang berguna jika dibutuhkan banyak instance dari skrip berjalan pada waktu
yang sama dan semuanya memerlukan file temporer tersendiri. Variabel $! Adalah
PID dari proses background yang
terakhir dijalankan. Ini berguna untuk memelihara track dari proses saat proses tersebut kembali mendapatkan jatah
eksekusi.
Variabel lain yang
cukup menarik adalah IFS. Singkatan
dari Internal Field Separator. Nilai
defaultnya adalah SPACE TAB NEWLINE,
tetapi jika anda mengubahnya, lebih mudah mengambil salinannya. Contoh sebagai
berikut :
#!/bin/bash
#
Nama file skrip: var5.sh
old_IFS=”$IFS”
IFS=:
echo
“Masukkan 3 data yang dipisahkan titik dua …”
read
x y z
IFS=$old_IFS
echo
“x adalah $x y adalah $y z adalah $z”
Skrip diatas
berjalan seperti dibawah ini:
$
./var5.sh
Masukkan
3 data yang dipisahkan titik dua …
Hello:how
are you:today
X is
hello y is how are you z is today
Perlu disadari
bahwa IFS terutama dapat mengandung spasi, baris bari atau karakter “uncontrollable”. Alangkah baiknya jika
anda menggunakan double-quote di awal
dan akhirnya, yaitu old_IFS=”$IFS”,
bukan old_IFS=$IFS.
Sebagaimana telah
disebutkan, kurung kurawal yang mengelilingi variabel akan menghindari
kebingungan:
foo=sun
echo
$fooshine # $fooshine tidak
didefinisikan
echo
$(foo)shine # menampilkan kata “sunshine”
2.2.
Nilai Default
Potongan kode berikut menampilkan
prompt, meminta input dari pengguna. Jika pengguna tidak memasukkan teks
apapun, hanya menekan Enter, skrip memberikan nilai default, yaitu nilai luaran
suatu perintah ‘whoami’ :
#!/bin/sh
# Nama file skrip: name.sh
echo -en
"Siapa anda? [ `whoami` ] "
read myname
if [ -z
"$myname" ]; then
myname=`whoami`
fi
echo
"Anda adalah $myname"
Tambahan "-en" pada
perintah echo memberitahukan echo untuk tidak menambahkan suatu linebreak.
Pada beberapa sistem, anda dapat menggunakan "\c" pada ujung baris. Eksekusi dari skrip ini
adalah
steve$
./name.sh
Siapa anda? [
steve ]
Anda adalah
steve
... atau dengan suatu masukan
pengguna:
steve$
./name.sh
Siapa anda? [
steve ] foo
Anda adalah
foo
Adakah fitur yang lebih menarik? Ada,
gunakan kurung siku dan dan karakter khusus “.-“. Anda dapat menentukan suatu
nilai default jika variabel tidak diset (unset):
echo -en
"Siapa anda? [ `whoami` ] "
read myname
echo
"Anda adalah ${myname:-`whoami`}"
Anda
juga dapat memberikan nilai tetap (bukan output dari suatu perintah eksternal)
jika variabel tidak diset:
echo "
Anda adalah ${myname:-John Doe}"
Ingat kembali
penggunaan backtick, `whoami` berjalan dalam suatu sub-shell, sehingga suatu
perintah cd atau perubahan terhadap variabel lain, di dalam backtick, tidak
akan mempengaruhi shell yang sedang berjalan.
Mengubah Nilai Default
Ada sintaks berbentuk " := "
yang dapat digunakan untuk mengubah nilai variabel ke suatu default jika tidak
didefinisikan:
echo
"Anda adalah ${myname:=John Doe}"
Teknik ini berarti bahwa akses
berikutnya ke variabel $myname akan
mendapatkan suatu nilai, nilai yang dimasukkan pengguna atau "John
Doe" jika tidak.
2.3.
Program Eksternal
Program eksternal sering digunakan
di dalam skrip shell. Ada beberapa perintah builtin ( echo, which dan test yang sudah umum). Ada banyak perintah lain yang berguna
merupakan perintah Linux, bukan bawaan shell (Bash) seperti tr, grep, expr dan cut.
Tanda backtick (`) sering
diasosiasikan dengan perintah eksternal. Backtick menunjukkan bahwa teks
yang diapitnya akan dieksekusi sebagai suatu perintah. Mudah dipahami. Pertama,
gunakan shell interaktif untuk membaca nama panjang anda (full name)
yang terdapat di dalam file /etc/passwd :
$ grep
"^${USER}:" /etc/passwd | cut -d: -f5
Steve Parker
Sekarang masukkan output ini ke
dalam variabel agar dapat lebih mudah dimanipulasi:
$
MYNAME=`grep "^${USER}:" /etc/passwd | cut -d: -f5`
$ echo
$MYNAME
Steve Parker
Terlihat jelas bahwa backtick
menangkap output standard dari suatu perintah atau himpunan perintah yang
dijalankan Ini juga dapat meningkatkan kinerja jika anda ingin menjalankan
banyak perintah dan memparsing bit-bit outputnya:
#!/bin/sh
find / -name
"*.html" -print | grep "/index.html$"
find / -name
"*.html" -print | grep "/contents.html$"
Kode di atas membutuhkan waktu lama
dalam menyelesaikan eksekusinya. Solusi yang lebih baik adalah
#!/bin/sh
HTML_FILES=`find
/ -name "*.html" -print`
echo
"$HTML_FILES" | grep "/index.html$"
echo
"$HTML_FILES" | grep "/contents.html$"
Tanda petik ganda yang mengapit $HTML_FILES sangat penting untuk menyediakan baris baru
antar setiap file yang didaftarkan. Jika tidak, grep akan melihat baris teks
yang sangat panjang, bukan satu baris per file.
Cara ini hanya menjalankan perintah
find 1 kali sehingga waktu eksekusi skrip menjadi setengah dari sebelumnya.
2.4.
Tulis dan Jalankan!
Apa yang dihasilkan oleh skrip
pendek dibawah ini?
#!/bin/sh
# Nama file
skrip: testgrep.sh
steves=`grep
-i steve /etc/passwd | cut -d: -f1`
echo
"All users with the word \"steve\" in their passwd"
echo
"Entries are: $steves"
Skrip ini akan berjalan baik jika
hanya ada satu baris yang cocok. Namun, jika ada dua baris dalam /etc/passwd mengandung kata "steve" maka shell
interaktif akan menampilkan:
$> grep -i
steve /etc/passwd
steve:x:5062:509:Steve
Parker:/home/steve:/bin/bash
fred:x:5068:512:Fred
Stevens:/home/fred:/bin/bash
$> grep -i
steve /etc/passwd |cut -d: -f1
steve
fred
Tetapi skrip testgrep.sh akan
menampilkan:
Entries are:
steve fred
Dengan menempatkan hasil ke dalam
suatu variabel kita telah mengubah NEWLINE menjadi spasi; manpage dari sh
memberitahukan bahwa karakter pertama dalam $IFS akan digunakan untuk tujuan ini. Secara default
IFS adalah <space><tab><cr>.
Apa yang dihasilkan oleh skrip
berikut:
#!/bin/sh
steves=`grep
-i steve /etc/passwd | cut -d: -f1`
echo
"All users with the word \"steve\" in their passwd"
echo
"Entries are: "
echo
"$steves" | tr ' ' '\012'
Perlu diingat bahwa tr menerjemahkan spasi ke dalam karakter octal 012
(NEWLINE). Perintah tr dapat melibatkan
range (rentang), mengkonversi teks ke huruf besar atau kecil, misalnya:
#!/bin/sh
# Nama file
skrip: changecase.sh
steves=`grep
-i steve /etc/passwd | cut -d: -f1`
echo
"All users with the word \"steve\" in their passwd"
echo
"Entries are: "
echo
"$steves" | tr ' ' '\012' | tr '[a-z]' '[A-Z]'
Di sini ditambahkan suatu translasi
dari [a-z] ke [A-Z]. Terdapat jumlah nilai yang sama dalam range a-z dan A-Z.
Kemudian dilakukan translasi suatu karakter dalam range ASCII a-z menjadi A-Z
... dengan kata lain mengubah huruf kecil ke pasangan huruf besarnya. Perintah
tr sebenarnya lebih cerdas:
tr [:lower:]
[:upper:]
memberikan hasil sama dan lebih
mudah dibaca.
BAB IV
TUGAS TAMBAHAN
1.
Buat program untuk
menampilkan daftar ps aux dengan nama user, dari masing-masing komputer!
2.
Buatlah perintah login
untuk masuk kedalam file!
JAWAB :
1.
Contoh program
menampilkan daftar ps aux dengan nama user dari masing-masing komputer. Source
code :
|
2.
Contoh program perintah
login kedalam file. Source code :
|
BAB V
PENUTUP
5.1
Kesimpulan
Ada beberapa himpunan variabel yang telah disiapkan
oleh shell Linux dan sebagian besar tidak dapat diberikan suatu nilai tertentu.
Variabel-variabel ini biasanya menyimpan informasi penting yang bermanfaat
mengenai lingkungan dimana ia berjalan.
5.2
Saran
- Selama praktikum berlangsung tolong asisten mendampingi dan mengawasi praktikan supaya tidak ada yang ketinggalan
- Pada waktu menejelaskan dimohon untuk pelan-pelan dan terperinci supaya praktikan bias mengerti semua
- Selalu motifator praktikan selama praktikum
Tidak ada komentar:
Posting Komentar