Bir Bash-Script Argümanlar Nasıl Geçilir

Komutlar, sözdizimi ve örnekler

Komut satırından komut dosyası çağrıldığında belirtilen argümanları alacak şekilde bir bash komut dosyası yazabilirsiniz. Bu yöntem, bir betiğin giriş parametrelerinin (argümanlar) değerlerine bağlı olarak biraz farklı bir işlev gerçekleştirmesi gerektiğinde kullanılır.

Örneğin, bir dosya üzerinde belirli bir işlemi gerçekleştiren, sözcüklerini sayma gibi "stats.sh" adlı bir komut dosyanız olabilir. Bu komut dosyasını birçok dosya üzerinde kullanabilmek istiyorsanız, dosya adını argüman olarak iletmeniz en iyisidir, böylece işlenecek tüm dosyalar için aynı betiği kullanabilirsiniz. Örneğin, işlenecek dosyanın adı "şarkı listesi" ise, aşağıdaki komut satırını girersiniz:

sh stats.sh şarkı listesi

Argümanlar, $ 1, $ 2, $ 3, vb. Değişkenlerini kullanarak bir komut dosyasında erişilir. Burada 1 $ ilk argümana, ikinci argümana 2 $, vb. Atıfta bulunur. Bu, aşağıdaki örnekte gösterilmiştir:

FILE1 = 1 $ wc $ FILE1

Okunabilirlik için, ilk argümanın değerine açıklayıcı bir adla bir değişken atayın ($ 1) ve sonra bu değişkendeki ($ FILE1) kelime sayısı yardımcı programını ( wc ) arayın.

Değişken sayıda bağımsız değişkeniniz varsa, tüm giriş parametrelerinin bir dizisi olan "$ @" değişkenini kullanabilirsiniz. Bu, aşağıdaki örnekte gösterildiği gibi her birini yinelemeli olarak işlemek için bir for döngüsü kullanabileceğiniz anlamına gelir:

"$ @" dosyasındaki FILE1 için wc $ FILE1 yapılır

Bu komut dosyasının komut satırından argümanlarla nasıl çağrılacağına dair bir örnek:

sh stats.sh şarkı listesi1 şarkı listesi2 şarkı listesi3

Bir argümanın boşlukları varsa, bunu tek tırnak içine almanız gerekir. Örneğin:

sh stats.sh 'şarkı listesi 1' 'şarkı listesi 2' 'şarkı listesi 3'

Sıklıkla, kullanıcı komutları bayrak kullanarak herhangi bir sıraya göre iletebilecek şekilde bir komut dosyası yazılır. Bayraklar yöntemiyle, isteğe bağlı bazı argümanları da yapabilirsiniz.

"Kullanıcı adı", "tarih" ve "ürün" gibi belirli parametrelere dayanan bir veri tabanından bilgi alan ve belirtilen "biçim" de bir rapor oluşturan bir komut dosyanız olduğunu varsayalım. Artık senaryonuzu yazmak istiyorsun, böylece senaryo çağrıldığında bu parametrelerden geçebilirsin. Şuna benzeyebilir:

makereport -u jsmith -p notebooklar -d 10-20-2011 -f pdf

Bash bu işlevselliği "getopts" fonksiyonu ile sağlar. Yukarıdaki örnekte, getopt'ları aşağıdaki gibi kullanabilirsiniz:

Bu, "getopts" işlevini kullanan ve "optstring" olarak adlandırılan, "u: d: p: f:" olarak adlandırılan argümanları tekrarlamak için kullanılan bir döngüdür. While-döngüsü argümanları geçmek için kullanılabilecek bayrakları içeren optstring üzerinden ilerler ve bu seçenek için "seçenek" değişkenine verilen argüman değerini atar. Durum bildirimi daha sonra "seçenek" değişkeninin değerini, tüm argümanlar okunduktan sonra kullanılabilecek genel bir değişkene atar.

Optstring'deki kolonlar, karşılık gelen bayraklar için değerlerin gerekli olduğu anlamına gelir. Yukarıdaki örnekte tüm bayraklar bir iki nokta üst üste geliyor: "u: d: p: f:". Bu, tüm bayrakların bir değere ihtiyacı olduğu anlamına gelir. Örneğin, "d" ve "f" bayraklarının bir değere sahip olması beklenmediyse, optstring "u: dp: f" olacaktır.

Optstring'in başlangıcındaki bir kolon, örneğin ": u: d: p: f:", tamamen farklı bir anlama sahiptir. Optstring'de temsil edilmeyen bayrakları işlemenizi sağlar. Bu durumda "option" değişkeninin değeri "?" Olarak ayarlanır. ve "OPTARG" değeri beklenmedik bayrağa ayarlanır. Hata kullanıcı bildiren uygun bir hata mesajı görüntülemenizi sağlar.

Bir bayrakla öncel olmayan argümanlar, getopts tarafından yok sayılır. Komut dosyası çağrıldığında optstring'de belirtilen bayraklar verilmezse, kodunuzda bu davayı ele almadığınız sürece hiçbir şey olmaz. Getops tarafından ele alınmayan tüm argümanlar, normal 1 $, $ 2, vb. Değişkenler ile yakalanabilir.