Shell, dalam komputer adalah salah satu jenis program bawaan sistem operasi (seringnya merupakan program yang terpisah dari inti sistem operasi) yang menyediakan komunikasi langsung antara pengguna dan sistem operasi. Contoh dari shell adalah COMMAND.COM dalam MS-DOS, Macintosh Finder (Macintosh), Windows Explorer, Command Prompt/cmd.exe, PowerShell dalam Microsoft Windows, Bourne shell, C shell, Korn shell dan masih banyak lainnya khususnya dalam keluarga sistem operasi UNIX. Beberapa shell juga dapat digunakan untuk melakukan manajemen berkas.
Diskusi ini berlaku untuk script yang ditulis untuk shell-C (csh) shell. Bourne (sh) script yang sama, meskipun sintaks yang sebenarnya berbeda.
Sebuah shell script adalah file yang berisi sekumpulan perintah untuk dieksekusi (dijalankan) oleh shell dalam urutan seperti membaca file.
Dalam bentuknya yang paling sederhana, sebuah shell script hanya merupakan cara untuk menyimpan satu set perintah yang sering dilaksanakan, seperti perintah inisialisasi untuk sesi login Anda yang disimpan dalam file script login., Sehingga Anda tidak perlu kembali -type mengatur setiap kali Anda ingin menjalankannya. Sebaliknya, Anda cukup menjalankan script yang berisi semua perintah.
Tepatnya, segala sesuatu yang Anda dapat dimasukkan ke dalam sebuah shell script juga dapat dilaksanakan secara interaktif dengan mengetik pada baris perintah, walaupun pengulangan konstruksi bisa rumit. Ini memberikan Anda kesempatan untuk menguji sintaks dari berbagai shell konstruksi.
Shell menyediakan alat untuk membuat skrip shell lebih kuat, bahkan yang matang program-program penuh. Shell pemrograman diatur di sekitar konsep "substitusi" dan "aliran-of-control".
· Pergantian digunakan untuk memanipulasi nilai dalam script. Ini melibatkan penggunaan nilai-nilai variabel sebagai bagian dari perintah, dan mengambil output dari perintah menjadi nilai baru dari variabel.
· Flow-of-control mengacu pada pemrograman umum konstruksi seperti loop dan-kemudian-lain laporan jika yang digunakan untuk mengontrol yang laporan dalam script akan dieksekusi di mana urutan, sering tergantung pada nilai dari variabel, atau menyebabkan eksekusi berulang dari serangkaian perintah dengan variabel yang berbeda atau nilai-nilai input.
Macam - macam shell
Tidak seperti sistem operasi lain yang hanya menyediakan satu atau 2 shell, sistem operasi dari keluarga unix misalnya linux sampai saat ini dilengkapi oleh banyak shell dengan kumpulan perintah yang sangat banyak, sehingga memungkinkan pemakai memilih shell mana yang paling baik untuk membantu menyelesaikan pekerjaannya, atau dapat pula berpindah-pindah dari shell yang satu ke shell yang lain dengan mudah, beberapa shell yang ada di linux antara lain:
· Bourne shell(sh),
· C shell(csh),
· Korn shell(ksh),
· Bourne again shell(bash),
· dsb.
Masing - masing shell mempunyai kelebihan dan kekurangan yang mungkin lebih didasarkan pada kebutuhan pemakai yang makin hari makin meningkat, untuk dokumentasi ini shell yang digunakan adalah bash shell dari GNU, yang merupakan pengembangan dari Bourne shell dan mengambil beberapa feature (keistimewaan) dari C shell serta Korn shell, Bash shell merupakan shell yang cukup banyak digunakan pemakai linux karena kemudahan serta banyaknya fasilitas perintah yang disediakan.versi bash shell yang saya gunakan adalah 2.04
[fajar@linux$]echo $BASH_VERSION
bash 2.04.12(1)-release
Mungkin saat anda membaca dokumentasi ini versi terbaru dari bash sudah dirilis dengan penambahan feature yang lain.
Pemrograman Shell
Yaitu menyusun atau mengelompokkan beberapa perintah shell (internal atupun eksternal command) menjadi kumpulan perintah yang melakukan tugas tertentu sesuai tujuan penyusunnya. Kelebihan shell di linux dibanding sistem operasi lain adalah bahwa shell di linux memungkinkan kita untuk menyusun serangkaian perintah seperti halnya bahasa pemrograman (interpreter language), melakukan proses I/O, menyeleksi kondisi, looping, membuat fungsi, dsb. adalah proses - proses yang umumnya dilakukan oleh suatu bahasa pemrograman, jadi dengan shell di linux kita dapat membuat program seperti halnya bahasa pemrograman, untuk pemrograman shell pemakai unix atau linux menyebutnya sebagai script shell.
Sebelum mempelajari pemrograman Bash shell di linux sebaiknya anda telah mengetahui dan menggunakan perintah - perintah dasar shell baik itu internal command yang telah disediakan shell maupun eksternal command atau utility, seperti
· cd, pwd, times, alias, umask, exit, logout, fg, bg, ls, mkdir, rmdir, mv, cp, rm, clear, ...
· utilitas seperti cat, cut, paste, chmod, lpr,...
· redirection (cara mengirim output ke file atau menerima input dari file), menggunakan operator redirect >, >>, <, <<, contohnya:
ls > data hasil ls dikirim ke file data, jika file belum ada akan dibuat tetapi jika sudah ada isinya akan ditimpa.
ls >> data hampir sama, bedanya jika file sudah ada maka isinya akan ditambah di akhir file.
cat < data file data dijadikan input oleh perintah cat
· pipa (output suatu perintah menjadi input perintah lain), operatornya : | , contoh:
ls -l | sort –souput perintah ls -l (long) menjadi input perintah sort -s (urutkan secara descending), mending pake ls -l -r saja :-) ls -l | sort -s | more cat <data | sort > databaru
· Wildcard dengan karakter *, ?, [ ], contohnya:
ls i* tampilkan semua file yang dimulai dengan i
ls i?i tampilkan file yang dimulai dengan i, kemudian sembarang karakter tunggal, dan diakhiri dengan i
Dasar jenis pernyataan dalam sebuah shell script
1. Komentar
The "pound" atau "hash" tanda (#) sinyal awal komentar. Ini tanda dan segala sesuatu yang mengikutinya hingga akhir baris dianggap sebagai komentar untuk penulis dan tidak dieksekusi.
The "pound" atau "hash" tanda (#) sinyal awal komentar. Ini tanda dan segala sesuatu yang mengikutinya hingga akhir baris dianggap sebagai komentar untuk penulis dan tidak dieksekusi.
2. Perintah yang dijalankan dalam proses baru Jika sebuah baris di script tidak dimulai dengan salah satu kata kunci cadangan yang digunakan untuk operasi variabel atau aliran-kontrol, diasumsikan menjadi perintah yang Anda ingin mengeksekusi sebagai proses anak baru. Seluruh baris dipindai, mencari variabel yang perlu diganti dan wildcard ("*", karakter "?", Dll) yang perlu dicocokkan dengan nama file. Setelah semua substitusi dilakukan, maka dijalankan seolah-olah Anda telah mengetik itu di terminal.
3. Setting dan mengganti nilai-nilai variabel
kata kunci khusus seperti mengatur atau $ simbol menunjukkan variabel yang akan ditetapkan atau digunakan.
kata kunci khusus seperti mengatur atau $ simbol menunjukkan variabel yang akan ditetapkan atau digunakan.
4. Flow-of-kontrol: loop, conditional
kata kunci khusus seperti jika atau foreach digunakan untuk memulai baris pada skrip yang menyediakan kontrol aliran atau eksekusi bersyarat.
kata kunci khusus seperti jika atau foreach digunakan untuk memulai baris pada skrip yang menyediakan kontrol aliran atau eksekusi bersyarat.
Bagaimana Anda mengeksekusi (menjalankan) sebuah shell script?
1. Ada dua metode yang dapat digunakan untuk mengeksekusi sebuah shell script.
2. Pertama, Anda dapat memberikan nama file script sebagai argumen ke sebuah contoh dari program shell, yaitu, ketikkan perintah seperti: csh nama file csh adalah nama-shell program C itu sendiri. Perintah ini dimulai sebuah proses C-shell baru yang mengeksekusi perintah di script nama file dan kemudian berakhir.
3. Kedua, Anda dapat memberikan nama shell script itu sendiri sebagai perintah, seperti program lain di Unix. Pertama, Anda harus membiarkan kernel Unix mengakui bahwa ini adalah sebuah skrip shell dengan melakukan langkah-langkah berikut dua. Lalu Anda cukup mengetik shell itu nama file sebagai nama perintah untuk melaksanakannya. Kernel akan secara otomatis memulai proses C-shell baru untuk mengeksekusi perintah dalam script.
4. Perhatikan bahwa shell login Anda harus dapat menemukan file shell script ketika anda mengetik yang nama sebagai perintah. jalan , untuk menemukan file yang berisi program. Shell login hanya terlihat dalam beberapa kumpulan direktori tertentu, disebut sebagai Pada Pangea, path standar termasuk Anda direktori kerja saat ini , sehingga Anda dapat menjalankan shell script di direktori saat ini cukup dengan mengetikkan namanya. Jika tidak, ketik nama path absolut dari script (untuk contoh, / home / sysop / Farrell / program / addup), atau menambahkan direktori dimana skrip hidup untuk jalan standar Anda. Setiap kali Anda menambahkan sebuah direktori ke path standar Anda, Anda harus menjalankan pengulangan built-in-perintah shell C untuk memberitahu shell login Anda untuk membangun kembali daftar program menggunakan definisi jalan baru Anda.
5. Untuk membuat file shell script anda eksekusi sebagai sebuah program, lakukan langkah-langkah:
6. Masukkan baris berikut sebagai baris pertama dalam naskah anda: #! / Bin / csh-f
Ini adalah sebuah komentar khusus memberitahu kernel yang anda ingin skrip ini dijalankan oleh shell-C (ada shell alternatif bernama cukup sh). F opsi-membantu perintah untuk memulai lebih cepat dengan melewatkan membaca awal dari cshrc file..
7. Gunakan chmod untuk mengatur izin untuk mengeksekusi file Anda. Misalnya, jika Anda ingin ada seseorang yang dapat mengeksekusi file script, gunakan chmod ugo + x nama file
Contoh skrip sederhana
1. Ini adalah contoh dari beberapa script sederhana yang mengumpulkan perintah bersama dalam sebuah file script untuk menyimpan harus mengetikkannya setiap kali mereka dibutuhkan.
2. / Home / sysop / Farrell / bin / atlookall di Pangea
3. Script ini menjalankan perintah atlook, yang mencari jaringan ditetapkan zona AppleTalk untuk perangkat, dengan daftar panjang zona berlaku untuk Ilmu Bumi. Membuat script menghemat harus mengetikkan semua nama zona tersebut setiap kali Anda menjalankannya.
4. #! / Bin / csh-f
# Jalankan atlook untuk memeriksa semua zona Ilmu Bumi AppleTalk.
# Sintaks * insert $ setiap opsi yang diberikan sebagai argumen untuk ini
# Script di depan nama zona.
# Sintaks * insert $ setiap opsi yang diberikan sebagai argumen untuk ini
# Script di depan nama zona.
# Backslash di ujung baris perintah melanjutkan ke baris berikutnya.
5. atlook $ * ES-Ethernet ES-Green-Timur ES-Green-Barat ES-Green-Concourse \
ES-Mitchell-SB Mitchell-ES-ES-Mitchell B-1 ES-Mitchell-3 \
ES-Mitchell-4 ES-GeoCorner-1 ES-GeoCorner-2 ES-GeoCorner-3
ES-Mitchell-SB Mitchell-ES-ES-Mitchell B-1 ES-Mitchell-3 \
ES-Mitchell-4 ES-GeoCorner-1 ES-GeoCorner-2 ES-GeoCorner-3
6. / Local / bin / kereta tangan di Pangea
7. Mengetik perintah kereta tangan hasil Pangea dalam pelaksanaan script, yang disimpan dalam salah satu direktori program sistem standar. Semua script lakukan adalah mencetak informasi tentang cara menggunakan hardcart di Gedung Mitchell.
8. #! / Bin / csh-f
lebih lanjut <<EOF
Kombinasi untuk kunci kombinasi di
Sekolah gerobak Ilmu Bumi:
Kombinasi untuk kunci kombinasi di
Sekolah gerobak Ilmu Bumi:
9. Belok KANAN setidaknya tiga putaran penuh, berhenti di 8
Belok KIRI 1,75 bergantian (giliran terakhir 8), berhenti di 38
Belok KANAN, berhenti di 4, tarik belenggu
Belok KIRI 1,75 bergantian (giliran terakhir 8), berhenti di 38
Belok KANAN, berhenti di 4, tarik belenggu
10. Gerobak diparkir di bawah tangga selatan
di subbasement Gedung Mitchell.
Aturan untuk penggunaan yang diposting di dekatnya. Silahkan
menghubungi Felicia di Dean Kantor (723-5490)
untuk bantuan lebih lanjut.
EOF
di subbasement Gedung Mitchell.
Aturan untuk penggunaan yang diposting di dekatnya. Silahkan
menghubungi Felicia di Dean Kantor (723-5490)
untuk bantuan lebih lanjut.
EOF
11. / Local / bin / pinus di Pangea
12. Dalam rangka menyediakan pilihan global yang akan mempengaruhi semua menjalankan program pembaca email pinus di Pangea, ada script sederhana pada direktori program sistem standar / / bin lokal yang pertama membuat pengaturan yang Anda inginkan, dan kemudian memanggil program pinus nyata , yang disimpan dengan nama lain.
13. #! / Bin / csh-f
# Driver shell untuk pinus "mail" penanganan program.
# P. Farrell, 30 April 1996
#
# Ini memungkinkan saya untuk mengatur opsi default. Sebelumnya, saya akan
# Mengatur opsi-z untuk memungkinkan suspensi program, tetapi yang sekarang
# Set di / lokal / / pine.conf file lib. Unset variabel DISPLAY,
# Yang Pangea set untuk semua login, baik terminal X atau tidak,
# Sehingga pinus tidak akan mencoba untuk menampilkan gambar pada MIME-X terminal non.
# X login dapat menggunakan nama "pinex" untuk menjalankan program secara langsung.
#
unsetenv DISPLAY
#
# Sintaks $ *: q akan menggantikan daftar argumen persis seperti
# Berlalu, dengan blank tertanam dalam kata-kata, melarikan diri metakarakter
# Uninterpreted, dll Verified dengan menguji.
#
exec / local/bin/pine4.33 $ *: q
# Driver shell untuk pinus "mail" penanganan program.
# P. Farrell, 30 April 1996
#
# Ini memungkinkan saya untuk mengatur opsi default. Sebelumnya, saya akan
# Mengatur opsi-z untuk memungkinkan suspensi program, tetapi yang sekarang
# Set di / lokal / / pine.conf file lib. Unset variabel DISPLAY,
# Yang Pangea set untuk semua login, baik terminal X atau tidak,
# Sehingga pinus tidak akan mencoba untuk menampilkan gambar pada MIME-X terminal non.
# X login dapat menggunakan nama "pinex" untuk menjalankan program secara langsung.
#
unsetenv DISPLAY
#
# Sintaks $ *: q akan menggantikan daftar argumen persis seperti
# Berlalu, dengan blank tertanam dalam kata-kata, melarikan diri metakarakter
# Uninterpreted, dll Verified dengan menguji.
#
exec / local/bin/pine4.33 $ *: q
Bekerja dengan variabel script, termasuk argumen baris perintah
Untuk membuat script umum, yang dapat digunakan dengan file yang berbeda atau dalam keadaan yang berbeda, Anda harus memiliki variabel. Sebuah variabel dalam skrip shell - atau bahasa pemrograman - seperti variabel dalam sebuah ekspresi aljabar bervariasi. Ini hanya sekedar nama yang bisa berdiri untuk nilai yang dapat. Dalam skrip shell, Anda dapat membuat variabel dan menetapkan nilai-nilai mereka dengan berbagai metode:
· argumen baris perintah diketik setelah nama skrip ketika Anda menjalankannya.
· Wikipedia mengatur laporan dalam naskah itu sendiri, misalnya, untuk menginisialisasi nilai yang dapat berubah nanti, atau untuk mengumpulkan semua nilai-nilai yang Anda mungkin ingin berubah menjadi satu daftar parameter di bagian atas script.
· laporan menetapkan bahwa mengikuti tes dari beberapa jenis: jika ada satu hasil, mengatur variabel untuk satu nilai, jika hasil lain dari ujian, mengatur variabel ke nilai yang berbeda.
· perhitungan aritmatika yang memodifikasi nilai dari variabel.
· Sebuah substitusi perintah yang menjalankan perintah lain di dalam naskah dan menangkap output untuk menjadi nilai dari variabel.
Anda dapat menggunakan variabel tersebut sebagai bagian dari perintah lain yang Anda jalankan dari dalam shell script: sebagai daftar pilihan, atau nama-nama file yang akan terpengaruh, dll
Khusus C-shell implementasi mungkin memiliki batasan pada ukuran variabel,. Csh Program di Pangea, yang berjalan Tru64 Unix v4.0g tampaknya memiliki batas pada ukuran total dari variabel (jumlah byte data Anda dapat menetapkan untuk sebuah variabel), tetapi kata-kata membatasi individu dalam variabel's data tidak lebih dari 1024 byte masing-masing. Di sini, kata didefinisikan sebagai string karakter bersebelahan yang meliputi tidak ada atau tab karakter kosong (tidak ada "ruang putih"). Artinya, isi dari variabel yang rusak menjadi kata-kata manapun atau tab kosong ditemukan.
Baris perintah argumen untuk script
Ketika Anda mulai dari shell script login interaktif, Anda dapat memberikan argumen dengan script pada baris perintah. Ini secara otomatis berubah menjadi variabel yang dapat digunakan di dalam script.
Jika baris perintah berisi nama file wildcard karakter, referensi substitusi variabel, atau perintah substitusi referensi, yaitu diperluas atau diganti dulu. Kemudian string baris perintah ini dibagi menjadi argumen terpisah pada kosong, kecuali bahwa dikutip string dapat berisi tertanam kosong.
Anda mengacu pada argumen sebagai variabel yang terpisah dalam script sendiri dengan menggunakan tanda dolar (operator substitusi variabel) diikuti oleh nomor integer, misalnya, cp $ 1 $ 2
Pernyataan di dalam shell script akan menjalankan program cp dengan "pertama" argumen ke script shell (kata pertama pada baris perintah yang memulai shell script) telah lulus sebagai nama file untuk menyalin melalui $ 1, dan argumen kedua ke shell script lulus sebagai nama dari salinan baru melalui $ 2.
Seluruh daftar argumen baris perintah bisa direferensikan sebagai satu string dengan sintaks $ *
Khusus C-shell implementasi dapat mengenakan batasan pada jumlah atau ukuran argumen yang bisa dilewatkan ke suatu skrip shell. Program csh di Pangea menggunakan area memori 38912 byte panjangnya untuk menyimpan daftar diperluas argumen (setelah nama file wildcard pencocokan atau variabel atau perintah substitusi dilakukan) yang dapat dikirimkan ke shell script, atau bahkan, untuk setiap program yang dijalankan oleh shell. Variabel Lingkungan juga disimpan di daerah ini memori yang sama, jadi jika Anda memiliki banyak variabel lingkungan, Anda mengurangi total panjang sebuah daftar argumen yang dapat Anda gunakan. Anda dapat melihat berapa jumlah byte banyak digunakan oleh variabel lingkungan Anda dengan perintah ini: printenv | wc-c
Seorang pengguna Pangea khas akan menggunakan 500 sampai 1000 byte untuk variabel lingkungan, sehingga mengurangi ukuran maksimum dari daftar argumen yang lengkap untuk sebuah shell script atau perintah lain dengan jumlah yang
Membuat dan mengatur variabel sendiri di script
Selain argumen baris perintah, shell memiliki sebuah tabel lain yang dibuat pengguna atau variabel tujuan khusus dalam memori. nama dan nilai. Setiap variabel memiliki
· Nama - hingga 20 huruf atau angka (dimulai dengan huruf) - hal kasus!
· Nilai adalah string karakter atau digit panjang sewenang-wenang tanpa ada "intrinsik" tipe. Mereka diperlakukan sebagai string karakter atau nilai numerik, tergantung pada bagaimana mereka digunakan.
Hal ini juga memungkinkan untuk memperlakukan setiap variabel sebagai array kata-kata dan akses kata masing-masing secara terpisah (lihat dokumentasi rinci tentang shell-C).
nama variabel tertentu disediakan oleh shell untuk penggunaan khusus, seperti path atau panjang. Anda dapat membuat sejumlah variabel.
Gunakan perintah set untuk membuat / menetapkan variabel, misalnya:
set nama = single_word
menetapkan nama = (daftar kata)
menetapkan nama = "string dengan kosong tertanam"
Perintah set dengan nilai tidak hanya menciptakan variabel sebagai bendera yang "pada", dan akan memiliki nilai "benar" dalam ekspresi logika, misalnya: mengatur optionflag
Perintah unset variabel menghapus sepenuhnya dari memori, misalnya: unset nama
Menggunakan variabel dalam script
"Substitusi Variabel" adalah proses penggantian referensi ke nama variabel dengan nilai yang sebenarnya. Ini adalah bagaimana kita menggunakan variabel.
Tanda dolar ($) adalah operator substitusi dasar bila digunakan sebagai awalan untuk nama variabel. Setiap kali Anda menggunakan tanda dolar sebagai huruf pertama dari kata dalam perintah shell, maka akan mengharapkan kata untuk menjadi nama variabel. Jika Anda ingin tanda dolar untuk ditafsirkan sebagai tanda dolar hanya sederhana, mendahului, ini wth backslash (\) "melarikan diri" karakter pengganti. Berikut adalah dasar format variabel untuk:
$? Nama
Ini menguji apakah variabel nama ada. Jika variabel memang ada, sebagai pengganti shell nilai 1 (satu, true); jika tidak, nilai 0 (nol, false). jika pernyataan untuk persyaratan menjalankan beberapa perintah. Gunakan formulir ini jika Anda hanya menggunakan variabel sebagai bendera. Hasilnya dapat digunakan dalam sebuah
$ Name
Formulir ini menyebabkan nilai seluruh daftar kata dari nama yang akan diganti untuk referensi. Jika nama tidak didefinisikan (tidak pernah set), Anda mendapatkan error.
$ # Nama
Ini pengganti jumlah kata yang terkandung dalam variabel nama. Jika variabel memiliki nilai null (yaitu, hanya ditetapkan sebagai bendera "variabel"), itu pengganti nol. Jika variabel tidak pernah diatur, Anda mendapatkan error.
$ Name [n]
Ini menggantikan "n" kata (nilai dipisahkan kosong) dari variabel nama. Tanda kurung siku diminta untuk melampirkan n nilai yang menentukan kata yang diinginkan, dan harus mengikuti nama variabel tanpa spasi intervensi. Ini adalah cara untuk mengobati variabel berisi kata nilai multi sebagai array kata-kata yang terpisah. Jika Anda menetapkan indeks kata n nilai yang lebih besar dari jumlah sebenarnya kata dalam variabel ini, Anda mendapatkan error.
Contoh:
set a = ($ b)
Set baru variabel sama dengan daftar kata dalam variabel b ada.
Set baru variabel sama dengan daftar kata dalam variabel b ada.
echo $ b
Echoes (mencetak) nilai yang ada variabel b ke standard output (terminal).
Echoes (mencetak) nilai yang ada variabel b ke standard output (terminal).