Bash Komut Dosyasında Argümanı Nasıl Geçiririm?

How Do I Pass Argument Bash Script



Linux Mint 20 Kullanıcılarının çoğu, bir bash betiğinde bir argüman iletirken kendilerini sıkışmış buluyor. Bağımsız değişkenleri yürütüldüğünde herhangi bir bash betiğine iletebilirsiniz. Bir bash betiğinde argümanları iletmenin birkaç basit ve kullanışlı yolu vardır. Bu makale kılavuzunda, bash komut dosyalarınızda argümanları iletmenin ve kullanmanın çok kolay yollarını size bildireceğiz.

Varsayılan Değişkenleri Kullanarak Argümanları Geçmek:

Touch komutunu kullanarak herhangi bir adla yeni bir dosya oluşturun, örneğin file.sh.







$dokunmadosya adı



Bu yeni oluşturulan dosyayı açın ve ona bir miktar bash betiği ekleyin. Bazı varsayılan değişkenler ekledim, ör. Sonuç olarak 1 dolar, 2 dolar ve 3 dolar. Terminalden hangi argümanlar geçirilecekse, belirtilen değişkenlerde saklanacaktır.







Bu dosyayı ./ komutunu ve ardından bazı argümanları kullanarak çalıştırmanız gerekir. Resimde görebileceğiniz gibi, argümanları geçtiğimde bir hata oluşuyor: İzin reddedildi. Bunun nedeni, bu dosyanın yürütme haklarına sahip olmamasıdır.

$./dosya adı argüman1 argüman2 argüman

Bu dosyaya yürütme haklarını vermek için sudo chmod komutunu kullanın.



$sudo chmod+x dosya adı

Şimdi, yukarıdaki aynı komutu kullanarak dosyayı tekrar çalıştırın. Bu sefer farklı argümanlar sundum. Yeni iletilen argümanların varsayılan değişkenlerde saklandığını göreceksiniz.

Kabuk Komut Dosyası Adını Argüman Olarak Geçirme:

Şimdi, aynı eski dosya file.sh dosyasını, varsayılan değişkenlerinde küçük bir değişiklikle kullanarak. Komut dosyasına gösterildiği gibi $0 değişkenini eklemelisiniz.

Aynı ./ shell script komutunu çalıştırırken, Shell betiğinizin adı, ör. ./filename argüman olarak $0 değişkeninde saklanacaktır.

Argümanları Dizi Olarak Değişkene Geçmek:

Aynı file.sh dosyasıyla başlayarak, eski komut dosyasına bazı fazladan satırlar eklemeniz gerekir. Dizi adında bir değişken tanımlayın. Kullanıcı tarafından bir dizi olarak girilen bağımsız değişkenleri depolayacak bir varsayılan değişken [e-posta korumalı] ekleyin. Bu argümanlar değişken dizisine ayrıştırılacaktır. Son satır, dizin numarasına göre sıralanmış değişken dizisinin tüm argümanlarını görüntüler.

./ kabuk betiğini yürütün. [email protected]'da bir dizi olarak saklanan argümanları veya değerleri değişken diziye ayrıştırılmış olarak göstereceğini, ancak ikinci echo ifadesinde kabuk komut dosyası adını göstermeyeceğini göreceksiniz. Aşağıdaki çıktıya sahip olacaksınız.

$./dosya adı argüman1 argüman2 argüman

Aynı dosyayı aynı komut dosyasıyla kullanın. Resimde görüldüğü gibi son satırdan ${array[3]} öğesini kaldırmanız yeterlidir.

./ komutunu çalıştırdıktan sonra, yukarıdaki örnektekine benzer bir çıktı göreceksiniz.

Aynı sonucu, bash betiğinin son satırını tek bir kelimeyle değiştirerek de alabilirsiniz. Echo ifadesine [email protected] eklemeniz yeterlidir ve bu değişken dizisinde bulunan argümanları gösterecektir.

Yani ./ komutunu tekrar çalıştırdığınızda aynı sonuçları alacaksınız.

