bash - बैश खोल स्क्रिप्ट में इनपुट तर्क के अस्तित्व की जांच करें




shell (6)

इस तरह से प्रदर्शित करना बेहतर है

if [[ $# -eq 0 ]] ; then
    echo 'some message'
    exit 1
fi

यदि आपके पास बहुत कम तर्क हैं तो आपको सामान्य रूप से बाहर निकलने की आवश्यकता होती है।

मुझे इनपुट तर्क के अस्तित्व की जांच करने की आवश्यकता है। मेरे पास निम्न स्क्रिप्ट है:

if [ "$1" -gt "-1" ]
  then echo hi
fi

मुझे मिला

[: : integer expression expected

यह देखने के लिए कि क्या यह मौजूद है, मैं पहले इनपुट तर्क 1 को कैसे देखूं?


एक छोटे अनुस्मारक के रूप में, बैश में संख्यात्मक परीक्षण ऑपरेटर केवल पूर्णांक ( -eq , -lt , -ge , आदि) पर काम करते हैं।

मुझे यह सुनिश्चित करना अच्छा लगता है कि मेरे $ vars इनट्स हैं

var=$(( var + 0 ))

परीक्षण करने से पहले, बस "[: पूर्णांक तर्क आवश्यक" त्रुटि के खिलाफ बचाव करने के लिए।


मैं अक्सर सरल स्क्रिप्ट के लिए इस स्निपेट का उपयोग करता हूं:

#!/bin/bash

if [ -z "$1" ]; then
    echo -e "\nPlease call '$0 <argument>' to run this command!\n"
    exit 1
fi

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

#!/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

कुछ मामलों में आपको यह जांचने की आवश्यकता है कि क्या उपयोगकर्ता स्क्रिप्ट को तर्क दे रहा है और यदि नहीं, तो डिफ़ॉल्ट मान पर वापस आना चाहिए। नीचे लिपि में पसंद है:

scale=${2:-1}
emulator @$1 -scale $scale

यहां यदि उपयोगकर्ता दूसरे पैरामीटर के रूप में scale पास नहीं किया है, तो मैं एंड्रॉइड एमुलेटर को डिफ़ॉल्ट रूप से -scale 1 साथ लॉन्च करता हूं। ${varname:-word} एक विस्तार ऑपरेटर है। अन्य विस्तार ऑपरेटर भी हैं:

  • ${varname:=word} जो word मान वापस करने के बजाय अपरिभाषित varname सेट करता है;
  • ${varname:?message} जो या तो varname लौटाता है यदि यह परिभाषित किया गया है और यह शून्य नहीं है या message प्रिंट करता है और स्क्रिप्ट को बंद करता है (पहले उदाहरण की तरह);
  • ${varname:+word} जो word केवल तभी देता word जब varname परिभाषित किया गया हो और शून्य न हो; अन्यथा शून्य वापस आती है।

यह है:

if [ $# -eq 0 ]
  then
    echo "No arguments supplied"
fi

$# चर आपको स्क्रिप्ट पारित इनपुट तर्कों की संख्या बताएगा।

या आप जांच सकते हैं कि कोई तर्क एक खाली स्ट्रिंग है या नहीं:

if [ -z "$1" ]
  then
    echo "No argument supplied"
fi

-z स्विच परीक्षण करेगा यदि "$ 1" का विस्तार एक शून्य स्ट्रिंग है या नहीं। यदि यह एक शून्य स्ट्रिंग है तो शरीर को निष्पादित किया जाता है।


स्क्रिप्ट को तर्क पारित किए जाने का पता लगाने का एक और तरीका:

((!$#)) && echo No arguments supplied!

ध्यान दें कि (( expr )) शैल अंकगणितीय के नियमों के अनुसार अभिव्यक्ति का मूल्यांकन करने का कारण बनता है।

किसी भी तर्क की अनुपस्थिति में बाहर निकलने के लिए, कोई कह सकता है:

((!$#)) && echo No arguments supplied! && exit 1

उपर्युक्त कहने का एक और (समान) तरीका होगा:

let $# || echo No arguments supplied

let $# || { echo No arguments supplied; exit 1; }  # Exit if no arguments!

help let हैं help let :

let: let arg [arg ...]

  Evaluate arithmetic expressions.

  ...

  Exit Status:
  If the last ARG evaluates to 0, let returns 1; let returns 0 otherwise.





shell