मैं एक चर स्ट्रिंग की तुलना किसी पाठ स्ट्रिंग से कैसे कर सकता हूं, पूर्णांक की बजाय, अगर / अन्य विवरण में?


23

एक शेल स्क्रिप्ट लिखने की प्रक्रिया में, मैं निम्नलिखित मुद्दों के साथ भाग गया, अगर / अन्यथा कथन जो स्क्रिप्ट के बीच में कहीं गिरता है:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi

वापसी की त्रुटि:

./gitup: line 13: [: add: integer expression expected

और फिर बाकी स्क्रिप्ट के साथ आगे बढ़ता है। यदि खंड एक पूर्णांक के बजाय एक स्ट्रिंग इनपुट के चर का मूल्यांकन / तुलना करता है तो मुझे कैसे हो सकता है; जब मैंने कोशिश की तो कुछ और चीजों के बीच "! =" का उपयोग करते समय एक अलग त्रुटि की आवश्यकता थी।

जवाबों:


37

कुछ इस तरह:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi

-eqसंख्या तुलना के लिए है, =स्ट्रिंग तुलना के लिए उपयोग करें


धन्यवाद। मैंने कोशिश की थी कि, और स्क्रिप्ट मुक्त हो जाएगी, एक कीस्ट्रोक की आवश्यकता होगी, लेकिन अभी पाया कि यह एक असंबंधित सिंटैक्स त्रुटि के कारण और नीचे हो गया था, इसलिए यह पूरी तरह से काम करता है। सहायता के लिए धन्यवाद।
tony_perkis666

3
@josephmarhee: ध्यान दें कि [[]]परीक्षण एक बैश विशिष्ट निर्माण है, और यह उदाहरण POSIX के साथ-साथ []प्रश्न में उपयोग किए जाने के साथ ही काम करता है । यदि दुभाषिया को स्पष्ट रूप से #!/bin/bashया समान रूप से दिया जाता है , तो [[]]इसका उपयोग बिना मुद्दों के किया जा सकता है (और यह बैश में विकल्प की तुलना में थोड़ा तेज है , मेरा मानना ​​है - वैसे भी यह एक बोतल गर्दन नहीं होना चाहिए), अन्यथा एक के साथ रहना चाहिए []। यदि किसी को बैश बारीकियों की आवश्यकता नहीं है, तो स्क्रिप्ट उदाहरण डैश में थोड़ी तेज़ चलेगी। और POSIX अंतर्निहित पोर्टेबिलिटी सुनिश्चित करता है।
डैनियल एंडरसन

4

यह तरीका भी कारगर होगा। @ गुरु के उत्तर के समान है लेकिन दोहरे वर्ग कोष्ठक की आवश्यकता को हटा देता है।

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.