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.