बाश में दो तार की तुलना


13

मैं एक स्क्रिप्ट बनाना चाहता हूं जो चर सेट करने के लिए rmdirपासवर्ड का उपयोग करके पुष्टि करने के बाद एक निर्देशिका को हटा देता है read

अब तक मेरे पास यह है:

#!/bin/bash -x
echo "Password:"
read -t 30 S1
    S2='55555'
if [ $S1=$S2 ]; then
    rmdir /home/william/test
else
    echo "fail"
sleep 10
fi

इसलिए, मुझे -xइसे डीबग करने का प्रयास करना होगा लेकिन हर बार स्क्रिप्ट या तो प्रतिध्वनित करने में विफल रहती है (यदि मैंने पासवर्ड गलत डाला है) या यह आवश्यक निर्देशिका को हटा नहीं देगा।

यदि किसी के पास एक परिवर्तनीय स्क्रिप्ट है जिसका मैं उपयोग कर सकता हूं या यदि आप वर्तमान स्क्रिप्ट के साथ समस्याओं को इंगित कर सकते हैं जो बहुत अच्छा होगा।

जवाबों:


17

उपयोग करने वाले उन दो तारों ( S1और S2) की तुलना करने का सही तरीका ifहै:

if [ "$S1" = "$S2" ]

इस मामले में उपयोग के स्थानों में कंजूस मत बनो।

देखें: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_0__01.html


टीएलडीपी एक प्रामाणिक साइट नहीं है क्योंकि इसमें बहुत सारी विसंगतियां और त्रुटियां हैं। मैं आपको सलाह दूंगा कि हम इसे एक संदर्भ के रूप में उपयोग न करें।
codeforester

6

बैश स्क्रिप्टिंग में आपको नीचे की विधि के साथ दो चर की तुलना करने की आवश्यकता है।

if [ "var1" != "var2" ]; then
  Do something
fi;

रिक्त स्थान महत्वपूर्ण हैं


4

आप testउदाहरण के लिए GNU का उपयोग भी कर सकते हैं :

test s1 = s2 && echo Equal || echo Not equal

आपके संदर्भ में, यह है:

test "$S1" = "$S2" && rmdir -v /home/william/test
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.