Cara Melaksanakan Perintah dari dalam Skrip Shell

How Execute Commands From Within Shell Script



Pada awalnya, menjalankan perintah dari skrip shell mungkin sedikit menakutkan pada awalnya dan mungkin memerlukan lompatan iman. Bagaimanapun, perintah yang dilaksanakan dalam skrip bash tidak interaktif. Di sini kita akan meletakkan dasar untuk melaksanakan perintah dari dalam skrip shell yang menjawab pertanyaan berikut tentang perintah: Dari mana asalnya? Apakah mereka? Bagaimana kita menggunakannya dalam skrip?

Dari mana datangnya arahan?

Perintah dalam bash berasal dari salah satu kategori berikut:







Bash sendiri (lihat builtin)

Bash hadir dengan sekumpulan perintahnya sendiri untuk membolehkan akses ke ciri terbina dalamnya seperti menyatakan tatasusunan, baris bacaan dari fail, dan ciri lain yang sudah ada untuk bash. Kami memanggil perintah dari kategori ini, perintah bash builtin, atau builtin secara ringkas.



Dapat dilaksanakan di persekitaran anda (lihat arahan luaran)

Secara lalai, bash akan mewarisi pemboleh ubah tertentu secara lalai. Ini diperhatikan dalam kes pemboleh ubah PATH termasuk lokasi untuk eksekusi yang dirujuk sebagai perintah luaran dalam bash. Iaitu, jika kerinting perintah ada di jalan anda, ia mungkin dilaksanakan dari dalam skrip bash dengan cara yang sama seperti dalam mod interaktif. Kami memanggil perintah kategori ini, perintah luaran, atau perintah pendek.



Fungsi yang ditentukan pengguna (lihat fungsi)

Sebelum melaksanakan perintah luaran dan builtin, bash memeriksa apakah fungsi ditentukan. Sekiranya fungsinya dijalankan sebagai perintah. Sekiranya tidak, ia akan meneruskan urutan keutamaan untuk perintah. Untuk melaksanakan fungsi yang ditentukan di luar skrip, mereka mesti dinyatakan dengan atribut -x; jika tidak, mereka mungkin disertakan dengan menggunakan. Perintah. Kami memanggil perintah dari kategori ini fungsi atau fungsi yang ditentukan pengguna.





Apa itu perintah

Perintah adalah sebarang perkataan yang harus diperlakukan sebagai satu titik masuk program dalam lingkungan shell. Sekiranya perintah itu dilaksanakan, perintah itu sendiri dan argumen pilihan diteruskan sebagai parameter kedudukan, $ {0}, $ {1}, $ {2}, ... Parameter kedudukan nol ($ {0}) menetapkan perintah itu sendiri dan tidak berubah mengikut konteks. Iaitu, tidak seperti parameter kedudukan dalam fungsi, $ {1}, $ {2}, ... yang mungkin berubah bergantung pada konteksnya, $ {0} tidak berubah antara panggilan fungsi.

Perintah dilampirkan bergantung pada lokasi pengisytiharan dan atribut yang ditetapkan sebagai global, built-in to bash, atau local untuk program bash anda.



Berikut adalah senarai jenis arahan yang perlu diketahui.

Perintah Builtin

Ini adalah warganegara kelas pertama dari bash semesta, termasuk watak-watak seperti '.' ':' '[' ']]' Dan kata-kata terpelihara seperti menyatakan dalam bash. Anda mengandalkan perintah-perintah ini, yang terdapat dalam daftar perintah bash builtin, yang tersedia untuk digunakan dalam skrip bash anda.

Bergantung pada sebutan dan nombor versi jurubahasa bash anda, beberapa arahan mungkin tidak tersedia.

Perintah luaran

Perintah luaran boleh dilaksanakan di luar skrip bash seperti curl. Tidak seperti fungsi, perintah luaran tidak disimpan sebagai pemboleh ubah.

Semakin rendah keutamaan jenis perintah, semakin lambat perintah itu dapat ditafsirkan. Perintah luaran mempunyai urutan keutamaan terendah dalam bash. Iaitu sebelum menjalankan perintah luaran, interpreter bash, akan mencari fungsi, kemudian builtin, dan akhirnya cuba melihat apakah perintah itu ada secara luaran. Sekiranya tidak, anda akan melihat ralat berikut.

bash: perintah tidak diketahui:arahantidak ditemui

