9 Linux Bash Komut Dosyalarında Döngüler İçin Örnekler
Yayınlanan: 2022-08-19 Çok yönlü Bash for
loop, belirli sayıda döngüden çok daha fazlasını yapar. Kendi Linux komut dosyalarınızda başarılı bir şekilde kullanabilmeniz için birçok varyantını açıklıyoruz.
Döngü için
Tüm komut dosyası ve programlama dillerinin döngüleri işlemenin bir yolu vardır. Döngü, tekrar tekrar yürütülmesini istediğiniz bir kod bölümüdür. Komut dosyanıza aynı talimatları tekrar tekrar yazmak yerine, bir döngü sizin için kodun bir bölümünü tekrar tekrar tekrar edecektir.
Bash for
döngüsü çok esnektir. Sayılar, kelimeler, diziler, komut satırı değişkenleri veya diğer komutların çıktılarıyla çalışabilir. Bunlar döngünün başlığında kullanılır. Başlık, döngünün neyle çalıştığını (örneğin sayılar veya dizeler) ve döngüyü durduracak bitiş koşulunun ne olduğunu belirler.
Döngünün gövdesi , tekrarlamak istediğiniz kodu içerir. Döngünün yapmasını istediğiniz şeyi tutar. Döngü gövdesi, herhangi bir geçerli komut dosyası komutunu içerebilir.
Döngü sayacı veya yineleyici adı verilen bir değişken, bir dizi değer veya bir veri öğeleri listesinde gezinmek için kullanılır. Her döngü için, yineleyici bir sonraki sayının, dizenin veya döngünün yinelediği veri türünün değerini alır. Bu, döngünün sırayla veri öğelerinin her birinin değerleriyle çalışmasına ve hatta bazı durumlarda veri öğelerini kendileri manipüle etmesine izin verir.
Döngüler için Basit
İlk for döngünüzü yazmak istiyorsanız, bu basit örnekler başlamanıza yardımcı olacaktır.
Sayısal Listeler Kullanan Döngüler için
Komut satırında bir for
döngüsü çalıştırabilirsiniz. Bu komut basit bir for
döngüsü oluşturur ve yürütür. Yineleyici, i
adlı bir değişkendir. Sırayla sayı listesindeki değerlerin her birine i
atayacağız. Döngünün gövdesi bu değeri terminal penceresine yazdıracaktır. Bu döngüyü sona i
koşul, tüm sayı listesini yinelememdir.
i için 1 2 3 4 5; yankı $i yap; tamamlamak
Burada, döngü her döndüğünde i
değişkeninin bir arttığına dikkat etmek önemlidir, ancak bunun nedeni sayı listesinin her seferinde bir artmasıdır.
Bu sayı listesi 3'ten başlar ve ikişerli adımlarla yükselir, ardından keyfi olarak 44'e sıçrar.
i için 3 5 7 9 11 44; yankı $i yap; tamamlamak
for
fark yaratmaz. Listenin bir ucundan başlar ve listedeki tüm değerler kullanılana kadar sırayla her değeri kullanır.
Sayıların artan sırada olması da gerekmez. Herhangi bir sırada olabilirler.
i için 3 43 44 11 9; yankı $i yap; tamamlamak
Kelime Listelerini Kullanan Döngüler İçin
Aynı şeyi kelimelerle de kolayca yapabiliriz. Komut dosyasının metnini bir düzenleyiciye kopyalayın ve “word-list.sh” olarak kaydedin.
#!/bin/bash for word in Bu bir kelime dizisidir yapmak yankı $kelime tamamlamak
Komut dosyasını çalıştırılabilir hale getirmek için chmod
ve bu makaleden kopyaladığınız diğer komut dosyalarını kullanmanız gerekir. Sadece chmod
komutunu her kullandığınızda betiğin adını değiştirin.
chmod +x word-list.sh
Senaryoyu çalıştıralım.
./word-list.sh
Tıpkı sayılarda olduğu gibi, yineleyici - bu örnekte, değişken word
- listenin sonuna ulaşana kadar veri öğeleri listesinde çalışır. Döngü gövdesi, word
değişkenindeki değere erişir ve böylece listedeki her kelime işlenir.
Sayı Aralıklı Döngüler için
Bir for
döngüsünün 100 kez çalışmasını istiyorsanız, döngü başlığına 100 sayı dizisi yazmak zorunda kalmak oldukça yorucu bir iş olurdu. Sayı aralıkları, yalnızca ilk ve son sayıyı belirtmenize olanak tanır.
Bu komut dosyası "number-range.sh" şeklindedir.
#!/bin/bash i için {1..10} yapmak echo "Döngü dönüşü:" $i tamamlamak
Sayı aralığı, aralığı başlatan ve bitiren sayıları ayıran iki noktalı “ ..
” ile küme parantezleri “ {}
” içinde tanımlanır. Aralık tanımına boşluk eklemediğinizden emin olun.
Bu nasıl çalışır:
./sayı-aralığı.sh
Yineleyicinin aralıktaki sayılar arasında gezinmek için kullanması gereken adım boyutunu tanımlayan başka bir sayı ekleyebilirsiniz. Bu komut dosyası, "number-range2.sh", 0 ila 32 aralığı ve 4 adım boyutu kullanır.
#!/bin/bash ben için {0..32..4} yapmak echo "Döngü dönüşü:" $i tamamlamak
Yineleyici, dörtlü atlamalarla sayı aralığında adım atar.
./number-range2.sh
Dosya Adlarını Kullanan Döngüler İçin
Sözcük listelerini işleyebileceğimiz için, betiklerimizin dosya adlarıyla çalışmasını sağlayabiliriz. Bu komut dosyası "filenames.sh" olarak adlandırılır.
#!/bin/bash word-list.sh'deki dosya için sayı-aralık.sh sayı-aralık2.sh dosyaadı.sh yapmak ls -lh "$dosya" tamamlamak
Yalnızca ls
yapabildiklerini yapan bir komut dosyasına sahip olmak oldukça anlamsız olurdu, ancak döngü gövdesi içindeki dosya adlarına nasıl erişileceğini gösterir.
./dosya adları.sh
Sayı aralığını kullanmaya benzer şekilde, işlemek istediğimiz dosyaları belirtmek için döngü başlığında bir dosya kalıbı kullanabiliriz. Bu, çok fazla yazmayı önler ve dosyaların adlarını önceden bilmemize gerek olmadığı anlamına gelir.
Bu komut dosyası "filenames2.sh" olarak adlandırılır. Komut dosyası raporunun geçerli dizindeki tüm komut dosyası dosyalarına sahip olması için dosya adları listesini “*.sh” dosya adı kalıbıyla değiştirdik.
#!/bin/bash *.sh içindeki dosya için yapmak ls -lh "$dosya" tamamlamak
İşte çıktı.
./filenames2.sh
Komut Satırı Parametrelerini Kullanan Döngüler İçin
Komut satırında dosya adı desenini ileterek biraz daha esneklik ekleyebiliriz. $*
değişkeni, komut dosyasına iletilen tüm komut satırı parametrelerini temsil eder.
Bu, "dosya adları3.sh" dir.
#!/bin/bash $* içindeki dosya için yapmak ls -lh "$dosya" tamamlamak
“n” ile başlayan ve SH uzantılı dosya adları isteyeceğiz.
./filenames3.sh n*.sh
Aynı anda birden fazla kalıba da geçebiliriz.
./filenames3.sh n*.sh .bashrc
Yineleyici değişken file
, komut satırı parametrelerinin her birinin değerini alır. Dosya adı kalıpları genişletilir ve tüm dosya adları döngü gövdesinde işlenir.
İLGİLİ: Bash'de Değişkenlerle Nasıl Çalışılır
Döngüler için C benzeri
Bash, C programlama dilinde bulunanlar gibi klasik üç terimli döngüyü destekler. Döngü başlığında üç terim olduğundan, döngüler için üç terimli olarak adlandırılırlar.
- Döngü yineleyicisinin başlangıç değeri.
- Döngünün devam edip etmediğinin testi.
- Yineleyicinin artması veya azalması.
Bu komut dosyası "c-like.sh."
Yineleyici I
, döngünün başlangıcında 1'e ayarlanır ve döngü, ” i<=10
” ifadesi doğru olduğu sürece çalışır. i
ulaştığımda for
döngüsü duracak. Yineleyici, döngünün her devrinde bir artırılır.
#!/bin/bash (( i=1; i<=10; i++ )) için yapmak echo "Döngü numarası:" $i tamamlamak
Bu betiği çalıştıralım.
./c-like.sh
C benzeri for
döngüsü, biraz tuhaf gereksinimleri olan for
döngülerinin kolayca oluşturulmasına izin verir. Bu döngü 15'ten başlar ve 3'lük adımlarla geriye doğru sayar. Bu “c-like2.sh”.
#!/bin/bash (( i=15; i>0; i-=3 )) için yapmak echo "Döngü numarası:" $i tamamlamak
Çalıştırdığımızda, üçlü adımlarla geriye doğru atlamalıdır.
./c-like2.sh
Döngüler için Sonsuz
Sonsuz bir döngü oluşturmak için bu for
döngüsü biçimini de kullanabilirsiniz. Tek yapmanız gereken, bunun gibi döngü başlığındaki tüm öğeleri kaldırmak. Bu "sonsuz.sh."
#!/bin/bash için (( ; ; )) yapmak echo "Durdurmak için Ctrl+C'ye basın..." uyku 1 tamamlamak
Döngüyü durdurmak için Ctrl+C'ye basmanız gerekecek.
./sonsuz.sh
Kelime Dizilerini Kullanan Döngüler İçin
Bir dizi kelimeyi kolayca yineleyebiliriz. Döngü başlığında dizinin adını sağlamamız gerekiyor ve yineleyici dizideki tüm girişleri gözden geçirecek. Bu "word-array.sh".
#!/bin/bash dağıtımlar=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") $ dağıtımlarında dağıtım için yapmak yankı $dağıtım tamamlamak
Tüm dağıtımlar bizim için listelenmiştir.
./word-array.sh
Devam Komutu
Döngünün belirli bir girişin üzerinden geçmesini istiyorsanız, yineleyicinin bu girişle eşleşip eşleşmediğini test edin ve continue
komutunu kullanın. continue
komutu, döngünün mevcut dönüşünü terk eder. Yineleyiciyi artırır ve atlamak istediğiniz girişin listedeki son öğe olmadığını varsayarak döngünün sonraki dönüşünü başlatır.
Bu "word-array2.sh." “Arch” dizisi girişinin üzerinden geçer ancak diğer tüm dizi üyelerini işler.
#!/bin/bash dağıtımlar=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") $ dağıtımlarında dağıtım için yapmak if [[ "$distro" == "Arch" ]] ; sonra devam et fi yankı $dağıtım tamamlamak
Terminal penceresinde “Arch” görünmüyor.
./word-array2.sh
mola komutu
break
komutu döngüden çıkar ve daha fazla işlemeyi engeller.
Bu "word-array3.sh". continue
ile değiştirilen önceki komut dosyasıyla aynıdır break
.
#!/bin/bash dağıtımlar=("Ubuntu Fedora Manjaro Arch EndeavourOS Garuda") $ dağıtımlarında dağıtım için yapmak if [[ "$distro" == "Arch" ]] ; sonra kırmak fi yankı $dağıtım tamamlamak
Yineleyici "Arch" içerdiğinde, for döngüsü daha fazla işlemeyi bırakır.
./word-array3.sh
İlişkisel Dizileri Kullanan Döngüler İçin
Bash 4 ve sonraki sürümlerde, ilişkisel diziler, anahtar veya değer tarafından aranabilen anahtar/değer çiftlerinin listelerini oluşturmanıza olanak tanır. Anahtar ve değer arasındaki iki yönlü ilişki nedeniyle bunlara veri sözlükleri de denir.
Bir for
döngüsü kullanarak bir ilişkisel diziyi yineleyebiliriz. Bu komut dosyası "associative.sh." İçinde "dog", "cat", "robin" ve "human" öğelerinin her biri için birer tane olmak üzere, içinde dört giriş bulunan bir ilişkisel dizi tanımlar. Anahtarlar bunlar. Değerler, her birinin sahip olduğu (varsayılan) bacak sayısıdır.
#!/bin/bash beyan -A hayvanlar=( [köpek]=Dört ayaklı [kedi]=Dört ayaklı [robin]=İki ayaklı [insan]=İki ayaklı ) ${!animals[@]} içindeki bacaklar için yapmak if [ ${hayvanlar[$bacaklar]} == "İki ayaklı" ]; sonra yankı ${bacaklar} fi tamamlamak
Yineleyiciye legs
denir. Döngü başlığının bir “ !
" Ünlem işareti. Bu mantıksal NOT operatörü olarak hareket etmez, ilişkisel dizi sözdiziminin bir parçasıdır. Dizi içinde arama yapmak gereklidir.
Döngünün gövdesi bir dizi karşılaştırma testi gerçekleştirir. Dizi üyesinin değeri “Two-legged” ise anahtar değerini terminal penceresine yazdırır. Çalıştırdığımızda script iki ayaklı yaratıkları yazdırıyor.
./associative.sh
Komutların çıktısı üzerinde yineleme
Dosya adları gibi bir şeyin listesini oluşturan bir komutunuz veya komut diziniz varsa, bunları bir for
döngüsüyle yineleyebilirsiniz. Beklenmeyen dosya adı açılımlarına karşı dikkatli olmalısınız, ancak basit durumlarda sorun olmaz.
Bu komut dosyası "command.sh." ls
ve wc
komut dosyası adlarının satır, sözcük ve bayt sayılarıyla birlikte sıralanmış bir listesini sağlamak için kullanır.
#!/bin/bash i için $(ls *.sh | sort); yapmak yankı $(wc $i) tamamlamak
Çalıştırdığımızda, dosyalar alfabetik sırayla listelenmiş olarak her dosya için istatistikleri alırız.
./komut.sh
Döngü için Göz Kamaştırıcı
for
döngüsü, çok yönlü ve kolay anlaşılır bir komut dosyası oluşturma aracıdır. Ancak esnek olduğu kadar, başka döngülerin de bir nedeni olduğunu unutmayın. for
döngüsünün ihtiyacınız olan tek şey olduğunu düşünerek gözleriniz kamaşmasın.
Örneğin while
döngüsü, bir dosyadan satır okumak gibi belirli şeyler için for
döngüsünden çok daha uygundur.
İyi komut dosyaları yazmak, eldeki görev için en uygun aracı kullanmak anlamına gelir. for
döngüsü, araç kutunuzda olması gereken harika bir araçtır.