2010-07-21 15 views
16

मैं अगर एक लाइन में खाली है बैश का उपयोग कर जांच करने के लिए एक सरल तुलना करने के लिए कोशिश कर रहा हूँ का उपयोग कर खाली है:जांच करता है, तो एक लाइन बैश

line=$(cat test.txt | grep mum) 
if [ "$line" -eq "" ] 
     then 
     echo "mum is not there" 
    fi 

लेकिन यह काम नहीं कर रहा है, यह कहते हैं: [: बहुत से तर्क

आपकी मदद के लिए बहुत बहुत धन्यवाद!

उत्तर

25

तुम भी $? चर कि आदेश की वापसी स्थिति के लिए सेट है इस्तेमाल कर सकते हैं। तो अगर आप चाहते हैं:

line=$(grep mum test.txt) 
if [ $? -eq 1 ] 
    then 
    echo "mum is not there" 
fi 

grep आदेश के लिए अगर कोई मैचों $? 0 (सफाई से बाहर निकल गया) पर सेट है कर रहे हैं और अगर यहां कोई मिलान नहीं $? 1.

+4

आप केवल 'अगर grep -q mum test.txt कर सकते हैं; फिर ... ' – Daenyth

+1

इस विशिष्ट परिदृश्य में, वास्तव में यह काम। हालांकि, कुछ पाइप जोड़ने का प्रयास करें और देखें कि यह तकनीक कितनी अच्छी तरह काम करती है। – Anders

+1

@ एंडर्स, यह तकनीक पूरी तरह से अच्छी तरह से काम करती है, मान लीजिए कि आप पाइपलाइन में अंतिम कमांड की निकास स्थिति का परीक्षण करना चाहते हैं। त्रुटि संदेशों को दबाने के लिए –

8
if [ ${line:-null} = null ]; then 
    echo "line is empty" 
fi 

या

if [ -z "${line}" ]; then 
    echo "line is empty" 
fi 
+0

यह गलत तरीके से झंडे लाइन = के रूप में "अशक्त" एक खाली रेखा – schot

+0

@ स्कोट, हाँ, आप सही हैं, यही कारण है कि मैंने दूसरा भी शामिल किया। डेटा इनपुट की मनमानी पसंद चुनें जो आपको पता नहीं चलेगा। अन्यथा बस दूसरा विकल्प चुनें। पाइक और कर्निघन "यूनिक्स प्रोग्रामिंग पर्यावरण" में पहला विकल्प पसंद करते हैं। – Anders

+0

दूसरे को या तो चर को उद्धृत करना चाहिए या '[['(आपको हमेशा' [[' बैश का उपयोग करते समय) का उपयोग करना चाहिए। '-z' के मामले में यह काम करता है, लेकिन किसी भी अन्य परीक्षण के लिए, यदि चर खाली है तो यह एक त्रुटि उत्पन्न करेगा। – Daenyth

5

शास्त्रीय श जवाब है कि भी पार्टी में काम करेंगे

if [ x"$line" = x ] 
then 
    echo "empty" 
fi 

आपकी समस्या भी हो सकता है कि आप '-eq' जो गणित की तुलना के लिए है का उपयोग कर रहे है।

+0

यह प्राचीन, अप्रचलित और टूटे हुए गोले के लिए शास्त्रीय है! कृपया इसे नए कोड में प्रयोग न करें। –

4
grep "mum" file || echo "empty" 
+0

आप grep आउटपुट दिखाना नहीं चाहते हैं, इसलिए 'grep -q' – unbeli

4
if line=$(grep -s -m 1 -e mum file.txt) 
then 
    echo "Found line $line" 
else 
    echo 'Nothing found or error occurred' 
fi 
+0

त्रुटि संदेशों को दबाने के लिए '2>/dev/null' या' -s' जोड़ें। –

1

मुझे लगता है कि स्पष्ट समाधान regex उपयोग कर रहा है:

if [[ "$line" =~ ^$ ]]; then 
    echo "line empty" 
else 
    echo "line not empty" 
fi 
-1

आप इस के साथ PHP उपयोग करना चाहते हैं,

$path_to_file='path/to/your/file'; 
$line = trim(shell_exec("grep 'mum' $path_to_file |wc -l")); 
if($line==1){ 
    echo 'mum is not here'; 
} 
else{ 
    echo 'mum is here'; 
} 
+0

कोई भी ऐसा क्यों करना चाहेगा? इसके अतिरिक्त ओपी ने स्पष्ट रूप से एक बैश उत्तर का अनुरोध किया .. – ntrp

संबंधित मुद्दे