2010-06-25 2 views
6

Varsayılan davranışı tamamlandığında bir e-posta göndermek olan bir balık kabuk betiğiyim. Komut satırından bir nomail argümanına yanıt vermek için değiştirmek istiyorum. Yani, örneğin, normalde komut dosyası çalıştıran bir e-posta üretecektir:İsteğe Bağlı Bir Bağımsız Değişkenle Balık Kabuğu Komut Dosyası Yazma

michaelmichael: ~/bin/myscript

Ama nomail anahtarı ile çalıştırırsanız, bu onay e-postası göndermek olmaz:

michaelmichael: ~/bin/myscript nomail

ise Komut dosyasını nomail argümanıyla çalıştırıyorum, iyi çalışıyor. nomail olmadan, tanımsızdır ve bir hata verir. Balık kabuğu belgelerini araştırdım ama işe yarayacak bir şey bulamıyorum. İşte ne var şu ana kadar

switch $argv 
    case nomail 
    ## Perform normal script functions 
    case ??? 
    ## Perform normal script functions 
    mailx -s "Script Done!" 
end 

bu şu hatayı atar Koşu:

Açıkçası

switch: Expected exactly one argument, got 0

bir argüman, sadece tartışacak hiçbir kabul edecek şekilde anlatmak için sözdizimi bilmiyorum beklediğini veya varsa bir tane.

Sanırım bu oldukça basit, ama kabuk komut dosyasını çok iyi anlamıyorum.

+0

Daha yararlı olur. –

+0

eklendi. bunun için üzgünüm. – michaelmichael

cevap

7

bu gibi switch deyimi sarın:

if set -q argv 
    ... 
end 

Ayrıca, varsayılan durumda case '*' olması gerektiğini düşünüyorum. Eğer switch deyimi kullanmayı tercih ediyorsanız

+0

Bu çalıştı ('nomail' varsayılan durumda olmak zorunda olsa da, '*'). İşte değiştirdiğim şey: eğer set -q argv; $ argv; vaka nomail; echo Posta göndermiyor .; durumda '*'; echo Unspecified switch .; son; Başka; posta gönderme echo .; end – michaelmichael

+0

@michaelmichael: Varsayılan olarak, belirtilen durumların hiçbiri eşleşmezse çalıştırılan 'switch' ifadesinin varsayılanı kastediyorum. Yorumunuzdaki kodu tam olarak nasıl aldınız. Özür dilerim, orijinal kodunuzu yanlış anladım ve "???" "switch" varsayılanı olması amaçlanmış gibi. –

5

o da mümkün: Eğer belirli bir hata mesajı göndermek eğer

switch (echo $argv) 
    case nomail 
    ## Perform normal script functions 
    case '*' 
    ## Perform normal script functions 
    mailx -s "Script Done!" 
end