शेल स्क्रिप्ट अगर सिंटैक्स त्रुटि


1
if ($(ipcs|grep test|wc -l)=630); then

echo "Shared Memory check passed"
fi

मुझे नीचे त्रुटि मिली:

./Test1: line 25: 636=630: command not found

जवाबों:


7

कुछ सिंटैक्स त्रुटियां

बैश में 'अगर' निर्माण का आधार यह है:

if [ expression ];
then
    # code if 'expression' is true.
fi

यहाँ सही संस्करण है

if [ "$(ipcs|grep test|wc -l)" -eq 630 ]; then 
    echo "Shared Memory check passed"
fi

या के साथ [[…]]douple उद्धरण के बिना चर मूल्यों के शब्द विभाजन को रोकता है

if [[ $(ipcs|grep test|wc -l) -eq 630 ]]; then 
    echo "Shared Memory check passed"
fi

या और अच्छा

if [[ $(ipcs|grep -c test) -eq 630 ]]; then 
    echo "Shared Memory check passed"
fi

1
कृपया निपिकरी का बहाना करें, लेकिन कथन [के वाक्य-विन्यास से कोई संबंध नहीं है if/usr/bin/[आदेश और उसके अंतर्निहित बराबर [किसी अन्य की तरह सिर्फ आज्ञा कर रहे हैं।
zwets 22:24

1
फिर भी; 1 से [[अधिक के वर्चस्व पर लगातार हथौड़ा [
चलाने के लिए

$()किसी भी मामले में अंतरिक्ष में विभाजित नहीं होता है, इसे रिक्त स्थान में संलग्न करने की कोई आवश्यकता नहीं है। इस मामले में। यदि आउटपुट खाली हो सकता है, तो
souser12345

6

अनिवार्य रूप से ifसशर्त निर्माण के कई तरीके हैं bash; एक एबी के जवाब में उल्लिखित है; एक और, जिसकी संभावना है कि आप जिसको उपयोग करने की कोशिश कर रहे हैं, उसमें डबल कोष्ठकों का उपयोग करना शामिल है, जो कि bashसी-स्टाइल तरीके से अभिव्यक्ति / चर को हेरफेर करने का एक तरीका है, और जो इसकी परिभाषा के अनुसार, डबल कोष्ठक की आवश्यकता है काम करने के लिए आदेश (मन है कि यह तार की तुलना के लिए काम नहीं करेगा):

if (($(ipcs|grep test|wc -l)==630)); then
    echo "Shared Memory check passed"
fi

"द डबल-कोष्ठक निर्माण" पर अधिक जानकारी


यह मेरे लिए नया है, आपको धन्यवाद और +1
AB

@AB इसके बारे में सबसे अच्छी बात आप भी सी-शैली कर सकते हैं forछोरों, whileलूप और के रूप में आप सी में होगा incrementing चर: for((i=0; i<3; i++)); do [...]; done, i=0; while((i<3)); do [...]; doneऔर ((i++))। तुम्हारा पहले से ही स्पष्ट रूप से उत्कीर्ण
कोस

मुझे कम आंका गया :)
AB

1
kos, हालांकि एक पकड़
है..यह

1
आप भूल गए ए =। सही वाक्य विन्यास है==
AB

3

एक और विकल्प जोड़ने के लिए: आप testबिल्ट-इन का उपयोग करके पूरी तरह से वर्ग कोष्ठक और कोष्ठक के साथ कर सकते हैं :

if test $(ipcs|grep test|wc -l) -eq 630; then 
    echo "Shared Memory check passed"
fi

[बिल्ट-इन अनिवार्य रूप से करने के लिए एक अन्य नाम है testमें निर्मित, सिवाय इसके कि यह एक अतिरिक्त तर्क लेता है: ]

इससे यह भी पता चलता [है कि यह ifबयान का हिस्सा नहीं है । बिल्ट-इन [और बाइनरी /usr/bin/[किसी भी अन्य, जैसे lsया grep

ifबयान के बीच कमांड (रों) निष्पादित करता है ifऔर then। यदि अंतिम एक से बाहर निकलें कोड है 0, तो यह निम्नलिखित कमांड को निष्पादित करता है then। यदि इसके तर्क - जो इसे कुछ वाक्यविन्यास नियमों के अनुसार एक तार्किक अभिव्यक्ति के रूप में व्याख्या करते हैं - सत्य का मूल्यांकन करता है, तो यह [आदेश समाप्त हो 0जाता है।

वास्तव में, आप ifपूरी तरह से समाप्त कर सकते हैं और केवल [कमांड का उपयोग कर सकते हैं , जैसे कि मुहावरेदार:

[ $(ipcs|grep test|wc -l) -ne 630 ] || echo "..."

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