2010-06-25 24 views
6

मेरे पास एक मछली खोल स्क्रिप्ट है जिसका डिफ़ॉल्ट व्यवहार पूरा होने पर एक ईमेल भेजना है। मैं कमांड लाइन से nomail तर्क का जवाब देने के लिए इसे संशोधित करना चाहता हूं। तो, उदाहरण के लिए, स्क्रिप्ट सामान्य रूप से चल एक ई-मेल का उत्पादन होगा:एक वैकल्पिक तर्क के साथ एक मछली शेल स्क्रिप्ट लिखना

michaelmichael: ~/bin/myscript

लेकिन अगर nomail स्विच के साथ चलाने के लिए, यह पुष्टिकरण ईमेल नहीं भेजना होगा:

michaelmichael: ~/bin/myscript nomail

हैं मैं nomail तर्क के साथ स्क्रिप्ट चलाता हूं, यह ठीक चलता है। nomail के बिना, अपरिभाषित है और यह एक त्रुटि फेंकता है। मैंने मछली खोल दस्तावेज को खराब कर दिया है, लेकिन ऐसा कुछ भी नहीं लगता है जो काम करेगा। यहाँ मैं क्या है है अब तक

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

इस निम्न त्रुटि फेंकता चल रहा है:

switch: Expected exactly one argument, got 0

जाहिर है यह उम्मीद एक तर्क, मैं सिर्फ वाक्य रचना यह कोई तर्क को स्वीकार करने के लिए कह रही है पता नहीं है , या अगर यह मौजूद है।

मुझे लगता है कि यह बहुत बुनियादी है, लेकिन मुझे शैल स्क्रिप्टिंग बहुत अच्छी तरह से समझ में नहीं आती है।

+0

यह आप विशिष्ट त्रुटि संदेश पोस्ट करता है, तो अधिक उपयोगी है। –

+0

जोड़ा गया। उसके लिए माफ़ करना। – michaelmichael

उत्तर

7

इस तरह से अपनी switch बयान लपेटें:

if set -q argv 
    ... 
end 

इसके अलावा, मुझे लगता है कि अपने डिफ़ॉल्ट मामले case '*' होना चाहिए।

+0

यह काम करता है (हालांकि 'नामांकन' को डिफ़ॉल्ट मामला होना चाहिए, न कि '*')। यहां मैंने इसे बदल दिया है: 'अगर set -q argv; $ argv स्विच करें; केस नामांकन; इको मेल नहीं भेज रहा है; मामला '*'; अनिर्दिष्ट स्विच गूंजें; समाप्त; अन्य; मेल भेजने इको .; end' – michaelmichael

+0

@michaelmichael: डिफ़ॉल्ट रूप से, मेरा मतलब है 'स्विच' कथन का डिफ़ॉल्ट जिसे निष्पादित किया गया है यदि निर्दिष्ट मामलों में से कोई भी मेल नहीं खाता है। वास्तव में आपकी टिप्पणी में कोड कैसा है। क्षमा करें, मैंने आपके मूल कोड को गलत तरीके से पढ़ा है और "???" जैसे कि यह 'स्विच' डिफ़ॉल्ट होने का इरादा था। –

5

आप स्विच कथन का उपयोग पसंद करते हैं यह भी संभव है:

switch (echo $argv) 
    case nomail 
    ## Perform normal script functions 
    case '*' 
    ## Perform normal script functions 
    mailx -s "Script Done!" 
end 
संबंधित मुद्दे