Stasiun Kerja Online OnWorks Linux dan Windows

logo

Hosting Online Gratis untuk WorkStation

<Sebelumnya | Konten | Selanjutnya>

Jika Anda mau, prompt dapat mengeksekusi skrip shell dan berperilaku berbeda dalam kondisi yang berbeda. Anda bahkan dapat meminta prompt memainkan nada setiap kali Anda mengeluarkan perintah, meskipun ini akan segera membosankan. Informasi lebih lanjut dapat ditemukan di Bash-Prompt HOWTO.


gambar

7.2.5. Skrip shell


7.2.5.1. Apa itu skrip?


Skrip shell, seperti yang kita lihat dalam contoh konfigurasi shell, adalah file teks yang berisi perintah shell. Ketika file seperti itu digunakan sebagai argumen non-opsi pertama saat menjalankan Bash, dan bukan -c maupun -s opsi disediakan, Bash membaca dan menjalankan perintah dari file, lalu keluar. Mode operasi ini menciptakan

cangkang non-interaktif. Ketika Bash menjalankan skrip shell, itu menetapkan parameter khusus 0 ke nama file, bukan nama shell, dan parameter posisi (semuanya mengikuti nama skrip) diatur ke argumen yang tersisa, jika ada. Jika tidak ada argumen tambahan yang diberikan, parameter posisi tidak disetel.


Skrip shell dapat dibuat dapat dieksekusi dengan menggunakan: chmod perintah untuk mengaktifkan bit eksekusi. Ketika Bash menemukan file seperti itu saat mencari PATH untuk sebuah perintah, itu memunculkan sub-kulit untuk menjalankannya. Dengan kata lain, mengeksekusi


nama file ARGUMEN


setara dengan mengeksekusi


menampar nama file ARGUMENTS


jika "nama file" adalah skrip shell yang dapat dieksekusi. Sub-kulit ini menginisialisasi ulang dirinya sendiri, sehingga efeknya seolah-olah cangkang baru telah dipanggil untuk menginterpretasikan skrip, dengan pengecualian bahwa lokasi perintah diingat oleh induknya (lihat hash di halaman Info) disimpan oleh anak.


Sebagian besar versi UNIX menjadikannya bagian dari mekanisme eksekusi perintah sistem operasi. Jika baris pertama skrip dimulai dengan dua karakter "#!", sisa baris menentukan juru bahasa untuk program tersebut. Dengan demikian, Anda dapat menentukan menampar, Wow, perl atau penerjemah atau shell lain dan tulis sisa file skrip dalam bahasa itu.


Argumen untuk interpreter terdiri dari satu argumen opsional yang mengikuti nama interpreter pada baris pertama file skrip, diikuti dengan nama file skrip, diikuti dengan argumen lainnya. Bash akan melakukan tindakan ini pada sistem operasi yang tidak menanganinya sendiri.


Skrip bash sering dimulai dengan


#! / bin / bash (dengan asumsi bahwa Bash telah diinstal di /tempat sampah), karena ini memastikan bahwa Bash akan digunakan untuk menafsirkan skrip, bahkan jika dijalankan di bawah shell lain.


gambar


7.2.5.2. Beberapa contoh sederhana


Skrip yang sangat sederhana yang hanya terdiri dari satu perintah, yang menyapa pengguna yang menjalankannya:


[jerry@nowhere~] kucing halo.sh

#! / bin / bash

echo "Halo $USER"

[jerry@nowhere~] kucing halo.sh

#! / bin / bash

echo "Halo $USER"

Script sebenarnya hanya terdiri dari satu perintah, gema, yang menggunakan nilai ($) itu PENGGUNA variabel lingkungan untuk mencetak string yang disesuaikan dengan pengguna yang mengeluarkan perintah.


Satu baris lainnya, digunakan untuk menampilkan pengguna yang terhubung:


#! / bin / bash

siapa | potong -d " " -f 1 | urutkan -u

#! / bin / bash

siapa | potong -d " " -f 1 | urutkan -u

Berikut adalah skrip yang terdiri dari beberapa baris lagi, yang saya gunakan untuk membuat salinan cadangan semua file dalam direktori. Script pertama membuat daftar semua file di direktori saat ini dan meletakkannya di variabel DAFTAR. Kemudian ia menetapkan nama salinan untuk setiap file, dan kemudian menyalin file tersebut. Untuk setiap file, pesan dicetak:


sampai:~> kucing bin/makebackupfiles.sh

#! / bin / bash

# membuat salinan semua file dalam direktori LIST=`ls`

untuk saya di $LIST; melakukan

ASLI=$i

TANGGAL=$i.lama

cp $ASLI $DEST echo "disalin $i"

