2013-05-01 3 views
15

मेरे पास एक ऐसी स्क्रिप्ट है जिसमें कई इनपुट फ़ाइलें हैं, आम तौर पर ये मानक स्थान पर संग्रहीत डिफ़ॉल्ट हैं और स्क्रिप्ट द्वारा बुलाए जाते हैं।बाश कमांड लाइन तर्क चर के लिए डिफ़ॉल्ट को प्रतिस्थापित कर रहे हैं

हालांकि कभी-कभी इसे परिवर्तित इनपुट के साथ चलाने के लिए आवश्यक है।

स्क्रिप्ट में मैंने वर्तमान में 3 चर $ ए $ बी और $ सी कहा है, अब मैं इसे एक डिफ़ॉल्ट डिफ़ॉल्ट $ बी के साथ चलाने के लिए चाहता हूं, कल मैं इसे एक डिफ़ॉल्ट डिफ़ॉल्ट $ ए और $ बी के साथ चलाने के लिए चाहता हूं ।

मैं कैसे आदेश पंक्ति तर्क पार्स करने के लिए पर चारों ओर एक नज़र पड़ा है: How do I parse command line arguments in Bash?

लेकिन मैं कमांड लाइन से कुछ निर्धारित समय से कुछ aruguments होने से निपटने के लिए कैसे यकीन नहीं है?

मैं अपने ही सवाल का जवाब देने के लिए पर्याप्त प्रतिनिधि है न लेकिन मैं एक समाधान है:

https://stackoverflow.com/a/4610469/2339623

#!/bin/bash 
a=input1 
b=input2 
c=input3 
while getopts "a:b:c:" flag 
do 
    case $flag in 
     a) a=$OPTARG;; 
     b) b=$OPTARG;; 
     c) c=$OPTARG;; 
    esac 
done 

क्षमा याचना मैं स्पष्ट रूप से के रूप में अच्छी तरह से के रूप में मैंने सोचा था कि खोज नहीं की थी ...

+4

आप इस उद्देश्य के लिए 'getopts' का उपयोग कर सकते हैं। कई ट्यूटोरियल हैं, जैसे http://aplawrence.com/Unix/getopts.html कुछ शुरुआत के लिए उपयोगी हो सकता है। – fedorqui

+0

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

उत्तर

6

डिफ़ॉल्ट मानों को ओवरराइट करने के लिए कमांड लाइन तर्कों का उपयोग करने के बजाय, आप स्क्रिप्ट के बाहर चर सेट भी कर सकते हैं। उदाहरण के लिए निम्न स्क्रिप्ट foo=54 /tmp/foobar या bar=/var/tmp /tmp/foobar साथ लागू किया जा सकता है:

#! /bin/bash 
: ${foo:=42} 
: ${bar:=/tmp} 
echo "foo=$foo bar=$bar" 
+0

मैंने इस बारे में सोचा, हालांकि जिस स्क्रिप्ट को मैं संपादित कर रहा हूं वह उन लोगों के लिए है जो मेरे से भी कम परिचितता रखते हैं। मैं इसे यथासंभव सरल बनाना चाहता हूं, और मुझे लगता है कि कमांड लाइन तर्क कुछ ऐसे हैं जो वे अधिक परिचित हैं। – Lanrest

35

आप इसे इस तरह से कर सकते हैं, बैश आदमी पेज

#! /bin/bash 

value=${1:-the default value} 
echo value=$value 

कमांड लाइन पर में Shell Parameter Expansion देखें:

$ ./myscript.sh 
value=the default value 
$ ./myscript.sh foobar 
value=foobar 
संबंधित मुद्दे