सही संख्या में तर्कों के लिए जाँच


147

मैं सही संख्या में तर्क (एक तर्क) की जांच कैसे करूं। अगर कोई सही तर्क पास किए बिना स्क्रिप्ट को लागू करने की कोशिश करता है, और यह सुनिश्चित करने के लिए जाँच करता है कि कमांड लाइन तर्क वास्तव में मौजूद है और एक निर्देशिका है।


5
@ डैनियल shellका मतलब है/bin/sh
रूएल

जवाबों:


215
#!/bin/sh
if [ "$#" -ne 1 ] || ! [ -d "$1" ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi

अनुवाद: यदि तर्कों की संख्या (संख्यात्मक) 1 के बराबर नहीं है या पहला तर्क निर्देशिका नहीं है, तो स्ट्रैडर का आउटपुट उपयोग और विफलता स्थिति कोड के साथ बाहर निकलना।

अधिक अनुकूल त्रुटि रिपोर्टिंग:

#!/bin/sh
if [ "$#" -ne 1 ]; then
  echo "Usage: $0 DIRECTORY" >&2
  exit 1
fi
if ! [ -e "$1" ]; then
  echo "$1 not found" >&2
  exit 1
fi
if ! [ -d "$1" ]; then
  echo "$1 not a directory" >&2
  exit 1
fi

1
@Andrew K: यह किस लाइन पर रिपोर्टिंग कर रहा है? यदि यह "इफ" लाइन है, तो दो क्लॉस में से किसी एक को काटकर if [ "$#" -ne 1 ] ; thenया तो यह if ! [ -d "$1" ]; thenदेखने की कोशिश करें कि कौन सा क्लॉज परेशानी पैदा कर रहा है।
लॉरेंस गोंसाल्वेस

मुझे लगा कि आपका धन्यवाद। यदि फ़ाइल का नाम मौजूद नहीं है तो कैसे होगा?
एंड्रयू के

जहाँ तक -dसंबंध नहीं है, वहां == का कोई निर्देशक नहीं है । यदि आप एक अलग चेक जोड़ना चाहते हैं तो आप -eअस्तित्व के लिए जाँच कर सकते हैं ।
लारेंस गोन्साल्वेस

अगर [-ई "$ 1"] तो गूंज "$ 1: ऐसी कोई निर्देशिका नहीं है" बाहर निकलें 1 फाई
एंड्रयू K

@Andrew K: आप चेक को पलटना चाहते हैं। -eयदि फ़ाइल मौजूद है तो सही है। मैंने जवाब देने के लिए अधिक अनुकूल त्रुटि रिपोर्टिंग जोड़ी।
लारेंस गोन्साल्वेस

22

बिल्ली लिपि

    var1=$1
    var2=$2
    if [ "$#" -eq 2 ]
    then
            if [ -d $var1 ]
            then
            echo directory ${var1} exist
            else
            echo Directory ${var1} Does not exists
            fi
            if [ -d $var2 ]
            then
            echo directory ${var2} exist
            else
            echo Directory ${var2} Does not exists
            fi
    else
    echo "Arguments are not equals to 2"
    exit 1
    fi

इसे नीचे की तरह निष्पादित करें -

./script.sh directory1 directory2

आउटपुट जैसा होगा -

directory1 exit
directory2 Does not exists

14

आप कमांड लाइन में पास किए गए तर्कों की कुल संख्या की जांच कर सकते हैं " $#" उदाहरण के लिए कहो मेरी शेल स्क्रिप्ट का नाम हैhello.sh

sh hello.sh hello-world
# I am passing hello-world as argument in command line which will b considered as 1 argument 
if [ $# -eq 1 ] 
then
    echo $1
else
    echo "invalid argument please pass only one argument "
fi

आउटपुट होगा hello-world

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.