2011-02-05 13 views
127
#!/bin/bash 
if [!-d /home/mlzboy/b2c2/shared/db]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi; 

यह काम करने के लिए प्रतीत नहीं होता। क्या कोई मदद कर सकता है?यदि फ़ोल्डर पहले से मौजूद नहीं है तो फ़ोल्डर बनाने के लिए बैश का उपयोग कैसे करें?

#!/bin/bash 
if [ ! -d /home/mlzboy/b2c2/shared/db ] 
then 
    mkdir -p /home/mlzboy/b2c2/shared/db 
fi 
+3

आपके पास सेमीकॉलन क्यों हैं? – ADTC

उत्तर

18

आप [ और ] कोष्ठक के अंदर रिक्त स्थान की जरूरत है

#!/bin/bash 
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi; 
4

मुझे लगता है कि आप फिर से प्रारूप चाहिए अपने कोड थोड़ा:

193

सबसे पहले, पार्टी में "[" सिर्फ एक है आदेश है, जो स्ट्रिंग "]" एक अंतिम तर्क के रूप में की उम्मीद है, तो इससे पहले कि बंद कोष्ठक ("!" के साथ-साथ और "-d" जो दो अलग-अलग तर्क भी होने की जरूरत के बीच) खाली स्थान के लिए महत्वपूर्ण है:

if [ ! -d /home/mlzboy/b2c2/shared/db ]; then 
    mkdir -p /home/mlzboy/b2c2/shared/db; 
fi 

दूसरा, चूंकि आप mkdir पर -p स्विच का उपयोग कर रहे हैं, यह चेक बेकार है, क्योंकि यह पहली जगह में है। बस लिखें:

mkdir -p /home/mlzboy/b2c2/shared/db; 

और यह है।

72

वास्तव में चाहे वह मौजूद है या नहीं की जाँच करने की कोई जरूरत नहीं है। आप पहले से ही यह बनाना चाहता है के बाद से यदि वह मौजूद है, बस mkdir

mkdir -p /home/mlzboy/b2c2/shared/db 
42

करना होगा, बस कार्य करें: यदि फ़ोल्डर पहले से मौजूद

mkdir /path/to/your/potentially/existing/folder 

mkdir एक त्रुटि फेंक देते हैं। त्रुटियों को अनदेखा करने के लिए लिखें:

mkdir -p /path/to/your/potentially/existing/folder 

किसी भी जांच या ऐसा कुछ करने की आवश्यकता नहीं है।

13

क्लीनर रास्ता, खोल तार्किक ऑपरेटरों के शॉर्टकट मूल्यांकन शोषण करते हैं। ऑपरेटर के दाहिने तरफ केवल तभी निष्पादित किया जाता है जब बायीं तरफ सही हो।

[ ! -d /home/mlzboy/b2c2/shared/db ] && mkdir -p /home/mlzboy/b2c2/shared/db 
+9

mmh, क्लीनर नहीं: बस छोटा। यदि आप इसे पार करते हैं तो इस तरह के कथन के अर्थ को समझना मुश्किल है। –

+0

मुझे यह पसंद है, हालांकि '-p' तर्क चेक को अनावश्यक बनाता है। तुम अब भी उपयोग कर सकते हैं जब आप '-p' का उपयोग नहीं करना चाहते हैं, वह यह है कि जब आप * नहीं चाहिए * सभी माता पिता निर्देशिका स्वचालित रूप से बनाया जा सकता है। – ADTC

+1

वास्तव में यह लिखने के लिए भी कम है '[-d/path/to/dir] || mkdir/path/to/dir' .. बाएं तरफ झूठ बोलने पर दाएं तरफ निष्पादित किया जाता है। – ADTC

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

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