Bourne Again Shell - Sekolah Tinggi Teknik Surabaya

advertisement
i STTS
kolah
Bab 2
Bourne Again Shell
Teori
PENDAHULUAN
Ketika user login ke dalam Linux, mereka berkomunikasi dengan satu dari
beberapa interpreter. Setiap operasi terhadap interpreter ini disebut
shell, dan setiap shell mempunyai satu fungsi, yaitu membaca dan
melaksanakan perintah-perintah dari input standard.
Dengan shell maka perintah-perintah dapat :
• digabung untuk menghasilkan perintah-perintah baru
• mengirimkan parameter-parameter posisi
• ditambahkan dan dihapus oleh user
• diproses dalam suatu loop atau dalam conditional
• dapat dijalankan background tanpa menginterrupt sebuah proses
pada suatu terminal.
Lebih jauh lagi, perintah-perintah dapat diberikan input dari suatu source
dan dapat mengirimkan output ke file, printer, atau ke perintah yang lain.
COMMANDS
Cara yang paling umum di dalam menggunakan shell ialah dengan
memasukkan perintah-perintah sederhana melalui keyboard. Argumen
yang pertama (diberi nomer nol) akan berisi nama dari perintah yang
Praktikum Sistem Operasi
|
2
i STTS
akan dijalankan, dan argumen lain yang dibutuhkan akan dikirimkan ke
perintah tersebut.
Contoh :
• $ ls *.c
#menampilkan semua file dengan extention .c
• $ cat .profile
#untuk menampilkan isi dari file .profile
Jika sebuah perintah bersifat executable maka shell akan memprosesnya
langsung. Contoh di atas memperlihatkan perintah yang sifatnya
executable. Jika perintah dibuat sendiri oleh user dan belum executable
maka user memerlukan procedure shell untuk menjalankannya. Untuk
jelasnya ketikkan :
• $ vi coba1 #untuk masuk ke dalam editor vi
# Perintah menampilkan kalimat
echo 'Ini Program Linux Saya'
Lalu simpan dengan tombol Esc-x, maka sekarang user sudah mempunyai
perintah baru yaitu coba1, dan untuk mejalankannya diperlukan shell
procedure
$ sh coba1
maka coba1 akan dijalankan
BAGAIMANA CARA SHELL MENCARI PERINTAH
Shell secara normal akan mencari perintah yang user ketikkan di dalam
tiga lokasi yang berbeda pada filesystem. Mula-mula shell akan
memakai langsung nama perintah yang diketikkan. Jika gagal maka
directory /bin akan ditambahkan, dan jika tidak berhasil lagi maka /usr
akan ditambahkan, sehingga directory-nya adalah /usr/bin/perintah.
Mengenai masalah directory ini dapat diatur dengan mengubah path
pada variabel PATH Linux.
CARA MENAMPILKAN FILE
Kebanyakan argumen-argumen dari perintah-perintah ialah nama file.
Kadang-kadang nama file memiliki kemiripan. Agar dapat memproses
Praktikum Sistem Operasi
i STTS
kolah
nama file yang mirip maka Linux menyediakan bentuk-bentuk khusus yang
dapat dipakai. Adapun bentuk-bentuk khusus tersebut ialah :
• * Jika digunakan maka akan menampilkan semua nama file yang
diinginkan.
Contoh :
• $ ls *.c
• $ ls *temp*
• $ ls a*
• ? Jika digunakan maka akan menggantikan posisi dari satu karakter.
Contoh :
• $ ls coba?
semua nama file yang mengandung kata coba plus satu karakter
bebas akan ditampilkan.
• [ ] Jika digunakan maka akan menampilkan semua nama file sesuai
dengan karakter-karakter yang diberikan di dalam tanda [].
Contoh :
• $ ls coba [a-f]
semua nama file yang mempunyai kata coba plus karakter a
sampai f akan ditampilkan.
Perhatikan bahwa nama directory tidak boleh mengandung karakterkarakter di atas.
Beberapa karakter, seperti <, >, *, ?, [ ] memiliki arti tersendiri untuk shell.
Untuk memakainya biasanya diperlukan tanda-tanda baca, antara lain :
• Tanda petik tunggal (') atau tanda petik ganda (") untuk membuat
suatu kalimat.
Contoh :
• $ echo 'Saya Mahasiswi STTS'
Perhatikan perbedaanya dengan
$ echo "Saya Mahasiswi STTS"
• $ echostuff='echo $? $*; ls *| wc'
$ echo $echostuff
akan menghasilkan string echo $? $*; ls *| wc
• Tanda `..` memiliki fungsi untuk menjalankan perintah yang terdapat di
dalamnya.
Praktikum Sistem Operasi
|
2
i STTS
Contoh :
• $ ABC=`cat .profile`
$ echo $ABC
• Tanda $ pada contoh di atas ialah untuk menampilkan isi dari suatu
variabel.
Contoh :
• $ kata='STTS'
$ echo $kata
maka akan tercetak STTS.
• Tanda \ di depan sebuah karakter tunggal digunakan untuk mencetak
karakter tersebut.
Contoh :
• $ echo "\""
maka hasilnya "
Tanda \ juga digunakan untuk menjalankan suatu perintah di dalam
perintah.
Contoh :
• $ echo "Directory anda sekarang : \`pwd\`"
DERETAN PERINTAH DAN PERINTAH PIPA (PIPELINE)
Perintah Linux dapat dibuat secara berderet dengan memisahkan dengan
tanda:
• ; (titik koma)
Contoh :
• $ who ; ls -l ; date
• Pipeline sebagai filter (penyaring) untuk membatasi antara perintah
yang satu dengan yang lain. Pipeline diwakili dengan tanda |. Di
dalam deretan perintah yang mengandung pipeline maka tiap output
perintah (kecuali perintah terakhir) akan menjadi input bagi perintah
selanjutnya.
Contoh :
• $ banner STTS | write jim tty05
Dengan contoh di atas maka huruf STTS akan dikirim ke user jim.
Praktikum Sistem Operasi
i STTS
kolah
Untuk jelasnya ketikkan contoh di bawah ini :
• $ who | ls
• $ who | sort
akan menampilkan semua user yang sedang login dalam keadaan
urut.
MENGGANTI PERINTAH
Seperti diterangkan di atas bahwa semua perintah dapat diletakkan di
dalam tanda `..` sehingga output dari perintah dapat disimpan pada
suatu variabel. Hal ini berguna untuk memberikan nilai pada shell
variabel.
Contoh :
• $ today=`date`
maka today akan berisi tanggal dari system yang sedang berlaku saat
itu. Untuk melihat isi dari today maka gunakan perintah echo $today.
Kita dapat pula memberikan pipeline di dalam tanda `..`.
Contoh :
• $ users=`who | wc -l`
Semua perintah yang akan ditampilkan di layar dapat diletakkan di
dalam tanda `..`, dan di dalm tanda tersebut dapat dilakukan perintah
berulang (di dalam perintah terdapat perintah lagi).
Contoh :
• $ logmsg=`echo your login directory is \`pwd\``
maka pwd yang juga merupakan perintah akan dijalankan.
Variabel-variabel dapat diisi dengan menggunakan perintah read
dan line commands.
Contoh :
• $ read first init last
kita memasukkan input G. A. SNYDER
maka first=G., init=A., last=SNYDER
Dengan line command user dapat langsung mendefinisikan :
first=G. init=A. last=SNYDER
Praktikum Sistem Operasi
|
2
i STTS
PARAMETER PARAMETER POSISI
Ketika suatu procedure shell dijalankan maka shell akan membuat
parameter-parameter posisi. Di mana nama dari procedure shell
ditempatkan pada posisi 0 ($0), parameter yang pertama = $1, dan
seterusnya. Perintah shift dapat digunakan untuk mengakses parameter
dengan nomor posisi yang lebih besar dari sembilan.
Contoh :
• $ pr a b c
$ shift
maka $0=pr, $1=b, $2=c
VARIABEL VARIABEL YANG DIDEFINISIKAN USER
Shell juga mengenal variabel-variabel yang mengandung alphanumerik.
Untuk memberikan nilai pada variabel digunakan syntax :
nama=string
nama di sini mewakili nama dari variabel dan string ialah nilai yang akan
diberikan ke variabel. Perhatikan bahwa antara tanda = dan string tidak
ada spasi.
Lebih dari satu assignment dapat dilakukan dalam sebuah baris perintah.
Tapi perhatikan bahwa shell menjalankan assignment dari kanan ke kiri.
Contoh :
• $ a=$b b=abc
maka a akan berisi abc
Jika kita ingin memberikan spasi atau tab maka kita harus menggunakan
tanda '...' atau "...".
Contoh :
• $ a=$b b='sekolah tinggi teknik surabaya'
$ stars=*****
#jika ingin memberi spasi maka stars=' *****'
$ asteriks='$stars'
Praktikum Sistem Operasi
i STTS
kolah
$ asteriks="$stars"
Perhatikan perbedaan dalam variabel asteriks.
Untuk mengakses nilai dari suatu variabel dalam suatu deretan kata,
gunakan tanda { }.
Contoh :
• $ a='pem'
$ echo "${a}belian makanan"
#tercetak pembelian makanan
Perhatikan perbedaannya jika tanda { } tidak digunakan.
Variabel-variabel di bawah ini dibuat oleh shell. Beberapa dari mereka
diset oleh shell, tapi semua dapat diubah oleh user.
• HOME
Variabel yang berisi nama dari directory login user pada saat
pertama kali login ke dalam Linux. Directory ini akan menjadi directory
utama; perintah cd tanpa argumen akan mengembalikan user ke home
directory.
Contoh :
• $ echo $HOME
$ cd /usr/bin
$ cd
#kembali ke home
$ pwd
#melihat directory aktif
• PATH
Variabel yang berisi path yang digunakan shell di dalam mencari
perintah.
Contoh :
• $ PATH=/bin:/usr/bin:.
Tanda . di belakang merupakan current directory dan antara satu
directory dengan directory lain dibatasi tanda :
PATH secara normal selau di set di dalam file .profile
Praktikum Sistem Operasi
|
2
i STTS
• PS1
Variabel yang berisi karakter (kata) yang digunakan sebagai prompt
primer. Nilai standard dari PS1 ialah "$" untuk Bourne Shell, "#" untuk
root, dan "%" untuk C Shell.
Contoh :
• $ PS1=STTS
maka prompt primer akan berubah menjadi STTS
• PS2
Variabel yang berisi prompt sekunder. Nilai standard dari variabel ini
ialah ">".
Contoh :
• $ PS2=Second
maka prompt primer akan berubah menjadi Second.
• OLDPWD
Variabel yang berisi working directory sebelumnya.
• PWD
Variabel yang berisi working directory saat ini.
• SECONDS
Variabel yang berisi jumlah detik yang telah dilalui sejak session bash
yang sekarang dijalankan.
User harus menggunakan perintah export untuk semua variabel di atas.
Perintah export akan menyebabkan terjadinya nilai-nilai yang
dimodifikasi tersebut berlaku untuk semua perintah shell yang dibuat.
Contoh :
• $ export HOME PATH PS1 PS2
Praktikum Sistem Operasi
i STTS
kolah
VARIABEL VARIABEL SPECIAL TERDEFINISI
Beberapa variabel memiliki arti penting seperti di bawah ini dan hanya
diset oleh shell :
• $#
Variabel yang digunakan untuk menampung jumlah argumen yang
dikirimkan ke suatu perintah, tetapi tidak termasuk nama dari perintah
itu sendiri.
Contoh :
• $ sh pr a b c
$ echo $#
maka jumlah argumen yang ditampilkan ialah 3.
Salah satu penggunaan penting dari variabel ini ialah untuk memeriksa
apakah jumlah argumen yang ditulis sesuai dengan yang dibutuhkan
oleh perintah.
Contoh :
• if test $# -lt 2
then
echo 'Argumen yang dibutuhkan berjumlah 2 atau lebih'
• $?
Berisi exit status (exit code) dari perintah yang dilaksanakan terakhir.
Nilainya berupa desimal. Kebanyakan perintah Unix mengembalikan
nilai 0 untuk memberitahu bahwa proses sukses.
Contoh :
• $ mail root < notes
$ echo $?
maka akan ditampilkan nilai 0 jika file notes ada atau nilai 2 jika
file notes tidak ada.
• $$
Variabel yang berisi nomer proses dari perintah yang sedang diakses.
Karena nomer-nomer proses unik untuk semua proses maka variabel ini
Praktikum Sistem Operasi
|
3
i STTS
biasa digunakan membentuk nama yang unik untuk nama file
temporary.
Contoh :
• $ temp=/usr/tmp/$$
$ ls > $temp
$ rm -F $temp
#hapus jika sudak tak terpakai
• $!
Variabel yang berisi nomer proses dari perintah terakhir yang
dijalankan secara background. $! ini terdiri dari 1-5 digit.
Contoh :
• $ cc testfile.c& #program dijalankan secara background
$ echo $!
akan menampilkan nomer proses dari perintah di atas.
• $Variabel yang berisi nama dari flag-flag eksekusi yang aktif di dalam
perintah shell.
Contoh :
• $ cat .profile
$ echo $akan menghasilkan 'xv'.
FILE .profile
File .profile dibaca setiap saat user login ke Linux pada Bourne Again
Shell. File ini digunakan untuk menset variabel-variabel HOME, PATH, dll
yang terdapat di dalam file tersebut. File ini seperti file AUTOEXEC.BAT
di DOS.
Contoh :
• $ vi .profile
lalu tambahkan echo 'STTS <Sekolah Tinggi Teknik Surabaya>' maka
setiap kali user login, kalimat di atas akan dicetak.
Praktikum Sistem Operasi
i STTS
kolah
BOURNE AGAIN SHELL PROGRAMMING
Karena shell Unix merupakan interpreter, maka shell juga mempunyai tata
cara programming pula. Praktikum kali ini membahas cara programming
Bourne Again Shell.
Membuat procedure shell dapat dilakukan dengan membuat alur program
pada screen editor vi dengan menuruti tata cara Bourne Again Shell
programming.
Perintah (shell) dapat dijalankan dengan 2 cara :
1. Dengan memanggil procedure shell terlebih dahulu
Contoh :
$ sh coba
sh -v (untuk trace baris yang dijalankan)
sh -x (perintah yang sedang diproses)
2. Dengan membuat program tersebut bersifat executable
Sebelum dijalankan, directory tempat program tersebut darus
dimasukkan dahulu dalam path.
Contoh : isi file coba
#!/usr/bin/sh
# baris 1 menunjukkan program untuk menjalankan
# baris 2 dan 3 adalah baris komentar
echo „I love pinguin‟
echo “don‟t you ?”
<EOF>
• $ chmod u+x coba
$ coba
DAFTAR PERINTAH
• Perintah echo :
Bentuk penulisan perintah echo :
Praktikum Sistem Operasi
|
3
i STTS
echo [option] [args]
echo biasanya mengeluarkan output ke layar.
Contoh :
• $ echo "Program Linux Saya"
Jika option n diberikan maka akan menghilangkan ganti baris
(newline).
Contoh :
• $ echo -n 'Masukkan nama :'
• Perintah read :
Perintah read digunakan untuk meminta inputan
$ read nama
• Perintah if
Bentuk penggunaan dari perintah if ialah :
if [ekspresi1]
then perintah-perintah
elif [ekspresi2]
then perintah-perintah
else perintah-perintah
fi
Jika ekspresi yang dituliskan di samping if menghasilkan true, maka
perintah di samping then akan dilaksanakan. fi digunakan untuk
mengakhiri perintah if.
Contoh :
• if test -f "$1"
then ls $1
elif test -d "$1"
then (cd $1;ls -a)
else echo $1 bukan suatu file atau directory
fi
Perintah test dapat digantikan dengan [ ]. Jadi : if [ -f "$1" ]
Contoh :
• if [ $HOME ] ; then echo hello ; fi
if [ ! -f file ]
then touch file
#buat file
Praktikum Sistem Operasi
i STTS
kolah
fi
• Perintah case
Bentuk penggunaan dari case ialah :
case string1 in
kondisi1)
perintah-perintah;;
kondisi2)
perintah-perintah;;
*)
perintah-perintah;;
esac
Tanda ;; untuk mengakhiri perintah case setelah perintah-perintah di
dalam kondisi dilaksanakan. esac digunakan sebagai tanda akhir dari
blok case.
Contoh :
• case $LOGNAME in
root)
echo 'hello root, selamat datang';;
steve)
echo 'bagaimana liburanmu ?';;
jim)
echo 'tolong baca mailmu';;
esac
User dapat juga menggunakan wild-card.
Contoh :
• case $LOGNAME in
budi|jim)
echo 'jangan lupa makan nanti';;
*)
echo 'welcome to Linux';;
esac
• Perintah while dan until
Bentuk penulisan perintah :
Praktikum Sistem Operasi
|
3
i STTS
while (atau until) ekspresi
do
perintah-perintah
done
while digunakan untuk melakukan perulangan selama ekspresi bernilai
true, dan penggunaan dari until merupakan kebalikan dari while.
Contoh :
• #counter
val=1
while [ $val -lt 11 ]
do
echo "Bilangan : `echo $val` masih < 11"
val=`expr $val + 1`
done
• val=10
until [ $val -lt 1 ]
do
echo "Bilangan : `echo $val` masih > 0"
val=`expr $val - 1`
done
• Perintah for
Bentuk penulisan perintah for :
for variabel in list
do
perintah-perintah
done
Contoh :
• for val in 1 2 3 4 5
do
echo $val
done
• for file in * ; do echo $file ; done
• count=0
Praktikum Sistem Operasi
i STTS
kolah
for file in *
do
count=`expr $count + 1`
done
• for val in `ls`
do
echo $val
done
Kita dapat menghilangkan 'in list' untuk menerima parameter dari luar.
Contoh :
• #ulang
for word
do echo $word$word
done
Lalu berikan status execute untuk file ulang dengan chmod +x ulang
dan cobalah dengan ulang ma pa me ko
• Loop Control : break dan continue
Perintah break digunakan untuk menghentikan proses looping pada
for dan while, dan perintah continue digunakan untuk melanjutkan
looping dengan segera. Perintah-perintah ini hanya berfungsi selama
ditulis di dalam blok do dan done.
Contoh :
• while true #loop forever
do echo "Please enter data : "
read response
case $response in
"done") break;;
" ") continue;;
*) #process data here;;
esac
done
Perintah break dan continue dapat diikuti level n (break n atau continue
n). Ini berguna di dalam nested loop untuk mengatur loop mana yang
Praktikum Sistem Operasi
|
3
i STTS
akan di-break atau di-continue. Jika level tidak diberikan, maka loop
yang terakhir yang akan di-break atau di-continue.
• Akhir dari File dan Perintah exit
Ketika shell mencapai akhir dari file pada procedure shell, maka shell
akan mengeluarkan exit status. Tapi jika user ingin keluar dari
procedure shell tanpa harus mencapai end of file maka user dapat
menggunakan perintah exit n (n=levelnya).
Contoh :
• if true
then
exit 6
fi
Setelah menjalankan program di atas, perhatikanlah isi dari variabel
$?. Yang perlu diingat di sini ialah exit status untuk pelaksanaan
perintah yang berhasil dijalankan oleh shell selalu sama dengan 0.
• Mendefinisikan Function
Shell memiliki kemampuan untuk membuat function. Function sama
seperti procedure shell cuma function ini residen di memori sehingga
dapat diakses langsung oleh shell. Bentuk penulisan :
fname () {
perintah-perintah shell
}
Function didefinisikan sekali dan dapat dipanggil berulang kali.
Contoh :
• getyn () {
while echo "0* (y/n) ? c">&2
do read yn rest
case $yn in
[Yy]) return 0;;
[Nn]) return 1;;
*) echo "isi dengan y atau n">&2
esac
Praktikum Sistem Operasi
i STTS
kolah
done
}
cara menjalankan : getyn "Ingin melanjutkan lagi"
• show () {
echo $1
echo $2
exit
}
Cobalah dengan : show hello world
• Perintah test : evaluasi kondisi
Perintah test mengevaluasi ekspresi dari argumen yang diberikan. Jika
ekspresinya benar, maka test akan menghasilkan nol sebagi exit status.
Test memberikan exit status tidak sama dengan nol jika tidak ada
argumen yang diberikan. Bentuk penulisannya :
test ekspresi atau [ ekspresi ]
Di bawah ini ada beberapa pilihan yang dapat dipakai bersama
perintah test untuk membuat perintah conditional :
-r nama file digunakan untuk menguji apakah file tersebut dapat
dibaca oleh user.
Contoh :
• if test -r "$1"
then cat "$1"
fi
-w namafile digunakan untuk menguji apakah file tersebut dapat
ditulisi oleh user.
Contoh :
• if test -w "$1"
then who >> "$1"
fi
-x namafile digunakan untuk menguji apakah file tersebut dapat
dijalankan oleh user.
Contoh :
• if test -x "$1"
Praktikum Sistem Operasi
|
3
i STTS
then "$1"
fi
-s namafile digunakan untuk menguji apakah file tersebut berukuran
lebih besar dari 0.
Contoh :
• if test -s "$1"
then mail jim < "$1"
fi
-d namafile digunakan untuk menguji apakah argumen yang diberikan
merupakan sebuah directory atau bukan.
Contoh :
• if [ -d "$1" ]
then (cd "$1"; ls -a)
fi
-f namafile digunakan untuk menguji apakah file tersebut merupakan
file biasa.
Contoh :
• if [ -f "$1" ]
then cat "$1"
fi
-z str mengeluarkan nilai true jika panjang str sama dengan 0.
-n str mengeluarkan nilai true jika panjang str lebih besar 0.
dan pilihan-pilihan di atas dapat dikombinasikan dengan operasioperasi :
!
tanda tidak sama
-a operasi and
-o operasi or
Contoh :
• if test $# != "2"
then echo "membutuhkan 2 argumen"
fi
Praktikum Sistem Operasi
i STTS
kolah
• Perintah expr
Perintah expr digunakan untuk operasi aritmatik dan logika pada
bilangan integer. expr mengevaluasi ekspresi tunggal dan menulis
hasilnya ke layar.
Contoh :
• a=1
while test $a -lt 5
do
echo $a
a=`expr $a + 1`
done
Selain digunakan untuk melakukan proses aritmatik, perintah expr juga
dapat digunakan untuk :
 Mencari posisi suatu karakter
