Bir Bash Komut Dosyasına Argümanlar Nasıl Geçilir?
Komut satırından komut dosyası çağrıldığında belirtilen bağımsız değişkenleri alması için bir Bash komut dosyası yazın. Bir komut dosyasının giriş parametrelerinin değerlerine bağlı olarak biraz farklı bir işlev gerçekleştirmesi gerektiğinde bu yöntemi kullanın. argümanlar.

Cankurtaran / Ran Zheng
Bash Komut Dosyasında Bağımsız Değişkenleri Geçirme Örneği
adlı bir komut dosyası geliştirdiyseniz stats.sh bir dosyadaki sözcükleri sayarsa, işlenecek tüm dosyalar için aynı komut dosyasının kullanılabilmesi için dosya adını bir argüman olarak iletmek en iyisidir. Örneğin, işlenecek dosyanın adı şarkı listesi, komut satırına şunu girin:
sh istatistik.sh şarkı listesi
Değişkenler kullanılarak bir komut dosyası içinde argümanlara erişilir $1, $2, $3, ve bunun gibi. Değişken $1 ilk argümana atıfta bulunur, $2 ikinci argümana ve $3 üçüncü argümana. Örneğin, komut dosyasında:
DOSYA1=$1
wc $DOSYA1
İlk argümanın değerine açıklayıcı bir adla bir değişken atayın ($1) ve ardından sözcük sayısı yardımcı programını çağırın (tuvalet) değişken üzerinde $DOSYA1 ya da başka ne yapmak isteyebilirsiniz.
Değişken sayıda argümana ihtiyacınız varsa, $@ tüm giriş parametrelerinin bir dizisi olan değişken. Bu prosedür bir döngü için aşağıdaki örnekte gösterildiği gibi, her birini yinelemeli olarak işlemek için:
"$@" içindeki DOSYA1 için
yapmak
wc $DOSYA1
tamamlamak
Komut satırındaki argümanlarla bu betiğin nasıl çağrılacağına dair bir örnek:
sh istatistik.sh şarkı listesi1 şarkı listesi2 şarkı listesi3
Bir argüman boşluk içeriyorsa, onu tek tırnak içine alın. Örneğin:
sh stats.sh 'şarkı listesi 1' 'şarkı listesi 2' 'şarkı listesi 3'
Bayraklar Yöntemi
Argümanların bayraklar kullanılarak herhangi bir sırada iletilebilmesi için sıklıkla bir komut dosyası yazılır. Flags yöntemi ile bazı argümanlar isteğe bağlı hale getirilebilir.
Örneğin, belirtilen parametrelere dayalı olarak bir veritabanından bilgi alan bir komut dosyası yazın. Kullanıcı adı, tarih, ve ürün, ve belirtilen biçimde bir rapor oluşturur. Script çağrıldığında bu parametrelerin iletilmesi için scriptin öyle bir şekilde yazılması gerekir. Şöyle görünebilir:
makereport -u jsmith -p defterleri -d 10-20-2011 -f pdf
Bash, bu işlevi aşağıdakilerle sağlar: getopts işlev. Yukarıdaki örnek için şunu kullanın: getopts aşağıdaki gibi:
while getopts u: d: p: f: seçenek
yapmak
"${option}" durumu
içinde
u) KULLANICI=${OPTARG};;
d) TARİH=${OPTARG};;
p) ÜRÜN=${OPTARG};;
f) BİÇİM=${OPTARG};;
esac
tamamlamak
Bu, aşağıdakileri kullanan bir while döngüsüdür. getopts işlev ve sözde optstring-bu durumda u: d: p: f:- argümanlar arasında yineleme yapmak için. NS süre döngü, argümanları iletmek için kullanılan bayrakları içeren optstring boyunca yürür ve bu bayrak için sağlanan argüman değerini değişkene atar. seçenek. NS durum ifadesi daha sonra değişkenin değerini atar seçenek tüm argümanlar okunduktan sonra kullanılan global bir değişkene.
Kolonların Anlamları
Optstring'deki iki nokta üst üste işareti, karşılık gelen bayraklar için değerlerin gerekli olduğu anlamına gelir. Yukarıdaki örnekte u: d: p: f:, tüm bayrakların ardından iki nokta üst üste gelir. Bu, tüm bayrakların bir değere ihtiyacı olduğu anlamına gelir. Örneğin, NS ve F bayrakların bir değeri olması beklenmiyordu, u: dp: f optstring olurdu.
Başlangıç kolonu, getopt'ları 'sessiz raporlama moduna' geçirir. Komut dosyasında tamamen hata yapmak yerine, beklenmeyen herhangi bir argüman? seçeneği ve bunu gerektiği gibi arayabilir veya halledebilirsiniz. Optstring'de ilk iki nokta üst üste işareti olmadan, terminal bir hata görüntüler. Örneğin, yukarıdan kelimeleri sayan komut dosyasına sahibim. "stats.sh -f filename" gibi bir sözdizimi bekliyor. İki nokta üst üste olmadan, "stats.sh -h"yi denersem şunu elde ederim:
istatistikler.sh -h
stats.sh: geçersiz seçenek -- h
Oysa, iki nokta üst üste ile, betiğime böyle bir şey bekleyen bir satır koyabilirim, örneğin - ?) echo "No -${OPTARG} argümanı bulunamadı.";;. Bu daha sonra beklenmedik girişi yakalamama ve işlememe izin veriyor (bu durumda kendi hata mesajımı vererek).
istatistikler.sh -h
-h bağımsız değişkeni bulunamadı.
Öncesinde bir bayrak olmayan argümanlar, tarafından yoksayılır. getopts. Komut dosyası çağrıldığında optstring'de belirtilen bayraklar sağlanmazsa, bu durumu kodunuzda özel olarak ele almadığınız sürece hiçbir şey olmaz. Tarafından işlenmeyen herhangi bir argüman getops hala normal ile yakalanabilir $1, $2, ve $3 değişkenler.