dilakukan

sampai:~> kucing bin/makebackupfiles.sh

#! / bin / bash

# membuat salinan semua file dalam direktori LIST=`ls`

untuk saya di $LIST; melakukan

ASLI=$i

TANGGAL=$i.lama

cp $ASLI $DEST echo "disalin $i"

dilakukan

Hanya memasukkan baris seperti mv * *.tua tidak akan berfungsi, seperti yang akan Anda perhatikan ketika mencoba ini pada satu set file uji. NS gema perintah ditambahkan untuk menampilkan beberapa aktivitas. gema's umumnya berguna ketika skrip tidak berfungsi: masukkan satu setelah setiap langkah yang meragukan dan Anda akan segera menemukan kesalahannya.


The /etc/rc.d/init.d direktori berisi banyak contoh. Mari kita lihat skrip ini yang mengontrol server ICanSeeYou fiktif:


# / Bin / sh

# deskripsi: ICanSeeYou memungkinkan Anda melihat orang-orang yang terhubung ke jaringan


# nama proses: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# konfigurasi: /etc/ICanSeeYou.cfg


# Pustaka fungsi sumber.

. /etc/rc.d/init.d/functions


# Lihat bagaimana (dengan argumen apa) kami dipanggil. kasus "$1" di

Mulailah)

echo -n "Memulai ICanSeeYou: " daemon ICanSeeYou

gema

sentuh /var/lock/subsys/ICanSeeYou

;;

berhenti)

echo -n "Mematikan ICanSeeYou: "

# / Bin / sh

# deskripsi: ICanSeeYou memungkinkan Anda melihat orang-orang yang terhubung ke jaringan


# nama proses: ICanSeeYou

# pidfile: /var/run/ICanSeeYou/ICanSeeYou.pid

# konfigurasi: /etc/ICanSeeYou.cfg


# Pustaka fungsi sumber.

. /etc/rc.d/init.d/functions


# Lihat bagaimana (dengan argumen apa) kami dipanggil. kasus "$1" di

Mulailah)

echo -n "Memulai ICanSeeYou: " daemon ICanSeeYou

gema

sentuh /var/lock/subsys/ICanSeeYou

;;

berhenti)

echo -n "Mematikan ICanSeeYou: "


killproc ICanSeeYou gema

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

restart)

$0 berhenti

$0 mulai

;;

*)

echo "Penggunaan: $0 {start|stop|restart|status}" keluar 1

esac


keluar 0

killproc ICanSeeYou gema

rm -f /var/lock/subsys/ICanSeeYou

rm -f /var/run/ICanSeeYou/ICanSeeYou.pid

;;

status)

status ICanSeeYou

;;

restart)

$0 berhenti

$0 mulai

;;

*)

echo "Penggunaan: $0 {start|stop|restart|status}" keluar 1

esac


keluar 0

Pertama, dengan . perintah (titik) satu set fungsi shell, digunakan oleh hampir semua skrip shell di

/etc/rc.d/init.d, dimuat. Kemudian kasus perintah dikeluarkan, yang mendefinisikan 4 cara berbeda yang dapat dijalankan skrip. Contohnya mungkin Aku bisa melihatmu awal. Keputusan kasus mana yang akan diterapkan dibuat dengan membaca argumen (pertama) pada skrip, dengan ekspresi $1.


Ketika tidak ada input yang sesuai diberikan, kasus default, ditandai dengan tanda bintang, diterapkan, di mana skrip memberikan pesan kesalahan. NS kasus daftar diakhiri dengan esac penyataan. Dalam awal kasus program server dimulai sebagai daemon, dan ID proses dan kunci ditetapkan. Dalam berhenti kasus, proses server dilacak dan dihentikan, dan kunci dan PID dihapus. Opsi, seperti daemon pilihan, dan fungsi seperti killproc, didefinisikan dalam /etc/rc.d/init.d/functions mengajukan. Pengaturan ini khusus untuk distribusi yang digunakan dalam contoh ini. Skrip init pada sistem Anda mungkin menggunakan fungsi lain, yang ditentukan dalam file lain, atau tidak sama sekali.


Setelah berhasil, skrip mengembalikan kode keluar nol ke induknya.


Skrip ini adalah contoh penggunaan fungsi yang bagus, yang membuat skrip lebih mudah dibaca dan pekerjaan selesai lebih cepat. Perhatikan bahwa mereka menggunakan sh alih-alih menampar, untuk membuatnya berguna pada berbagai sistem yang lebih luas. Pada sistem Linux, memanggil menampar as sh menghasilkan shell yang berjalan dalam mode yang sesuai dengan POSIX.


Komputasi Awan OS Teratas di OnWorks: