Shell Komut Dosyasında $() ve ${} Genişletmeleri Nasıl Kullanılır

How Use Expansions Shell Script



Bir Linux sistemi kullanıyorsanız, sisteminizle etkileşim kurmak için bir kabuk arayüzünün ne kadar önemli olduğunu zaten biliyor olabilirsiniz. Çoğu Linux dağıtımında Bash, komutları çalıştırmak ve komut dosyalarını yürütmek için kullandığımız varsayılan kabuktur. Kabuk betiği, yürütüldüğünde Linux'ta bazı yararlı işlev(ler) gerçekleştirmek için kullanılan bir dizi komuttur. Bir kullanıcı tarafından yazılan bu .sh dosyası, bir görevi gerçekleştirmek için kullanılan tüm komutları içerir, böylece bu komutları tek tek manuel olarak çalıştırmamız gerekmez.

Bu öğreticide, kabuk betiklerinde kullanılan en kullanışlı iki bash genişletmesini açıklayacağız:







  • $() – komut ikamesi
  • ${} – parametre değiştirme/değişken genişletme

Komut dosyası belirteçlere bölündükten sonra Shell'de bir genişletme gerçekleştirilir. Belirteç, kabuk tarafından tek bir birim olarak kabul edilen bir karakter dizisidir. Bir kelime veya bir operatör olabilir.



Bu makalede bahsedilen tüm örnekleri ve betikleri bir Debian 10 Buster sisteminde çalıştırdık. Ancak, bunları çoğu Linux kabuğunda kolayca çoğaltabilirsiniz. Bu eğitim için varsayılan Debian komut satırı olan Terminal'i kullanıyoruz. Debian'da, Uygulama Başlatıcı arama çubuğundan aşağıdaki şekilde erişebilirsiniz:







Uygulama başlatıcısına erişmek için klavyenizdeki Super/Windows tuşuna basmanız yeterlidir.

$() Komut Değiştirme

Resmi GNU Bash Referans kılavuzuna göre:



Komut ikamesi, bir komutun çıktısının komutun kendisinin yerini almasına izin verir. Bash, komutu yürüterek ve komut değiştirmeyi komutun standart çıktısıyla, sondaki yeni satırlar silinerek değiştirerek genişletmeyi gerçekleştirir. Gömülü yeni satırlar silinmez, ancak sözcük bölme sırasında kaldırılabilirler. Komut ikamesi, bir komut aşağıdaki gibi eklendiğinde gerçekleşir:

$(emretmek)
veya
``emretmek``

Örneğin, aşağıdaki yankı komutları, girdileri olarak date komutunun çıktısını değiştirir:

$dışarı attı$(tarih)
$dışarı attı'tarih'

Bir değişkene değer atamak için komut değiştirmeyi de kullanabilirsiniz. Örneğin, bugünün tarihini BUGÜN değişkeni aracılığıyla aşağıdaki gibi yazdıracağız:

$BUGÜN= $(tarih)
$dışarı attı '$BUGÜN'

Komut ikamesinin başka bir yardımcı programı, girdi almak için kabuk döngülerindedir. Burada, komut değiştirmeyi kullanarak ana klasörümüzdeki tüm .txt dosyalarını yazdırmaya çalışacağız:

içinFiçinde /ev/sana/ *.txt
yapmak
dışarı attı '$f'
tamamlamak

Kabuk Komut Dosyasında Komut Değiştirme Kullanma

Yukarıdaki örnekler, kabuk betiğinizde komut değiştirmenin gücünü kullanmanın birkaç yoludur. Aşağıdaki kabuk betiğini kullanarak yazdırabileceğimiz örnek bir durum raporu:

#!/bin/sh

dışarı attı ***Durum Raporu***

BUGÜN= $(tarih)
dışarı attı 'Bugün$BUGÜN'

KULLANICILAR= $(kim | tuvalet-NS)
dışarı attı '$USERSkullanıcılar şu anda oturum açmış durumda'

UPTIME= $(tarih;çalışma süresi)
dışarı attı 'Çalışma süresi$UPTIME'

Bu komut dosyasında komut ikamesi üç kez kullanılmıştır; tarihi basarken, oturum açmış kullanıcılar ve çalışma süresi. Komut dosyasını şu şekilde kaydettik:

Yürütülebilir hale getirdi ve ardından aşağıdaki komutla çalıştırdı:

$chmod+ x durum.sh
$./stats.sh

İşte status.sh betiğimizin çıktısı:

Az önce bahsettiğimiz örnekleri takip ederek elbette daha anlamlı scriptler oluşturabilirsiniz.

${} Parametre Değiştirme/Genişletme

Bash'deki bir parametre, değerleri depolamak için kullanılan bir varlıktır. Bir parametreye bir sayı, ad veya özel bir sembol ile başvurulabilir. Bir parametreye bir sayı ile başvurulduğunda, buna a denir. konumsal parametre . Bir parametreye bir adla başvurulduğunda, buna a denir. değişken . Bir parametreye özel bir sembolle atıfta bulunulduğunda, bu, bunların özel kullanımları olan otomatik ayarlı parametreler olduğu anlamına gelir.

Parametre genişletme/değiştirme başvurulan varlık/parametreden değer alma işlemidir. Değerini almak için bir değişkeni genişletiyormuşsunuz gibi.

Mümkün olan en basit parametre genişletme sözdizimi şudur:

Bash'de parametre genişletmeyi şu şekilde kullanabilirsiniz:

${parametre}

Örneğin, en basit kullanım, parametreyi değeriyle değiştirmektir:

$isim='John Doe'
$dışarı attı ${isim}

Bu komut, yankı komutu tarafından kullanılacak değişken adının değerini değiştirecektir:

Aşağıdaki gibi küme parantezlerinden kaçınarak da aynı şeyin elde edilebileceğini düşünüyor olabilirsiniz:

Cevap, parametre genişletme sırasında bu küme parantezlerinin değişken adının sınırlandırılmasına yardımcı olmasıdır. Burada sınırlayarak ne demek istediğimizi açıklayalım. Sistemimde aşağıdaki komutu çalıştırayım:

$dışarı attı 'Kişinin adı$isim_'

Sonuç, sistem name_ değişkenine atıfta bulunduğumu düşündüğü için değişken adının değerini yazdırmadı. Böylece, değişken adım sınırlandırılmadı. Aşağıdaki örnekteki kaşlı ayraçlar, değişken adını sınırlandıracak ve sonuçları aşağıdaki gibi döndürecektir:

$dışarı attı 'Kişinin adı${isim}_ '

Shell'de değişkenlerin değiştirildiği tüm yollar şunlardır:

$ {değişken} Bu komut, değişkenin değerini değiştirir.
${değişken:-kelime} Bir değişken null ise veya ayarlanmamışsa, değişken yerine word kullanılır. Değişkenin değeri değişmez.
${değişken:=kelime} Bir değişken null ise veya ayarlanmamışsa, değişkenin değeri word olarak ayarlanır.
${değişken:?mesaj} Bir değişken boşsa veya ayarlanmadıysa, mesaj standart bash hatasına yazdırılır.
${değişken:+kelime} Eğer değişken ayarlandı, kelime değişkenin yerine geçer. Ancak, değişkenin kendisinin değeri değişmez.

Yukarıdaki örnekler, Bash'te değişken ikame gücünü kullanmanın birkaç yoludur. Elinizdeki görevi en iyi şekilde gerçekleştirmek için genişletmeyi kullanmak için bu yolları kabuk komut dosyalarınıza dahil edebilirsiniz.