Semua yang Anda Perlu Tahu Mengenai Bash Untuk Gelung di Linux

Semua yang Anda Perlu Tahu Mengenai Bash Untuk Gelung di Linux

Skrip Bash adalah kaedah yang sangat berkesan untuk mengotomatisasi tugas, terutama yang memanfaatkan program lain yang ada. Automasi ini sering memerlukan pengulangan operasi serupa beberapa kali, di mana tepatnya untuk gelung datang sendiri.





Pentadbir sistem Linux dan Mac biasanya biasa dengan skrip melalui terminal, tetapi pengguna Windows juga dapat ikuti tindakan dengan Windows Subsistem untuk Linux .





Bagaimana Skrip Bash Berfungsi

Skrip bash hanyalah fail teks biasa yang mengandungi serangkaian perintah yang dapat dibaca dan dilaksanakan oleh shell bash. Bash adalah shell lalai di macOS pra-Catalina, dan sebilangan besar pengedaran Linux.





Sekiranya anda tidak pernah menggunakan skrip shell sebelumnya, anda harus mulakan dengan kes paling sederhana. Ini akan membolehkan anda mempraktikkan konsep utama termasuk pembuatan skrip dan pelaksanaannya.

Pertama, buat fail berikut di lokasi yang mudah (idealnya, buka terminal dan arahkan ke direktori yang diinginkan terlebih dahulu):



#!/bin/bash
echo 'Hello, World'

Baris pertama memberitahu apa sahaja yang menjalankan program ini bagaimana menjalankannya (iaitu menggunakan juru bahasa bash). Yang kedua hanyalah arahan seperti perintah lain yang mungkin anda masukkan pada baris perintah. Simpan fail itu sebagai hello_world.sh , kemudian:

$ chmod +x hello_world.sh
$ ./hello_world.sh

The chmod perintah pada baris pertama menjadikan file dapat dieksekusi, yang bermaksud dapat dijalankan dengan mengetik namanya, seperti pada baris kedua.





Sekiranya anda melihat perkataan Hello, World kelihatan dicetak pada baris di terminal anda, maka semuanya berfungsi seperti yang diperlukan.

Bagaimana Gelung Berfungsi

Dalam pengaturcaraan umum, terdapat dua jenis utama untuk gelung: berangka dan untuk setiap . Jenis angka secara tradisional adalah yang paling umum, tetapi dalam penggunaan bash, biasanya sebaliknya.





Numerik untuk gelung biasanya fokus pada bilangan bulat tunggal yang menentukan berapa banyak lelaran yang akan dilakukan, misalnya:

for (i = 0; i <100; i++) {
/* statements to execute repeatedly */
}

Ini adalah gelung mencari yang biasa yang akan berulang 100 kali, kecuali jika saya diubah dalam gelung, atau pernyataan lain menyebabkan pelaksanaan gelung berhenti.

Gelung Foreach, sebaliknya, cenderung beroperasi pada struktur seperti senarai atau tatasusunan, dan berulang untuk setiap item dalam koleksi tersebut:

people = [ 'Peter', 'Paul', 'Mary' ]
foreach (people as person) {
if (person == 'Paul') {
...
}
}

Beberapa bahasa menggunakan sintaks yang sedikit berbeza yang menukar susunan koleksi dan item:

people = [ 'Peter', 'Paul', 'Mary' ]
for (person in people) {
if (person == 'Paul') {
...
}
}

Untuk dalam Gelung

Dalam bash, bahagian depan - atau untuk di - gelung lebih biasa. Sintaks asasnya ialah:

for arg in [list]
do
/* statements to execute repeatedly */
/* the value of arg can be obtained using $arg */
done

Contohnya, untuk melakukan iterasi melalui tiga fail bernama:

aplikasi mel windows 10 vs pandangan
for file in one.c two.c three.c
do
ls '$file'
done

Sekiranya fail seperti itu ada di direktori semasa, output dari skrip ini adalah:

one.c
two.c
three.c

Daripada sekumpulan fail yang tetap, senarai boleh diperoleh melalui corak glob (satu termasuk kad liar - watak khas yang mewakili watak lain). Dalam contoh berikut, for for loop berulang pada semua fail (dalam direktori semasa) yang namanya berakhir dengan '.xml':

for file in *.xml
do
ls -l '$file'
done

Berikut adalah beberapa contoh output:

$ -rw-r--r-- 1 bobby staff 2436 3 Nov 2019 feed.xml
$ -rw-r--r-- 1 bobby staff 6447 27 Oct 16:24 sitemap.xml

Ini mungkin kelihatan seperti kaedah jangka panjang:

$ ls -l *.xml

Tetapi ada perbezaan yang ketara: untuk gelung melaksanakan ls program 2 kali berasingan, dengan satu nama fail diserahkan kepadanya setiap kali. Dalam contoh ls yang terpisah, corak glob (* .xml) memadankan nama fail terlebih dahulu dan kemudian menghantar semuanya, sebagai parameter baris perintah individu, ke satu contoh ls .

Berikut adalah contoh yang menggunakan wc program (penghitungan kata) untuk menjadikan perbezaannya lebih jelas:

$ wc -l *.xml
44 feed.xml
231 sitemap.xml
275 total

The wc program mengira bilangan baris dalam setiap fail secara berasingan, kemudian mencetak jumlah keseluruhan di antara semua fail. Sebaliknya, jika wc beroperasi dalam gelung untuk:

for file in *.xml
do
wc -l $file
done

Anda masih akan melihat jumlah setiap fail:

44 feed.xml
231 sitemap.xml

Tetapi tidak ada jumlah keseluruhan ringkasan kerana wc dijalankan secara berasingan, setiap kali gelung berulang.

Apabila Senarai Bukan Senarai

Terdapat kesilapan yang sangat mudah dan biasa ketika menangani gelung, kerana cara bash menangani hujah / rentetan yang dipetik. Mengulangi senarai fail harus dilakukan seperti ini:

for file in one.c two.c

Bukan macam ini:

for file in 'one.c two.c'

Contoh kedua merangkumi nama fail dalam tanda kutip dua yang menghasilkan senarai dengan hanya satu parameter; untuk gelung hanya akan dijalankan sekali sahaja. Masalah ini dapat dielakkan dengan menggunakan pemboleh ubah dalam kes seperti:

FILES='one.c two.c'
for file in $FILES
do
...
done

Perhatikan bahawa perisytiharan pemboleh ubah itu sendiri perlu memasukkan nilainya dalam tanda petik dua kali!

cara bermain permainan pc di android

Untuk Tanpa Senarai

Dengan tidak ada iterasi, a for loop beroperasi pada apa sahaja argumen baris perintah yang diberikan kepada skrip ketika dipanggil. Contohnya, jika anda mempunyai skrip bernama berhujah mengandungi perkara berikut:

#!/bin/sh
for a
do
echo $a
done

Kemudian melaksanakan args.sh akan memberi anda perkara berikut:

$ ./args.sh one two three
one
two
three

Bash menyedari kes ini dan memperlakukannya untuk melakukan sebagai setara dengan untuk $ @ buat di mana $ @ adalah pemboleh ubah khas yang mewakili argumen baris perintah.

Meniru Numerik Tradisional Untuk Gelung

Skrip Bash sering berurusan dengan senarai fail atau baris output dari perintah lain, jadi jenis gelung adalah perkara biasa. Walau bagaimanapun, operasi gaya c tradisional masih disokong:

for (( i=1; i<=5; i++ ))
do
echo $i
done

Ini adalah bentuk klasik dengan tiga bahagian di mana:

  1. pemboleh ubah diinisialisasi (i = 1) ketika gelung pertama kali ditemui
  2. gelung berterusan selagi keadaan (i<=5) is true
  3. setiap kali di sekitar gelung, pemboleh ubahnya bertambah (i ++)

Pengulangan antara dua nilai adalah syarat yang cukup umum bahawa ada alternatif yang lebih pendek dan sedikit membingungkan:

for i in {1..5}
do
echo $i
done

Pengembangan pendakap yang berlaku dengan berkesan menerjemahkan perkara di atas untuk gelung menjadi:

for i in 1 2 3 4

Kawalan Gelung Lebih Baik Dengan Putus dan Terus

Lebih rumit untuk gelung sering memerlukan jalan keluar awal atau segera memulakan semula gelung utama dengan nilai seterusnya secara bergiliran. Untuk melakukannya, bash meminjam pernyataan berhenti dan meneruskan yang biasa dalam bahasa pengaturcaraan lain. Berikut adalah contoh yang menggunakan kedua-duanya untuk mencari fail pertama yang panjangnya melebihi 100 aksara:

#!/bin/bash
for file in *
do
if [ ! -f '$file' ]
then
echo '$file is not a file'
continue
fi
num_chars=$(wc -c <'$file')
echo $file is '$num_chars characters long'
if [ $num_chars -gt 100 ]
then
echo 'Found $file'
break
fi
done

Gelung untuk di sini beroperasi pada semua fail dalam direktori semasa. Sekiranya fail itu bukan fail biasa (mis. Jika itu adalah direktori), pernyataan lanjut digunakan untuk memulakan semula gelung dengan fail berikutnya secara bergantian. Sekiranya fail biasa, blok bersyarat kedua akan menentukan sama ada ia mengandungi lebih daripada 100 aksara. Sekiranya demikian, pernyataan putus digunakan untuk segera meninggalkan loop untuk (dan mencapai akhir skrip).

Kesimpulannya

Skrip bash adalah fail yang mengandungi sekumpulan arahan yang dapat dijalankan. A for loop membolehkan sebahagian skrip diulang berkali-kali. Dengan penggunaan pemboleh ubah, perintah luaran, dan pernyataan putus dan lanjutan, skrip bash dapat menerapkan logik yang lebih kompleks dan melaksanakan berbagai tugas.

Berkongsi Berkongsi Tweet E-mel Adakah Perlu Ditingkatkan ke Windows 11?

Windows telah direka bentuk semula. Tetapi apakah itu cukup untuk meyakinkan anda untuk beralih dari Windows 10 ke Windows 11?

Baca Seterusnya
Topik-topik yang berkaitan
  • Pengaturcaraan
  • Linux
Mengenai Pengarang Bobby Jack(58 Artikel Diterbitkan)

Bobby adalah peminat teknologi yang bekerja sebagai pembangun perisian selama hampir dua dekad. Dia meminati permainan, bekerja sebagai Editor Ulasan di Switch Player Magazine, dan terlibat dalam semua aspek penerbitan dalam talian & pembangunan web.

Lagi Dari Bobby Jack

Langgan buletin kami

Sertailah buletin kami untuk mendapatkan petua, ulasan, ebook percuma, dan tawaran eksklusif!

Klik di sini untuk melanggan