expr index <kalimat> <karakter>
 Menghitung panjang kalimat
expr length <kalimat>
 Melakukan proses substring
expr substr <kalimat> <posisi awal> <panjang>
• true dan false
Perintah true dan false memberikan nilai true dan false.
Perintah-perintah ini biasa digunakan untuk implementasi loop-loop
tak bersyarat.
Contoh :
• a=1
while true
do
echo $a
a=`expr $a + 1`
if test $a -gt 10
then exit
fi
Praktikum Sistem Operasi
|
4
i STTS
done
• Perintah . (titik)
Bentuk pemakaian :
. proc
Dengan perintah ini menyebabkan shell membaca perintah dari proc
tanpa membuat proses baru. Perubahan terhadap variabel di dalam
proc hanya berpengaruh setelah perintah dot (.).
Contoh :
• $ a=`echo ini uji coba perintah .`
$.a
Perintah ini biasa digunakan untuk menginisialisasi ulang variabelvariabel yang terdapat di dalam file .profile setelah user melakukan
perubahan.
Contoh :
• $ . .profile
• Perintah
PENGGANTIAN BERSYARAT (ISI VARIABEL)
Jika user menuliskan $var maka isi dari var tersebut yang akan
ditampilkan. Tapi kadang-kadang user ingin membuat suatu kondisi yang
dapat mengatur penggantian penggunaan isi dari variabel. Dengan
beberapa perintah di bawah ini maka penggantian berkondisi tersebut
dapat dilaksanakan. Adapun variabel-variabel tersebut ialah :
• ${variabel: - string}
Perintah ini berarti jika variabel ini berisi maka gunakanlah isi dari
variabel tersebut. Tapi jika variabel ini kosong maka gunakanlah
ekspresi yang diberikan. Ingat dalam perintah di atas isi dari variabel
tidak berubah.
Contoh :
• echo ${isi: - 'mahasiswa stts'}
Praktikum Sistem Operasi
i STTS
kolah
Lalu cobalah :
isi='stts'
echo ${isi: - 'mahasiswa'}
• ${variabel:=string}
Jika variabel berisi maka gunakan isi dari varabel, tapi jika variabel
kosong maka isilah variabel dengan ekspresi yang diberikan
(mengganti posisi string) dan gunakan untuk ekspresi.
Contoh :
• cd ${HOME:='/usr/gas'}
ini berarti jika HOME tidak kosong maka cd ke isi dari HOME tapi
jika kosong gunakan cd /usr/gas dan set HOME=/usr/gas
• ${variabel:? string}
Jika variabel berisi maka gunakan isi dari varabel, tapi jika variabel
kosong maka tampilkan pesan yang terdapat di sebelah ?. Jika string
tidak terisi maka yang akan tampil pesan: variabel : parameter null or
notset.
Contoh :
• cat ${coba:? 'tidak ada file coba'}
• $ {variabel:+ string}
Jika variabel berisi maka gunakan isi dari string sebagai ekspresi.
Kalau variabel kosong maka berikan tanda " ". Ingat isi dari variabel
tidak akan berubah.
Contoh :
• a='stts'
echo ${a:+ 'mahasiswa'} $a
Praktikum Sistem Operasi
|
4
i STTS
MENGIRIM ARGUMEN-ARGUMEN KE SHELL PROCEDURE
Jika user mengirimkan argumen-argumen ke shell maka jumlah argumen
tersebut akan ditampung di variabel $#, di mana untuk argumen yang
pertama akan diwakili $1.
Contoh :
# ripple command
while test $# != 0
do
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift
done
Perintah shift digunakan untuk menggeser argumen ke kiri, di mana nilai
dari $1 akan dikeluarkan, $2 menggantikan $1, $3 menggantikan $2,
dan seterusnya.
Perhatikan bahwa $0 tidak pernah digeser, sebab $0 mewakili nama
procedure. Ubah program di atas pada bagian echo $1 .. $9 dengan
echo $*.
Dua perintah echo di atas mempunyai perbedaan, yang pertama akan
mencetak paling banyak 9 parameter posisi, yang kedua akan mencetak
semua parameter posisi yang diberikan.
ENVIRONMENT PERINTAH
Semua variabel yang dikenal oleh sebuah perintah pada saat mula-mula
perintah dijalankan mempunyai environment tersendiri.
Keyword parameter ialah variabel-variabel yang diletakkan di depan
nama dari suatu procedure shell.
Contoh :
# keycommand
echo $a $b
Jika user ingin menjalankan perintah keycommand, misalnya :
a=key1 b=key2 keycommand
Praktikum Sistem Operasi
i STTS
kolah
maka akan ditampilkan key1 key2
Keyword parameter tidak dihitung sebagai argumen-argumen terhadap
suatu procedure dan tidak berpengaruh pada variabel $#. Untuk melihat
isi dari environment gunakan : printenv atau env
CONTOH PROGRAM SHELL:
• MAILALL
# mailall
letter=$1
shift
for i in $*
do mail $i < $letter
done
Program di atas dapat dijalankan dengan :
$ sh mailall letter joe bob
atau dengan memberikan status execute pada file dengan chmod u+x
mailall. Lalu jalankan dengan :
$ mailall letter joe bob
Jika mailall diletakkan di dalam directory yang ditunjuk oleh variabel
PATH yang terdapat pada .profile maka mailall akan dapat
dijalankan dari directory lain.
• COPYPAIRS
# penggunaan copypairs file1 file2 ...
# copy file1 ke file2, file3 ke file4
while test "$2" != ""
do
cp $1 $2
shift; shift
done
if test "$1" != ""
Praktikum Sistem Operasi
|
4
i STTS
then echo "$0: argumen ganjil" > &2
fi
• COPYTO
# pengunaan copyto dir file ...
# copy file ke directory
if test $# -lt 2
then echo "$0: membutuhkan dua argumen"
elif test ! -d $1
then echo "$0: "$1 bukan sebuah directory"
else dir=$1; shift
for eachfile
do cp $eachfile $dir
done
fi
• WRITEMAIL
# penggunaan : write mail message user
# jika user log in
# tulis pesan ke terminal
# jika tidak maka tulis ke mail
echo "$1" | { write "$2" || mail "$2" ; }
• NULL
# penggunaan : null files
# membuat file kosong untuk setiap nama file
for eachfile
do
> $eachfile
done
Praktikum Sistem Operasi
Download