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
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
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 karakter-karakter 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.
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
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
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'
$ 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 :
• 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 :
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
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.
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 :
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 ]
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 :
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
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
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
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 :
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 operasi-operasi :
! tanda tidak sama -a operasi and -o operasi or Contoh :
• if test $# != "2"
then echo "membutuhkan 2 argumen" fi
• 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
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 variabel-variabel 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 :
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'
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
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" != ""
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