यदि कोई चर शेल में संख्या के बराबर है तो परीक्षण कैसे करें


13

मेरे पास यह शेल स्क्रिप्ट है जो काम नहीं कर रहा है।

इनपुट:

Server_Name=1
if [ $Server_Name=1 ]; then  
echo Server Name is 1  
else
echo Server Name is not 1
fi

आउटपुट:

Server Name is 1

लेकिन, अगर मैं बदलता हूं Server_Name=2, तो आउटपुट है:

Server Name is 1

जब मैं बदलने Server_Nameके लिए 2, मैं यह कहना चाहता हूँ: Server Name is 2

मुझे पता है कि यह if [ $Server_Name=1 ];हिस्सा है।

मैं इसे कैसे ठीक करूं?


जैसा कि डेविड नीचे बताते हैं, आपको संख्यात्मक मूल्यों का परीक्षण करने के लिए "-eq" का उपयोग करना चाहिए। त्रुटियों से बचने के लिए आप रिक्त चर की जांच करना चाहते हैं; if [ ! "x$var" = "x" ]; then\n if [ $var -eq 1 ]; then ...
mikebabcock

जवाबों:


22

आपकी स्क्रिप्ट इंगित करती है कि आप स्ट्रिंग तुलना का उपयोग कर रहे हैं।

मान लें कि सर्वर नाम केवल संख्या के बजाय एक स्ट्रिंग हो सकता है।

के लिए स्ट्रिंग तुलना :
if [[ "$Server_Name" == 1 ]]; then

टिप्पणियाँ:

  • चारों ओर घूमना == एक जरूरी है
  • चारों ओर रिक्ति = एक है चाहिए
    if [ $Server_Name=1 ]; then गलत है

  • [[...]] त्रुटियों को कम करता है क्योंकि कोई पथनाम विस्तार या शब्द विभाजन विभाजन [[और]] के बीच नहीं होता है

  • "शब्द" हैं कि स्ट्रिंग उद्धृत करना पसंद करें

के लिए पूर्णांक तुलना :
if [[ "$Server_Name" -eq 1 ]]; then


अधिक जानकारी:


2
[[बैश सिंटैक्स है और ओपी शेल के बारे में पूछ रहा था, जहां यह काम नहीं करेगा
गिलेड मेयानी


2
[ $Server_Name=1 ]

इरादा के अनुसार काम नहीं करता है क्योंकि एकल कोष्ठक के अंदर वाक्य रचना बाश के लिए विशेष नहीं है। हमेशा की तरह, चर $Server_Name1 से प्रतिस्थापित हो जाता है, इसलिए सभी परीक्षण ( [) कमांड देखता है एक एकल तर्क है: स्ट्रिंग 1=1। चूंकि स्टिंग की गैर-शून्य लंबाई है, इसलिए परीक्षण रिटर्न सही है

POSIX- आज्ञाकारी गोले के लिए, आप निम्नलिखित परीक्षण कमांड का उपयोग कर सकते हैं :

[ "$Server_Name" = 1 ]

चेक $Server_Nameस्ट्रिंग के बराबर है 1

[ "$Server_Name" -eq 1 ]

चेक संख्या के$Server_Name बराबर है , यानी, यह एक स्ट्रिंग तुलना के बजाय एक संख्यात्मक तुलना करता है। 1

यदि आप परिभाषित करते हैं, तो दो कमांड का रिटर्न मान अलग-अलग होगा Server_Name=01। पहला असत्य लौटेगा, दूसरा सच्चा लौटेगा।

ध्यान दें कि यदि संभावना मौजूद है कि चर $Server_Nameअपरिभाषित है, तो इसे उद्धृत किया जाना चाहिए या परीक्षण करने पर त्रुटि दिखाई देगी।



0

सरल उत्तर। आपका कोड सही है - लगभग। केवल एक चीज जो आपको याद आ रही है वह है रिक्त स्थान ... (और अच्छी तरह से शायद एक अतिरिक्त "=")

if [ $Server_Name=1 ]; then

सही ढंग से गणना नहीं करेगा।

if [ $Server_Name == 1 ]; then  

आप क्या चाहते हैं।

और अब स्ट्रिंग बनाम संख्या के बारे में बयान। जब भी आप तुलना की तरह खोज रहे हैं / नहीं है, तब == हमेशा ठीक रहेगा।

और मुझे लगता है कि आपके पास हमेशा एक स्ट्रिंग के रूप में एक सर्वर नाम होता है, न कि एक नंबर - सही? ;-)

अपने कोडिंग मजबूत प्रशिक्षु के साथ गुड लक।

Ciao


अद्भुत इतने सारे उत्तर यहाँ हैं ..
टोबिबोबी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.