जवाबों:
कुछ सिंटैक्स त्रुटियां
बैश में 'अगर' निर्माण का आधार यह है:
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/[
आदेश और उसके अंतर्निहित बराबर[
किसी अन्य की तरह सिर्फ आज्ञा कर रहे हैं।