Bash betikleri, özellikle diğer mevcut programlardan yararlananlar gibi görevleri otomatikleştirmenin oldukça verimli bir yoludur. Bu otomasyon genellikle benzer bir işlemin birkaç kez tekrarlanmasını gerektirir; döngü için kendi kendine gelir.

Linux ve Mac sistem yöneticileri genellikle terminal aracılığıyla komut dosyası oluşturmaya aşinadır, ancak Windows kullanıcıları bile Linux için Windows Alt Sistemi ile harekete geçin.

Windows 10'da Linux Bash Kabuğu Nasıl Elde Edilir

Farklı bir PC'ye geçmek veya bir VM çalıştırmak için zamanınız olmadığı için Linux kullanmaya mı ihtiyacınız var? Linux'u Windows 10'da bunun yerine Bash kabuk terminali ile çalıştırın!

Bash Komut Dosyaları Nasıl Çalışır?

Bir bash betiği, bash kabuğunun okuyup çalıştırabileceği bir dizi komut içeren basit bir metin dosyasıdır. Bash, Catalina öncesi macOS ve çoğu Linux dağıtımında varsayılan kabuktur.

Daha önce hiç bir kabuk komut dosyasıyla çalışmadıysanız, mutlak en basit durumla başlamalısınız. Bu, komut dosyasının oluşturulması ve yürütülmesi dahil olmak üzere temel kavramları uygulamanıza izin verecektir.

instagram viewer

Öncelikle, aşağıdaki dosyayı uygun bir konumda oluşturun (ideal olarak, bir terminal açın ve önce istediğiniz dizine gidin):

#! / bin / bash
echo "Merhaba, Dünya"

İlk satır, bu programı ne çalıştırıyorsa onu nasıl çalıştıracağını söyler (yani, bash yorumlayıcısını kullanarak). İkincisi, komut satırına girebileceğiniz diğerleri gibi bir komuttur. Bu dosyayı farklı kaydedin hello_world.sh, sonra:

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

chmod ilk satırdaki komut, dosyayı çalıştırılabilir hale getirir, yani ikinci satırdaki gibi adı yazarak çalıştırılabilir.

Terminalinizdeki bir satırda "Merhaba, Dünya" kelimelerinin yazılı olduğunu görürseniz, her şey gerektiği gibi çalışıyordur.

Döngüler Nasıl Çalışır

Genel programlamada, iki ana tip for döngüsü vardır: sayısal ve her biri için. Sayısal tür geleneksel olarak en yaygın olanıdır, ancak bash kullanımında genellikle tam tersidir.

Döngüler için sayısal, genellikle kaç yineleme yapılacağını belirleyen tek bir tam sayıya odaklanır, örneğin:

için (i = 0; i <100; i ++) {
/ * ifadeleri tekrar tekrar çalıştırılacak * /
}

Bu, döngü içinde değiştirilmedikçe veya başka bir ifade for döngüsünün yürütülmesinin durmasına neden olmadıkça, tam olarak 100 kez yinelenecek tanıdık görünümlü bir döngüdür.

Foreach döngüleri, aksine, listeler veya diziler gibi yapılar üzerinde çalışma eğilimindedir ve bu koleksiyondaki her öğe için yineleme yapar:

insanlar = ["Petrus", "Paul", "Meryem"]
foreach (kişi olarak insanlar) {
if (kişi == "Paul") {
...
}
}

Bazı diller, koleksiyon ve öğe sırasını değiştiren biraz farklı bir sözdizimi kullanır:

insanlar = ["Petrus", "Paul", "Meryem"]
for (kişi içindeki kişi) {
if (kişi == "Paul") {
...
}
}

Döngüler için

Bash'de foreach veya için- döngü daha yaygındır. Temel sözdizimi basitçe:

[liste] içinde argüman için
yapmak
/ * ifadeleri tekrar tekrar çalıştırılacak * /
/ * arg'nin değeri $ arg * / kullanılarak elde edilebilir
bitti

Örneğin, açıkça adlandırılmış üç dosyayı yinelemek için:

one.c iki.c üç.c dosyasındaki dosya için
yapmak
"$ dosya"
bitti

Geçerli dizinde bu tür dosyalar varsa, bu komut dosyasının çıktısı şöyle olacaktır:

one.c
two.c
Three.c

Sabit bir dosya kümesi yerine, liste bir glob kalıbı aracılığıyla elde edilebilir (biri joker karakterleri içerir - diğer karakterleri temsil eden özel karakterler). Aşağıdaki örnekte, for döngüsü, adları ".xml" ile biten tüm dosyalar (geçerli dizindeki) boyunca yinelenir:

* .xml dosyası için
yapmak
ls -l "$ dosya"
bitti

İşte bazı örnek çıktılar:

$ -rw-r - r-- 1 bobby staff 2436 3 Kasım 2019 feed.xml
$ -rw-r - r-- 1 bobby staff 6447 27 Ekim 16:24 sitemap.xml

Bu, uzun soluklu bir yol gibi görünebilir:

$ ls -l * .xml

Ancak önemli bir fark var: for döngüsü, ls her seferinde tek bir dosya adı ile 2 ayrı kez programlayın. Ayrı ls örneğinde, glob modeli (* .xml) önce dosya adlarıyla eşleşir ve ardından hepsini ayrı komut satırı parametreleri olarak tek bir örneğe gönderir. ls.

İşte, şunu kullanan bir örnek tuvalet Farkı daha belirgin hale getirmek için (kelime sayısı) programı:

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

tuvalet program her dosyadaki satır sayısını ayrı ayrı sayar ve ardından hepsine toplam sayıyı yazdırır. Aksine, eğer tuvalet bir for döngüsü içinde çalışır:

* .xml dosyası için
yapmak
wc -l $ dosya
bitti

Yine de her dosyanın sayısını göreceksiniz:

44 feed.xml
231 sitemap.xml

Ancak genel bir özet toplamı yoktur çünkü tuvalet döngü her yinelendiğinde ayrı olarak çalıştırılır.

Liste, Liste Değilse

Bash'ın alıntılanan argümanları / dizeleri işleme biçimi nedeniyle döngüleri ele alırken çok kolay ve yaygın bir hata vardır. Bir dosya listesi boyunca döngü şu şekilde yapılmalıdır:

one.c two.c dosyasındaki dosya için

Böyle değil:

"one.c two.c" dosyasındaki dosya için

İkinci örnek, dosya adlarını çift tırnak içine alarak, yalnızca tek bir parametre içeren bir listeyle sonuçlanır; for döngüsü yalnızca bir kez yürütülecektir. Bu gibi durumlarda bir değişken kullanılarak bu problem önlenebilir:

DOSYALAR = "one.c two.c"
$ FILES dosyasındaki dosya için
yapmak
...
bitti

Değişken bildiriminin kendi değerini çift tırnak içine alması gerektiğine dikkat edin!

Listesiz İçin

Yinelenecek hiçbir şey olmadığından, bir for döngüsü, çağrıldığında betiğe sağlanan komut satırı argümanları üzerinde çalışır. Örneğin, adında bir komut dosyanız varsa args.sh aşağıdakileri içeren:

#! / bin / sh
için
yapmak
echo $ a
bitti

Daha sonra args.sh dosyasını çalıştırmak size aşağıdakileri verecektir:

$ ./args.sh bir iki üç
bir
iki
üç

Bash bu vakayı tanır ve tedavi eder bir yapmak için eşdeğeri olarak $ @ do için $ @, komut satırı argümanlarını temsil eden özel bir değişkendir.

Döngü için Geleneksel Bir Sayısal Öykünme