Geçilen Toplam Bağımsız Değişken Sayısını Kontrol Edin:

Aksine, kullanıcı tarafından iletilen toplam argüman sayısını bilmek istiyorsanız, bunu da yapabilirsiniz. Bu amaçla, yankıda [email protected] öğesini $# ile değiştirmeniz yeterlidir.

Yine ./ komutunu çalıştırarak, şimdi komut dosyasına iletilen tüm argüman rakamını göreceksiniz. Bizim durumumuzda, değer olarak 3 argüman iletilir.

Argümanların Satır Satır Çıktısını Oluşturun:

Ana dizinde yeni bir test.sh dosyası oluşturun. Bash betiğini gösterildiği gibi ekleyin.

Şimdi aynı eski komutu farklı argümanlarla çalıştırın. İlk olarak, hatayı göreceksiniz: İzin reddedildi.

Bu dosyaya sudo ayrıcalıkları vermek için chmod komutunu çalıştırmanız gerekir. Bundan sonra ./ shell script komutunu tekrar çalıştırın. Ve argümanların satır satır sıralanmış çıktısını alacaksınız.

Değişkeni Argüman İndeks Numarası ile Sınırlayın:

Değişkeni indeks numarasını kullanarak sınırlamak istiyorsanız, bunu çok kolay yapabilirsiniz. $ işaretinden sonra küme parantezleri ekleyin ve diğer argümanlardan önce görüntülemek istediğiniz argüman indeks numarasını ekleyin.

Kullanıcılar tarafından sağlanan argümanlar limit değişkende sağlanan indeks sayısından küçükse, boş bir argüman değeri alırsınız. Örnek olarak 4 argüman sağladım, ancak görüntülenecek 05 argüman değerini verdim. Bu durumda, beşinci bağımsız değişken iletilmediği için değişken boş görüntülenecektir.

Ancak komutta eşit veya daha fazla sayıda argüman ilettiğinizde, sonuçta görüntülenen değeri gösterildiği gibi alacaksınız.

Belirli Değer Argümanlarını Kontrol Etme:

Ana dizininizde Check.sh adında yeni bir dosya oluşturun. Aşağıdaki resimde gösterildiği gibi aynı bash betiğini ekleyin. Bu betikte, kullanıcı tarafından iletilen argüman değerini saklamak için bir var değişkenimiz var. Ardından, argüman değerinin eşleşip eşleşmediğini kontrol edecek bir if ifademiz var. Argüman değeri parantez içinde verilen değerle eşleşirse, ilk yankı ifadesi yürütülür. Değer eşleşmezse, ikinci yankı ifadesi yürütülür.

Shell script komutunu çalıştırdığımızda hata verecektir. chmod komutunu kullanarak bu hatayı düzeltebiliriz.

Bundan sonra, belirli bir dosya için kabuk betiğini bir argüman değeriyle yürütün. Bizim durumumuzda, parantez içinde gösterilen değerle aynı olan bir argüman değeri olarak Aksa'yı sağladık. Böylece bash betiği ilk yankı ifadesini gösterildiği gibi yürütecektir.

Öte yandan, kabuk betiğinde farklı argüman değerleri sağlarsanız, diğer yankı ifadesini görüntüler. Burada, if ifadesinde sağlanan değerden farklı bir argüman değeri olarak Rimsha'yı ekledim. Böylece bash betiği ikinci yankı ifadesini yürütecektir.

Çözüm:

Umarım bu kılavuz, argümanları varsayılan değişkenlere nasıl ileteceğiniz, argüman değerini bir dizi olarak bir değişkene nasıl ileteceğiniz, geçirilen toplam argüman sayısını, argümanların satır satır çıktısını nasıl alacağınız, argümanı nasıl sınırlayacağınız konusunda güçlü bir kavrayışa sahip olmanıza yeterince yardımcı olmuştur. dizin numarasını kullanarak çıktı alma, belirli değer bağımsız değişkenini kontrol etme ve daha pek çok şey.