Panduan Pemula Untuk BASH - Parameter Input

Selamat datang ke bahagian ke-2 Panduan Pemula Untuk siri BASH yang unik kerana ia adalah satu-satunya tutorial BASH yang ditulis oleh pemula untuk pemula.

Pembaca panduan ini akan membina pengetahuan mereka apabila saya membina pengetahuan saya dan semoga akhirnya kita semua dapat menulis beberapa skrip yang cukup bijak.

Minggu lepas saya meliputi membuat skrip pertama anda yang hanya memaparkan perkataan "Hello World". Ia meliputi subjek seperti editor teks, cara membuka tetingkap terminal, tempat meletakkan skrip anda, bagaimana untuk memaparkan kata-kata "Hello World" dan beberapa perkara yang lebih halus mengenai karakter melarikan diri seperti tanda petikan ("").

Minggu ini saya akan menutup parameter input. Terdapat panduan lain yang mengajar perkara semacam itu tetapi saya dapati mereka melompat ke dalam beberapa perkara yang agak rendah dan mungkin memberikan terlalu banyak maklumat.

Apakah Parameter A?

Dalam skrip "Hello World" dari tutorial lepas, semuanya sangat statik. Skrip tidak semestinya sama sekali.

Bagaimanakah kita dapat memperbaiki skrip "Hello World"?

Bagaimana dengan skrip yang menyambut orang yang menjalankannya? Daripada mengatakan "Hello World" ia akan berkata "Hello Gary", "Hello Tim" atau "Hello Dolly".

Tanpa keupayaan untuk menerima parameter masukan kita perlu menulis tiga skrip "hellogary.sh", "hellotim.sh" dan "hellodolly.sh".

Dengan membenarkan skrip kami membaca parameter input kami boleh menggunakan satu skrip untuk menyambut sesiapa sahaja.

Untuk melakukan ini buka tetingkap terminal (CTRL + ALT + T) dan navigasi ke folder skrip anda dengan menaip yang berikut: ( mengenai arahan cd )

skrip cd

Buat skrip baru dipanggil greetme.sh dengan menaip yang berikut: ( mengenai arahan sentuh )

sentuh greetme.sh

Buka skrip pada editor kegemaran anda dengan menaip yang berikut: ( mengenai arahan nano )

nano greetme.sh

Masukkan teks berikut dalam nano:

#! / bin / bash echo "hello $ @"

Tekan CTRL dan O untuk menyimpan fail dan kemudian CTRL dan X untuk menutup fail.

Untuk menjalankan skrip, masukkan berikut ke dalam baris perintah yang digantikan dengan nama anda.

sh greetme.sh

Jika saya menjalankan skrip dengan nama saya, ia akan memaparkan perkataan "Hello Gary".

Baris pertama mempunyai baris #! / Bin / bash yang digunakan untuk mengenal pasti fail itu sebagai skrip bash.

Baris kedua menggunakan pernyataan echo untuk echo perkataan hello dan kemudian terdapat $ @ notasi yang aneh. ( mengenai arahan echo )

$ @ Mengembang untuk memaparkan setiap parameter yang dimasukkan bersama dengan nama skrip. Jadi jika anda menaip "sh salamme.sh pasukan" perkataan "halo tim" akan dipaparkan. Jika anda menaip "greetme.sh tim smith" maka perkataan "hello tim smith" akan dipaparkan.

Ia mungkin bagus untuk skrip greetme.sh hanya mengatakan hello menggunakan nama pertama saja. Tiada siapa yang mengatakan "hello gary newell" apabila mereka bertemu dengan saya, mereka mungkin berkata "halo gary" walaupun.

Mari ubah skrip supaya ia hanya menggunakan parameter pertama. Buka script greetme.sh di nano dengan menaip yang berikut:

nano greetme.sh

Tukar skrip supaya ia berbunyi seperti berikut:

#! / bin / bash echo "hello $ 1"

Simpan skrip dengan menekan CTRL dan O dan kemudian keluar dengan menekan CTRL dan X.

Jalankan skrip seperti ditunjukkan di bawah (gantikan nama saya dengan anda):

sh greetme.sh gary newell

