2013-10-21 2 views
7

इस स्क्रिप्ट में मैं इस if अभिव्यक्ति पाया:लिनक्स स्क्रिप्ट पर अभिव्यक्ति में -z मान का क्या अर्थ है?

if [ -z $1 ]; then 
    echo "Usage: createpkg.sh <rev package>" 
    exit 
else 
    CURRENT_VERSION=$1 
fi 

मेरे समस्या मैं नहीं मिल सकता है कि वास्तव में इस -z मूल्य का मतलब क्या है।

गूंज की सामग्री से मैं कटौती कर सकता हूं (शायद) $1 चर सॉफ़्टवेयर संस्करण का प्रतिनिधित्व करता है। और वह (शायद) -z एक शून्य मान है। इसलिए यदि मैं इसे पारित किए बिना स्क्रिप्ट निष्पादित करता हूं तो सॉफ़्टवेयर का संस्करण जिसे मैं पैक कर रहा हूं, मुझे स्क्रिप्ट निष्पादित करने के लिए सही प्रक्रिया मुद्रित करें।

लेकिन मुझे -z मान के वास्तविक अर्थ के बारे में निश्चित नहीं है।

+1

एक साइड नोट के रूप में, आपको शायद अपने चर को कोट्स में संलग्न करना चाहिए। 'अगर [-z" $ 1 "];'। मुझे सही कारण याद नहीं है (कोई?) लेकिन ऐसा नहीं करने से कुछ मामलों में अवांछित व्यवहार हो सकता है। – aspyct

+0

हां, @ एंटोनी_935, यदि चर में एक स्थान होता है तो यह समस्याग्रस्त हो जाएगा। यह 'अगर [-जो हैलो वर्ल्ड]' बन जाएगा जो 'बाश' समझने में सक्षम नहीं होगा। – fedorqui

उत्तर

14

man test से:

-z STRING 
      the length of STRING is zero 

तो हालत:

if [ -z $1 ]; then 

का अर्थ है "यदि चर $ 1 रिक्त है"। जहां $1 शायद स्क्रिप्ट का पहला पैरामीटर है: यदि आप इसे ./script <parameter1> <parameter2> जैसे निष्पादित करते हैं, तो $1=parameter1, $2=parameter2 और बहुत आगे।

+0

हां, मुझे लगता है कि $ 1 मेरी स्क्रिप्ट का firs पैरामीटर है लेकिन ... स्क्रिप्ट पैरामीटर निश्चित कहां है? मैं पैरामीटर को एक चर में कैसे जोड़ सकता हूं? – AndreaNobili

+2

आपको यह जांचना है कि स्क्रिप्ट कैसे निष्पादित की जाती है। यदि इसका नाम "myscript.sh" है तो कहीं आपको कॉल './myscript.sh param1 param2 ...' या '/ bin/sh /path/to/myscript.sh param1 param2 ...' – fedorqui

+0

I लगता है कि स्क्रिप्ट को इस कमांड के साथ खोल में निष्पादित किया गया है: createpkg.sh 2 (जो सॉफ़वेयर के 2 संस्करण का पैकेज बनाता है) तो $ 1 चर स्वचालित रूप से पहले पैरामीटर मान (इस मामले में: 2) से जुड़ा हुआ है? – AndreaNobili

3

help test बताता है:

String operators: 

    -z STRING  True if string is empty. 

अपने उदाहरण में, स्क्रिप्ट Usage: createpkg.sh <rev package> और बाहर निकलने प्रिंट होगा अगर एक तर्क की आपूर्ति नहीं की गई थी।

+0

शायद मेरा एक बेवकूफ सवाल है लेकिन: सहायता परीक्षण क्या है? – AndreaNobili

+0

यह एक शेल अंतर्निहित है। सत्यापित करने के लिए 'टाइप टेस्ट' टाइप करें! – devnull

संबंधित मुद्दे