9 Linux Bash Komut Dosyalarında Döngüler İçin Örnekler

Yayınlanan: 2022-08-19
Mavi bir arka plan üzerinde bir dizüstü bilgisayarda Linux komut satırı.
fatmawati achmad zaenuri/Shutterstock.com

Ç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.

Linux'a Başlamak için 9 Bash Komut Dosyası Örneği
İLGİLİ 9 Bash Komut Dosyası Örneği Linux'a Başlarken

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 

1'den 5'e kadar sayma için bir for döngüsü

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 

a ardışık olmayan bir sayı listesi aracılığıyla sayma için for döngüsü

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 

a sıralanmamış bir sayı listesinden for döngüsü sayma

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 

chmod ile çalıştırılabilir bir komut dosyası yapma

Senaryoyu çalıştıralım.

 ./word-list.sh 

Bir kelime listesi üzerinden çalışan bir for döngüsü

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 

Bir sayı aralığı kullanan bir for döngüsü

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 

4'lük bir yineleyici adımı kullanan bir for döngüsü

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 

Dosya adları listesini kullanan bir for döngüsü

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 

*.sh dosya desenini kullanan bir for döngüsü

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 

Bir dosya kalıbını komut satırı parametresi olarak alan for döngüsü

Aynı anda birden fazla kalıba da geçebiliriz.

 ./filenames3.sh n*.sh .bashrc 

Bir dosya deseni ve bir dosya adının komut satırı parametrelerini alan bir for döngüsü

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 

Üç terimli veya C benzeri bir for döngüsü

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 

Geriye doğru saymak için C benzeri bir döngü

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 

Döngü için sonsuz bir C benzeri

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 

Bir kelime dizisi kullanan bir for döngüsü

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 

Devam komutu nedeniyle bir kelime dizisindeki bir girişi atlayan bir for döngüsü

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 

Break komutu nedeniyle daha fazla işlemeyi bırakan bir for döngüsü

İ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.

Linux'ta Bash Sözlükleri Nedir ve Bunları Nasıl Kullanırsınız?
İLGİLİ Linux'ta Bash Sözlükleri Nelerdir ve Bunları Nasıl Kullanırsınız?

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 

İlişkili bir diziden öğeleri çıkarmak için bir for döngüsü kullanma

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 

İki borulu komutun çıktısını yinelemek için bir for döngüsü kullanma

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.

Linux Bash Komut Dosyasında Bir Dosya Satır Satır Nasıl İşlenir
İLGİLİ Bir Linux Bash Komut Dosyasında Bir Dosyayı Satır Satır Nasıl İşlenir

Ö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.