2012-03-09 11 views
5

में काम नहीं कर रहा है, तो मैं यह जांचने की कोशिश कर रहा हूं कि कोई फ़ाइल बैश का उपयोग कर मौजूद है या नहीं। यह मेरा कोड`अगर [-e file.txt]` bash

if [-e file.txt]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 

है लेकिन जब मैं इसे चलाने मैं:

./test.sh: line 3: [-e: command not found 

क्या मैं गलत कर रहा हूँ?

उत्तर

10

[ बैश में एक विशेष टोकन नहीं है; यह सिर्फ शब्द[ एक अंतर्निहित कमांड है (जैसे echo)। तो इसके बाद आपको एक जगह चाहिए। और, इसी तरह, आप ] से पहले एक स्थान की जरूरत है:

if [ -e file.txt ] ; then 

जिसके अनुसार, मेरा सुझाव है [[ ]] बजाय — यह कुछ तरीकों से सुरक्षित है (हालांकि यह अभी भी रिक्त स्थान की आवश्यकता है):

if [[ -e file.txt ]] ; then 
+0

+1। बस ध्यान दें कि '[['एक बैश सुविधा है, इसलिए आप अपनी स्क्रिप्ट को'/bin/sh' –

+0

के साथ नहीं बुला सकते हैं, यह समझाने के लिए अपना उत्तर संपादित कर सकते हैं कि डबल स्क्वायर ब्रैकेट सुरक्षित क्यों हैं? – Relequestual

2
if [ -e file.txt ]; then 

आपको रिक्त स्थान की आवश्यकता है। [ और ] नियमित कार्यक्रम हैं।

+5

पंडिताऊ होने के लिए, ']' नहीं एक कार्यक्रम है, इसके लिए आवश्यक अंतिम तर्क है '[' आदेश –

+0

@ "ग्लेन जैकमैन": बेशक। माफ़ कीजिये। – jacekmigacz

0

'[' और ']' को 'स्वयं' पर होना चाहिए, यानी रिक्त स्थान से घिरा हुआ है।

if [ -e file.txt ] *emphasized text*; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
2

ओह, बाहर निकलता है मुझे और -e के बीच एक जगह की आवश्यकता है। इस तरह:

if [ -e file.txt ]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi