अगर कोई कमांड प्रदान नहीं की जाती है, तो कैसे जांचें?


73

यदि आप $*खाली हैं तो आप कैसे जांच करेंगे ? दूसरे शब्दों में, यह कैसे जांचा जाए कि क्या कमांड के लिए कोई तर्क प्रदान नहीं किए गए थे?

जवाबों:


110

यह जांचने के लिए कि क्या कमांड के लिए कोई तर्क नहीं दिए गए हैं, $#चर का मान चेक करें ,

if [ $# -eq 0 ]; then
    echo "No arguments provided"
    exit 1
fi

यदि आप उपयोग करना चाहते हैं $*( बेहतर नहीं ) तो,

if [ "$*" == "" ]; then
    echo "No arguments provided"
    exit 1
fi

कुछ स्पष्टीकरण:

दूसरा दृष्टिकोण बेहतर नहीं है क्योंकि स्थितीय पैरामीटर विस्तार में *एक से शुरू होकर स्थितीय मापदंडों तक फैला हुआ है। जब विस्तार दोहरे उद्धरण चिह्नों के भीतर होता है, तो यह IFS विशेष चर के पहले चरित्र द्वारा अलग किए गए प्रत्येक पैरामीटर के मूल्य के साथ एक शब्द तक फैलता है। इसका मतलब है कि एक स्ट्रिंग का निर्माण किया जाता है। इसलिए अतिरिक्त उपरि है।

दूसरी ओर #स्थितीय मापदंडों की संख्या तक फैलता है।

उदाहरण:

$ command param1 param2

यहाँ,

का मूल्य $#2 और मूल्य की $*स्ट्रिंग "param1 param2" है (उद्धरण के बिना), अगर आईएफएस सेट नहीं की जाती। क्योंकि अगर IFS परेशान है, तो पैरामीटर रिक्त स्थान से अलग हो जाते हैं

अधिक विवरण man bashऔर विशेष पैरामीटर नाम के विषय को पढ़ने के लिए


5
या if ! (($#)); ..., या if (($# == 0)); ..., या if [ $# -eq 0 ]; ..., या ! (($#)) && ..., या(($#)) || ...
nicerobot

7
[ $# -eq 0 ]सबसे सामान्य रूप IME है। ऐसे किनारे मामले हैं जहां "$#"खाली हो सकते हैं: यदि कोई एकल तर्क है जो खाली है, या यदि कई खाली तर्क हैं और $IFSखाली है।
गिल्स

1
"$*"अभिव्यक्ति भी करने के लिए मूल्यांकन करेंगे "", तो केवल एक ही ""पैरामीटर पारित किया गया था। लेकिन ज्यादातर समय आप किसी भी तरह की परवाह नहीं करेंगे।
मैनटवर्क

मेरा मानना ​​है कि यह == के बजाय == होना चाहिए ... वर्तमान में मुझे एक अप्रत्याशित ऑपरेटर त्रुटि मिल रही है, और समस्या को ठीक करने के लिए = बदल रहा है।
वास्तव

@Charlotte इसका मतलब है कि आप उपयोग नहीं कर रहे हैं bash। आप shस्क्रिप्ट को निष्पादित करने के लिए उपयोग कर रहे हैं । AFAIK ==केवल में मान्य है bash
सचिन दिवेकर

14

यदि आप केवल एक विशेष तर्क याद कर रहे हैं, तो आप को रोकने में रुचि रखते हैं, पैरामीटर प्रतिस्थापन महान है:

#!/bin/bash
# usage-message.sh

: ${1?"Usage: $0 ARGUMENT"}
#  Script exits here if command-line parameter absent,
#+ with following error message.
#    usage-message.sh: 1: Usage: usage-message.sh ARGUMENT

-4

यह एक ऐसा तरीका है जिससे आप जान सकते हैं कि आपके पास कोई तर्क है

NO_ARGS=0
if [ $# -eq "$NO_ARGS" ]; then
    {do something}
fi

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