Bash betikleri genellikle dosya listelerini veya diğer komutlardan çıktı satırlarını ele alır, bu nedenle for in tipi döngü yaygındır. Bununla birlikte, geleneksel c tarzı işlem hala desteklenmektedir:

için ((i = 1; i <= 5; i ++))
yapmak
echo $ i
bitti

Bu, üç bölümden oluşan klasik formdur:

  1. döngü ilk karşılaşıldığında bir değişken başlatılır (i = 1)
  2. koşul (i <= 5) doğru olduğu sürece döngü devam eder
  3. döngü etrafında her seferinde değişken artırılır (i ++)

İki değer arasında yineleme yapmak, daha kısa, biraz daha az kafa karıştırıcı bir alternatifin olması için yeterince yaygın bir gereksinimdir:

{1..5} içindeki i için
yapmak
echo $ i
bitti

Gerçekleşen küme ayracı genişletmesi, yukarıdaki for döngüsünü etkili bir şekilde şu şekilde çevirir:

1 2 3 4 için

Kesme ve Devam Etme ile Daha İnce Döngü Kontrolü

Döngüler için daha karmaşık, genellikle erken çıkmanın veya sırayla sonraki değerle ana döngüden hemen yeniden başlatmanın bir yolunu gerektirir. Bunu yapmak için bash, diğer programlama dillerinde yaygın olan break ve continue ifadelerini ödünç alır. 100 karakterden uzun olan ilk dosyayı bulmak için her ikisinin de kullanıldığı bir örneği burada bulabilirsiniz:

#! / bin / bash
* içindeki dosya için
yapmak
Eğer [! -f "$ dosya"]
sonra
echo "$ dosya bir dosya değil"
devam et
fi
num_chars = $ (wc -c echo $ dosya "$ num_chars karakter uzunluğunda"
eğer [$ num_chars -gt 100]
sonra
echo "$ dosya bulundu"
kırmak
fi
bitti

Buradaki for döngüsü, geçerli dizindeki tüm dosyalarda çalışır. Dosya normal bir dosya değilse (örneğin, bir dizinse), continue ifadesi sırayla bir sonraki dosyayla döngüyü yeniden başlatmak için kullanılır. Normal bir dosyaysa, ikinci koşullu blok 100'den fazla karakter içerip içermediğini belirleyecektir. Öyleyse, break deyimi for döngüsünden hemen ayrılmak (ve betiğin sonuna ulaşmak) için kullanılır.

Sonuç

Bir bash betiği, yürütülebilecek bir dizi talimat içeren bir dosyadır. Bir for döngüsü, bir komut dosyasının bir kısmının birçok kez tekrarlanmasına izin verir. Değişkenlerin, harici komutların ve break ve continue ifadelerinin kullanımıyla, bash betikleri daha karmaşık mantık uygulayabilir ve çok çeşitli görevleri gerçekleştirebilir.

Eposta
Apple'ın Uygulama Gizlilik Etiketleri Tamamen Doğru Olmayabilir

Rapor, Apple'ın uygulama gizlilik etiketlerinde bazı sorunlar olabileceğini gösteriyor.

İlgili konular
  • Programlama
  • Linux
Yazar hakkında
Bobby Jack (19 Makale Yayınlandı)

Bobby, yirmi yılın büyük bir bölümünde yazılım geliştirici olarak çalışan bir teknoloji meraklısıdır. Switch Player Magazine'de İnceleme Editörü olarak çalışarak oyun oynama konusunda tutkulu ve çevrimiçi yayıncılık ve web geliştirmenin tüm yönlerine dalmış durumda.

Bobby Jack'dan Daha Fazla

Haber bültenimize abone ol

Teknoloji ipuçları, incelemeler, ücretsiz e-kitaplar ve özel fırsatlar için haber bültenimize katılın!

Bir adım daha…!

Lütfen size az önce gönderdiğimiz e-postadaki e-posta adresinizi onaylayın.

.