Bash 'For' Döngüsü: Öğretici ve Örnekler

Bash (Bourne Again Shell), GNU/Linux işletim sistemlerinde bir kabuk komut istemi ve betik dilidir. Çoğu Linux dağıtımı için varsayılan kabuktur.

Çoğu betik dili gibi Bash, benzer görevleri birden çok kez tekrarlamak için döngü sözdizimleri sağlar. Bu yazımızda nasıl kullanılacağını öğreneceğiz. için Bash'de döngü.

Tanıtım

Tipik bir Bash betiği, birbiri ardına yürütülecek bir dizi komut içerir. Değişkenler, dizeleri, tamsayı indeks değerlerini, bir komutun sonuçlarını vb. depolamak için kullanılabilir. Kullanıcı belirli bir komutu birden çok kez yürütmek istediğinde döngüler gereklidir. Bir komutun çıktısı bir liste biçiminde olduğunda ve listedeki her sonuç için ikinci bir komut çalıştırılacağında özellikle kullanışlıdır.

Genel Sözdizimi

için genel sözdizimi için Bash'deki döngü:

yapmak için ... ... bitti

burada, geçerli bir Linux kabuk değişkeni adı olması gereken bir Bash değişkenidir, yani ad, harfler(az, AZ), sayılar (0-9) ve alt çizgi (_) kombinasyonunu içerir ve bir harf veya bir alt çizgi.

bu ya döngülenecek özel bir tamsayı indeksi aralığı veya özel bir tamsayı veya dize listesidir. Başka bir Linux komutu da içerebilir, ancak bu komutun çıktısı boşluklarla veya yeni satır karakterleriyle ayrılmalıdır, yani Bash tarafından bir listeye ayrıştırılabilir (Bash'teki bir liste temelde bir boşluk veya yeni satırla ayrılmış bir değerler topluluğudur. ).

Hangi komut(lar) yürütülecekse, bunun içine yerleştirilmelidir. yap..bitti engellemek.

Birkaç basit örnek görelim.

Bir dizi Tamsayı değeri üzerinde döngü: Aşağıdaki kod, dir1, dir2, dir3'ten dir10'a kadar olan dizinleri oluşturur.

{1..10} içindeki i için mkdir dir$i yaptım

Sabit değerler listesinde döngü: Aşağıdaki kod, verilen sabit listedeki her dizeyi veya tamsayıyı yazdırır.

Merhaba 1 2 3 Hoşçakalın! yankı $i yaptım

Bir komutun çıktısında döngü: Aşağıdaki kod, çıktısı üzerinde döngü yapar ls ve her dosyanın adını verilen biçimde yazdırır.

`ls` içindeki i için echo "Dosya adı $i" işlemi tamamlandı

İfade tabanlı Sözdizimi

Bash'de C programlama diline benzer ifade tabanlı bir sözdizimi de mümkündür:

for ((İfade 1; İfade 2; İfade 3)) do ... ... yapıldı

Burada, ifade 1 indeks değişken(ler)inin başlatılmasıdır. ifade 2 döngüden çıkılması gereken koşuldur; bu koşul her yinelemede kontrol edilir. ifade 3 indeks değişken(ler)inin değerindeki artışı/azalmayı/değiştirmeyi belirtir

Aşağıdaki örnek, 0 ile 4 arasındaki değerleri basitçe yazdırır:

için ((i=0;i<5;i++)) do echo $i bitti

Aşağıdaki örnek, hiçbir ifade belirtilmediğinden sonsuz bir döngü oluşturur:

(( ; ; )) için do echo "Durdurmak için Ctrl-C'ye basın" yapıldı

Ara ve Devam Et

Koşullu Çıkış için Break İfadesi

Koşullu ifadeyi de kullanabiliriz Eğer döngü içinde. bu Eğer ifadesi ile kullanılabilir kırmak döngüden koşullu çıkış için.

((i=0;i<10;i++)) için if [[ $i -eq 5 ]] yapın, ardından else break echo $i; bitti

Yukarıdaki döngü 0'dan 4'e kadar olan sayıları yazdıracaktır. Ardından i'nin değeri 5 olduğunda döngüden çıkacaktır. Bu, bir komut belirli bir çıktı verdiğinde bir döngüden çıkılacağı zaman özellikle kullanışlıdır. Örneğin, aşağıdaki döngü boş bir dosya bulduğunda ve bulduğunda bozulur.

`ls` içindeki dosya için do flen=`wc -c $file` eğer [[ "$flen" = "0 $file" ]] ise yankı "$file is boş" break else echo $flen fi bitti 

Komuta wc -c dosyadaki satır sayısını yazdırır . Formatta yazdırır , Örneğin, 10 deneme.txt. Satır sayısı 0 olduğunda, yani boş bir dosya olduğunda döngüden çıkıyoruz.

Bir Yinelemeyi Koşullu Olarak Atlamak için İfadeye Devam Et

C ve diğer birçok programlama diline benzer şekilde bash'ın da bir devam et deyimi, belirli bir koşul karşılanıyorsa, bir döngüdeki yinelemenin kalan kısmını atlamak için.

((i=0;i<10;i++)) için if [[ $i -eq 5 ]] yapın, sonra devam edin fi echo $i; tamamlamak

Yukarıdaki döngü, 5 dışında 0'dan 10'a kadar olan sayıları yazdıracaktır, çünkü yineleme sırasında ben=5 yineleme ile başlangıçta döngüdeki kodun geri kalanını atlayacak bir devam ifadesi vardır. ben=6.

Aşağıdaki örnekte, bir dosyadaki satır sayısını yazdırıyoruz ve belirli bir yineleme devam et bir dizinse ve bir dosya değilse.

`ls` içindeki dosya için eğer [[ -d $file ]] yapın, ardından devam edin fi wc -c "$file" bitti

[[ -d $dosya ]] dosyanın bir dizin olup olmadığını kontrol eder. Eğer öyleyse, bir sonraki dosyaya, yani bir sonraki yinelemeye geçiyoruz. Bir dizin değilse, dosyadaki satır sayısını kullanarak yazdırırız. wc komutu, daha önce de gösterildiği gibi.

Döngüleri Kullanma: Komut Dosyaları ve Komut Satırı

Döngü sözdizimi, doğrudan Bash kabuğunda veya bir kabuk komut dosyasından kullanılabilir. Birkez için kabuğa döngü sözdizimi girilirse, kabuk, kullanıcının döngülenecek komutları sürdürmesine izin vermek için komut istemini sürdürür.

Veya kullanıcı bunu bir komut dosyasına kaydedebilir ve komut dosyasını çalıştırabilir.

bu #!/bin/bash başlangıçta dosya yürütüldüğünde kullanılacak yorumlayıcıyı belirtir. Bash, günümüzde en yaygın kullanılan kabuk olmasına rağmen, bazı kullanıcılar aşağıdaki gibi kabukları tercih eder: zsh, bu dosyanın başında bash yerine belirtilmelidir.

Yürütme izinleri vermek için bu dosya için şunu çalıştırın:

chmod +x testi.sh

Nihayet, dosyayı yürütmek için, Çalıştırmak:

./test.sh

Çözüm

bu için Bash'deki döngü oldukça basit bir özelliktir ancak hemen hemen her tür karmaşık komut dosyası senaryosunda kullanımı vardır. İster normal ister gelişmiş bir Linux kullanıcısı olun, ister Sistem Yönetimi ve DevOps görevleri için otomasyonu öğrenmeye başlayın, bunu öğrenmek uzun bir yol kat eder.