जवाबों:
कुछ सिंटैक्स त्रुटियां
बैश में 'अगर' निर्माण का आधार यह है:
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
[[अधिक के वर्चस्व पर लगातार हथौड़ा [
$()किसी भी मामले में अंतरिक्ष में विभाजित नहीं होता है, इसे रिक्त स्थान में संलग्न करने की कोई आवश्यकता नहीं है। इस मामले में। यदि आउटपुट खाली हो सकता है, तो
अनिवार्य रूप से ifसशर्त निर्माण के कई तरीके हैं bash; एक एबी के जवाब में उल्लिखित है; एक और, जिसकी संभावना है कि आप जिसको उपयोग करने की कोशिश कर रहे हैं, उसमें डबल कोष्ठकों का उपयोग करना शामिल है, जो कि bashसी-स्टाइल तरीके से अभिव्यक्ति / चर को हेरफेर करने का एक तरीका है, और जो इसकी परिभाषा के अनुसार, डबल कोष्ठक की आवश्यकता है काम करने के लिए आदेश (मन है कि यह तार की तुलना के लिए काम नहीं करेगा):
if (($(ipcs|grep test|wc -l)==630)); then
echo "Shared Memory check passed"
fi
forछोरों, whileलूप और के रूप में आप सी में होगा incrementing चर: for((i=0; i<3; i++)); do [...]; done, i=0; while((i<3)); do [...]; doneऔर ((i++))। तुम्हारा पहले से ही स्पष्ट रूप से उत्कीर्ण
=। सही वाक्य विन्यास है==
एक और विकल्प जोड़ने के लिए: आप 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आपका जवाब में। क्या यह एक टाइपो है?
[के वाक्य-विन्यास से कोई संबंध नहीं हैif।/usr/bin/[आदेश और उसके अंतर्निहित बराबर[किसी अन्य की तरह सिर्फ आज्ञा कर रहे हैं।