Apabila anda menjalankan skrip ia hanya akan mengatakan "hello gary" (atau semoga "halo" dan apa sahaja nama anda.

1 selepas simbol $ pada dasarnya mengatakan kepada arahan echo, gunakan parameter pertama. Jika anda menggantikan $ 1 dengan $ 2 maka ia akan memaparkan "hello newell" (atau apa saja nama keluarga anda).

Secara kebetulan jika anda mengganti $ 2 dengan $ 3 dan menjalankan skrip dengan hanya 2 parameter outputnya hanya akan menjadi "Hello".

Ia mungkin untuk memaparkan dan mengendalikan bilangan parameter yang sebenarnya dimasukkan dan dalam tutorial kemudian saya akan menunjukkan cara menggunakan kiraan parameter untuk tujuan pengesahan.

Untuk memaparkan bilangan parameter yang dimasukkan buka skrip salam. (Nano greetme.sh) dan pindahkan teks seperti berikut:

#! / bin / bash echo "anda memasuki $ # nama" echo "hello $ @"

Tekan CTRL dan O untuk menyimpan skrip dan CTRL dan X untuk keluar dari nano.

$ # Di baris ke-2 memaparkan jumlah parameter yang dimasukkan.

Setakat ini semua ini telah menjadi novel tetapi tidak begitu berguna. Siapa yang memerlukan skrip yang hanya memaparkan "halo"?

Penggunaan sebenar untuk pernyataan echo adalah untuk memberikan keluaran yang lebih kasar dan bermakna kepada pengguna. Jika anda boleh bayangkan bahawa anda ingin melakukan sesuatu yang rumit yang melibatkan beberapa masalah yang serius dan manipulasi fail / folder, ia akan berguna untuk dipaparkan kepada pengguna apa yang berlaku setiap langkah.

Sebaliknya, parameter input menjadikan skrip anda interaktif. Tanpa parameter input, anda memerlukan puluhan skrip semua melakukan perkara yang sangat serupa tetapi dengan nama yang sedikit berbeza.

Dengan semua ini, terdapat beberapa parameter input berguna lain yang merupakan idea yang baik untuk diketahui dan saya akan memasukkan mereka semua dalam satu coretan kod.

Buka skrip salam anda dan ubahnya seperti berikut:

#! / bin / bash echo "Nama File: $ 0" echo "ID Proses: $$" echo "---------------------------- --- "echo" anda masukkan $ # nama "echo" hello $ @ "

Tekan CTRL dan O untuk menyimpan fail dan CTRL dan X untuk keluar.

Sekarang Jalankan skrip (gantikan dengan nama anda).

sh greetme.sh

Kali ini skrip memaparkan yang berikut:

Nama fail: greetme.sh ID Proses: 18595 ------------------------------ anda memasukkan 2 nama halo gary newell

$ 0 di baris pertama skrip memaparkan nama skrip yang anda jalankan. Perhatikan bahawa ia adalah sifar dolar dan bukan dolar o.

$$ pada baris kedua memaparkan id proses skrip yang sedang dijalankan. Mengapa ini berguna? Jika anda menjalankan skrip di latar depan, anda boleh membatalkannya dengan hanya menekan CTRL dan C. Jika anda menjalankan skrip di latar belakang dan ia mula berulang dan melakukan perkara yang sama berulang-ulang atau mula menyebabkan kerosakan pada sistem anda yang anda perlukan untuk membunuhnya.

Untuk membunuh skrip yang berjalan di latar belakang, anda memerlukan id proses skrip. Bukankah lebih baik sekiranya skrip memberikan id proses sebagai sebahagian daripada outputnya. ( mengenai ps dan membunuh arahan )

Akhirnya sebelum saya selesai dengan topik ini saya ingin membincangkan mengenai output mana yang berlaku. Setiap kali skrip berjalan sehingga output telah dipaparkan di skrin.

Ia agak biasa bagi output skrip untuk ditulis ke fail output. Untuk melakukan ini, jalankan skrip anda seperti berikut:

sh greetme.sh gary> greetme.log

Simbol> dalam arahan di atas menghasilkan teks "halo gary" pada fail bernama greetme.log.

Setiap kali anda menjalankan skrip dengan simbol> ia menggantikan kandungan fail output. Jika anda lebih suka untuk menambah fail itu ganti dengan> >>.

Ringkasan

Anda kini boleh menulis teks ke skrin dan menerima parameter input.