Praktikum 10 Perintah Set A. T U J U A N 1. Menggunakan perintah set untuk menampilkan isi suatu variabel. 2. Menggunakan perintah set untuk mengambil nilai parameter posisi pada shell. 3. Menggunakan perintah set dan option flag untuk membantu proses debug dan menampilkan hasil eksekusi pada shell script. B. DASAR TEORI Statement Set Perintah set digunakan untuk beberapa tujuan, diantaranya adalah digunakan untuk menampilkan isi dari suatu variabel. Ketika sebuah argumen telah disiapkan dengan perintah set, maka pekerjaan yang akan dilaksanakan adalah: Mengontrol setting internal option shell. Me-load (mengambil) nilai parameter posisi pada shell. Contoh perintah set : $ set v $ - Perintah diatas menyebabkan shell mengaktifkan mode verbose. Pada mode ini (verbose) shell akan mencetak/menampilkan semua baris masukkan yang telah dibaca. Hal ini sangat dibutuhkan oleh shell untuk mendebug script shell. Sintak perintah set pada shell script dan perintah untuk men-debug shell script adalah sebagai berikut: 87
Syntak debug : atau sh option { shell-script-name } bash option { shell-script-name } Syntak shell script : (set `command`). Sedangkan mode verbose ini dapat dimatikan/disable dengan perintah berikut: $ set +v set +v $ - Perlu diketahui, bagaimana perintah mematikan mode verbose untuk menampilkan ke layar sebelum proses eksekusi dan pengaruhnya ketika dalam mode verbose. Selain menggunakan flag dengan opsi x, dapat pula dengan menggunakan perintah shell untuk menampilkan hasil eksekusi. Penggunaan flag dengan opsi x dapat membantu untuk proses debug pada shell script. Argumen flag dapat dipakai untuk mengontrol perintah set dengan memberikan supplay argumen command line ketika melakukan invoking pada shell untuk mengeksekusi beberapa perintah didalam sebuah file. Perhatikan contoh berikut: $ cat lsdir if [ $# = 0 ] then dir=. else Dir=$1 fi find $dir type d print $ sh x lsdir + [ 0 = 0 ] dir=. + find. type d print../bin./bin/obin./tbin./xsrc $ - 88
Pada contoh diatas diperlihatkan perintah shell melakukan eksekusi perintah didalam "lsdir" dengan set flag x. Pengaruh yang ditimbulkan oleh perintah set x dalam perintah "lsdir" yaitu pada awal baris dengan sebuah tanda (+) merupakan hasil dari supplay flag x. Perintah set menerima pernyataan opsi dari flag, dan akan set ketika didahului oleh tanda (-) ; akan unset ketika didahului tanda plus (+). Beberapa opsi flag adalah sebagai berikut: Option Description -n. Reads all commands, but does not execute them -v Displays all lines as they are read. -x Displays all commands and their arguments as they execute. This option is often referred to as the shell tracing option. -t Makes the shell exit after executing one command -u Makes it an error to reference an unset variable -e Is used in shell script to cause an immediate exit if a command fails -k Cause all keyword arguments to be placed into the environment of the given command - Tell the shell to disable the v and x debugging flags -- Is an option no-op. Sewaktu opsi argument disertakan pada set, set akan mengambil isi argument dan memberikannya pada parameter posisi $1, $2,.. dan seterusnya. Jika featur (args) dipakai pada set didalam sebuah shell script, maka nilai asal pada parameter posisi akan hilang. Sebaliknya, set dapat digunakan untuk mengganti flag tanpa berpengaruh pada parameter posisi. Ide untuk menjaga keadaan set menggunakan tiga cara: Otomatisasi opsi dan argument ketika shell memintanya. Dengan menggantikan opsi yang diperlukan shell. Memberikan multiword line dan tempat word ke dalam parameter posisi. Beberapa shell script memiliki fasilitas debugging untuk mengaktifkan opsi command line. Opsi-opsi command line u, -v, dan x merupakan opsi control yang sama pada shell. C. PROSEDUR 1. Masuk ke sistem operasi Linux. 89
2. Login sebagai std3xxyyy. 3. Gunakan perintah set pada pemrograman shell. 4. Catatlah hasil dari setiap program pada prosedur no.3 sebagai laporan sementara. D. PERCOBAAN 1. Menampilkan seluruh perintah dan hasil eksekusi $ set $ set v $ set +v $ cat > lsdir if [ $# = 0 ] then dir=. else Dir=$1 fi find $dir type d print ^d $ sh x lsdir 2. Menggunakan perintah set dengan opsi flag (-u, -v, dan x) $ cat > opt while test $# -gt 0 do case $1 in -u) set u shift ;; -v) set v shift ;; -x) set x shift ;; esac Ini adalah body shell script. ^d $ chmod u+x opt $./opt 90
$ sh x opt $./opt u $./opt -v $./opt -x 3. Menggunakan perintah set dengan beberapa opsi flag $ cat > opts while test $# -gt 0 do case $1 in -U -V -X) set ` $1 tr UVR uvx` shift ;; esac Ini adalah body shell script. $ chmod u+x opts $./opts $./opts u atau -U $./opts v atau -V $./opts x atau -X 4. Menggunakan perintah set dengan opsi flag (--) untuk mengambil argumen dan memberikannya pada parameter posisi $ date $ set -- `date` $ $1 $2 $3 $ year=$6 $ $year $ ls l /etc/motd $ set -- `ls l /etc/motd` $ $9 : $5 $1 $ ls l /etc/motd $ set `ls l /etc/motd` $ $9 : $5 $1 $ set X `ls l /etc/motd` $ $9 : $5 $1 $ shift $ $9 : $5 $1 5. Menggunakan perintah set dengan opsi flag (-k) untuk reverse posisi $ cat > myname My name is $name and my argument is $1 ^d $ chmod u+x myname $ cat myname $ $- ;sebelum set -k $ name=george./myname john 91
$./myname name=george john $ set k $ $- ;sesudah set -k $ name=george./myname john $./myname name=george john 6. Penggunaan perintah set dengan parameter posisi ($1, $2,...) $ vi set1.sh "Parameter posisi sebelum set \`uname -a\` :" "Command-line argument #1 = $1" "Command-line argument #2 = $2" "Command-line argument #3 = $3" set `uname -a` $_ "Parameter posisi sesudah set \`uname -a\` :" "Field #1 of 'uname -a' = $1" "Field #2 of 'uname -a' = $2" "Field #3 of 'uname -a' = $3" --- $_ $ chmod u+x set1.sh $./set1.sh $./set1.sh 1 2 3 atau $./set1.sh apel jeruk mangga 7. Mengganti letak (pembalikkan posisi) dari parameter posisi $ vi set2.sh set a\ b c d\ e; OIFS=$IFS; IFS=:; until [ $# -eq 0 ] do "### k0 = "$k"" k=$1:$k; "### k = "$k"" shift; set $k - $# - for i #internal field separator # Before # After 92
do $i IFS=$OIFS $ chmod u+x set2.sh $./set2.sh 8. Menggunakan perintah set dengan opsi flag (--) untuk mengambil isi variabel $ vi set3.sh variable="one two three four five" set -- $variable first_param=$1 second_param=$2 shift; shift remaining_params="$*" "first parameter = $first_param" "second parameter = $second_param" "remaining parameters = $remaining_params" ; set -- $variable first_param=$1 second_param=$2 "first parameter = $first_param" "second parameter = $second_param" set -- first_param=$1 second_param=$2 "first parameter = $first_param" "second parameter = $second_param $ chmod u+x set3.sh $./set3.sh 9. Penggunaan perintah unset untuk menghapus isi variabel $ vi set4.sh variable=hello "variable = $variable" unset variable "(unset) variable = $variable" 93
if [ -z "$variable" ] then "\$variable has zero length." fi $ chmod u+x set4.sh $./set4.sh 10. Menggunakan perintah set dan perulangan (loop) dengan dua parameter $ vi set5.sh for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483" do set -- $planet "$1 $ chmod u+x set5.sh $./set5.sh $2,000,000 miles from the sun" 11. Menggunakan perintah set dan pengkondisian (if) $ vi set6.sh #!/bin/sh set -x if [ -z "$1" ] ; then "ERROR: Insufficient Args." exit 1 fi $ chmod u+x set6.sh $./set6.sh ; $./set6.sh 1 ; $./set6.sh saya 12. Menggunakan perintah set untuk enable (-) dan disable (+) $ set -x ; ls *.sh ; set +x $ /bin/sh./set5.sh E. Latihan 1. Bila diketahui data yang disertakan saat script dijalankan adalah "Latihan shell script dengan set". Buatlah program shell untuk membalik posisi data tersebut. 2. Buatlah program shell menggunakan perintah set untuk mencopy file *.sh yang telah anda buat sebelumnya ke direktori lain. 94
3. Buatlah program shell yang digunakan untuk mengecek dan men-set parameter dengan ketentuan sebagai berikut: - Jika jumlah parameternya lebih dari dua atau tanpa parameter, maka akan muncul pesan kesalahan dan program berhenti. - Jika jumlah parameternya 2, parameter pertama disimpan pada variabel from dan parameter kedua disimpan pada variabel to. - Jika jumlah parameternya cuma 1, parameter akan disimpan dalam variabel from 4. Buatlah program shell menggunakan perintah set untuk membaca satu baris dari standard input (datanya berupa perintah linux misal; ls, dir, who, dan lainnya) dan baris itu disimpan dalam variabel $< (rediirection) kemudian ditampilkan dengan perintah eval. 95