Dalam skrip bash, fungsi dapat mengatasi tingkah laku perintah luaran jika berkongsi nama yang sama seperti yang pernah kita lihat sebelumnya dalam contoh curl bash. Contoh perintah luaran khusus menggunakan fungsi berikut.

kerinting() {
arahan $ {FUNCNAME}...
}

Ini berfungsi kerana fungsi mempunyai keutamaan yang lebih tinggi daripada perintah luaran dan bahkan bash builtin. Batasannya adalah watak yang dibenarkan dalam nama fungsi.

Perhatikan bahawa contoh di atas dapat dicapai dengan menggunakan alias seperti berikut.

alias kerinting= '
{
keriting ...
}
'

Dalam kasus alias, jenis perintah mungkin berbeda bergantung pada konteks pelaksanaannya, sedangkan dalam hal perintah luaran khusus menggunakan metode fungsi, titik masuk selalu berfungsi.

Fungsi

Fungsi memerintah dalam bash. Sebelum melihat builtin dan perintah luaran, bash memeriksa apakah fungsi yang ditentukan oleh nama fungsi calon, perkataan pertama muncul pada baris atau setelah; watak yang menunjukkan akhir baris arahan. Satu-satunya pengecualian adalah pemboleh ubah bash yang ditulis dalam huruf besar seperti $ {FUNCNAME}.

alias() { FUNGSI= asdf;membuang $ {@ ,,};}
alias kerinting='UJIAN CURL ALIAS' #?

Perintah mudah

Perintah mudah didefinisikan di halaman man bash sebagai kata yang diikuti oleh argumen pilihan. Dalam konteksnya, perintah mudah mungkin merupakan perintah internal, fungsi luaran, atau fungsi.

Cara melaksanakan perintah dari dalam skrip bash

Setelah mengetahui jenis perintah yang tersedia, kami dapat memperluas cara menggunakannya dalam skrip anda. Mula-mula, kita perlu mengetahui bagaimana keutamaan perintah berfungsi dalam bash.

Berikut adalah beberapa cara untuk mengawal keutamaan dalam skrip bash.

Biarkan bash memutuskan

nama_perintah

Sebahagian besarnya, terutama pada awalnya, kami membiarkan bash memutuskan arahan mana yang akan digunakan. Namun, ada kes apabila niat anda mungkin tidak dapat ditafsirkan dengan tepat oleh bash. Begitulah keadaannya apabila nama fungsi dan perintah luaran atau builtin bertindih.

Jalankan arahan luaran

arahannama_perintah

Anggaplah bahawa terdapat command_name perintah luaran yang tersedia dalam mod interaktif dan anda ingin menggunakannya dalam skrip bash. Kami secara jelas dapat memberitahu bash bahawa command_name adalah perintah luaran menggunakan perintah builtin.

Contoh arahan luaran

Contoh arahan luaran dengan anggapan berikut dipasang:

fail
pergi
figlet
Contoh: Dapatkan jenis fail dan maklumat
{ # dapatkan jenis fail dan maklumat
fail $ {infile} # (1,2)
}
# (1) arahan, fail
# (2) infile = {Laluan ke fail}
Contoh: Fail diubah dan fail baru di git
{ # fail pentas di git
git tambah.# (1)
}
# (1) perintah, git
Contoh: Buat seni ascii menggunakan figlet
{ # mencipta seni ascii
figlet$ {mesej} # (1,2)
}
Perintah # (1), figlet
# (2) message = {Mesej untuk dipaparkan sebagai seni ascii}

Jalankan arahan builtin

terbina dalamnama_perintah

Katakan bahawa command_name adalah salah satu perintah yang ditakrifkan sebagai builtin in bash. Untuk memberitahu bash bahawa kami ingin menjalankan command_name sebagai builtin, kami menggunakan builtin builtin.

Contoh perintah Builtin
Contoh: Berapa banyak binaan?
terbina dalam{,}{,}{,,} # berapa binaan?
Contoh: Phantom menyatakan
{
menyatakan() { membuangAlamak!;}
menyatakan–Xfmenyatakan #?
}

Kesimpulannya

Cukup mudah untuk melaksanakan perintah dari dalam skrip bash shell. Terdapat tiga jenis arahan utama. Mengetahui bagaimana perintah mudah ditafsirkan dalam bash dapat menyebabkan kawalan yang lebih baik terhadap jenis perintah apa yang dijalankan dalam runtime.