যদি ফোল্ডারটি ইতিমধ্যে বিদ্যমান না থাকে তবে ব্যাশকে কীভাবে ব্যবহার করবেন?


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

এটি কাজ করে না বলে মনে হচ্ছে। কেউ সাহায্য করতে পারেন?


4
আপনার সেমিকোলন কেন?
ADTC

1
;টোকেন, কমান্ড-বিভাজক, তাই সম্পর্কে newline হয়। thenএকটি পৃথক কমান্ড হিসাবে , পূর্ববর্তী সেমিকোলন এটি একই লাইনে লিখতে সক্ষম হতে হবে। সেমিকোলনগুলি পরে mkdirএবং fiঅতিরিক্ত অতিরিক্ত।
Andreas Riedmüller

উত্তর:


277

প্রথমত, বাশ-এ "[" হ'ল একটি কমান্ড, যা স্ট্রিং "]" কে শেষ আর্গুমেন্ট হিসাবে প্রত্যাশা করে, তাই বন্ধ করার বন্ধনীটির আগে শ্বেত স্পেস (পাশাপাশি "!" এবং "-d" এর মধ্যে দুটি পৃথক যুক্তি হওয়া প্রয়োজন খুব) গুরুত্বপূর্ণ:

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

দ্বিতীয়ত, যেহেতু আপনি -p সুইচ-এ ব্যবহার করছেন তাই mkdirএই চেকটি অকেজো, কারণ এটিই প্রথম স্থানে রয়েছে। শুধু লেখো:

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

এবং এটাই.


2
দ্রষ্টব্য: প্রয়োজনে -pপতাকাটি যে কোনও পিতামাত ডিরেক্টরি তৈরি করতে বাধ্য করে।
দানিজেল

13
আমার godশ্বর, আমি কখনই জানতাম না যে "[" একটি আদেশ। এটি আমার বেশ কয়েকটি সমস্যার ব্যাখ্যা দেয় ... স্ট্যাক ওভারফ্লোতে আমি কখনও পড়া সবচেয়ে সহজ জিনিস।
বেন কুশিগিয়ান

1
কি দারুন! জেনে রাখা যে "[" বাশের একটি আদেশ হ'ল এটি চক্ষু খোলার জন্য। আমার বাশ স্ক্রিপ্টগুলি নিয়ে এখন অনেকগুলি সমস্যার সমাধান হয়েছে বলে মনে হচ্ছে!
raluru

93

আসলে এটি আছে কি নেই তা যাচাই করার দরকার নেই। যেহেতু আপনি ইতিমধ্যে এটি বিদ্যমান থাকলে এটি তৈরি করতে চান, কেবল এমকেডিয়ারই করবে

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

2
দ্রষ্টব্য: প্রয়োজনে -pপতাকাটি যে কোনও পিতামাত ডিরেক্টরি তৈরি করতে বাধ্য করে।
দানিজেল

67

সহজভাবে করুন:

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

ফোল্ডারটি ইতিমধ্যে উপস্থিত থাকলে mkdir একটি ত্রুটি ফেলবে। ত্রুটিগুলি উপেক্ষা করতে লিখুন:

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

কোনও চেকিং বা এ জাতীয় কিছু করার দরকার নেই।


রেফারেন্সের জন্য:

-p, --parents no error if existing, make parent directories as needed http://man7.org/linux/man-pages/man1/mkdir.1.html


3
যুক্তি -pত্রুটিগুলি একেবারেই উপেক্ষা করে না: এটি একটি পৃথক মোডে আহ্বান করে যেখানে অস্তিত্ব নেই এমন কোনও পথ উপাদান তৈরি করা হয় (এবং তাই যদি শূন্য তৈরি করার প্রয়োজন হয় তবে এটি ত্রুটি নয়)। আচরণটি আলাদা কারণ এটি সর্বশেষটি ব্যতীত অন্য উপাদান তৈরি করবে, যা পছন্দসই বা নাও হতে পারে।
BeeOnRope

23

আপনি ভিতরে স্পেস প্রয়োজন [এবং ]বন্ধনী:

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

18

পরিষ্কার উপায়, শেল লজিকাল অপারেটরগুলির শর্টকাট মূল্যায়ন কাজে লাগান। অপারেটরের ডান দিকটি কেবল তখনই চালিত হয় যদি বাম দিকটি সত্য হয়।

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

11
মিমিএইচ, ক্লিনার নয়: কেবল ছোট আপনি যদি এটির সামনে এসে থাকেন তবে এই জাতীয় বিবৃতিটির অর্থ বোঝা মুশকিল।
ডেভিড ওরাজিও মন্টেরসিনো

1
আমি এটি পছন্দ করি, যদিও -pতর্কটি চেকটিকে অপ্রয়োজনীয় করে তোলে। আপনি যখন ব্যবহার করতে চান না তখন আপনি এটি ব্যবহার করতে পারেন -p, যখন আপনি সমস্ত অভিভাবক ডিরেক্টরি স্বয়ংক্রিয়ভাবে তৈরি করা না চান
এডিটিসি

3
আসলে এটি লেখার চেয়েও খাটো [ -d /path/to/dir ] || mkdir /path/to/dir.. বাম দিকটি মিথ্যা হলে ডান দিকটি কার্যকর করা হয়।
এডিটিসি

4

আমি মনে করি আপনার কোডটি কিছুটা পুনরায় ফর্ম্যাট করা উচিত:

#!/bin/bash
if [ ! -d /home/mlzboy/b2c2/shared/db ]; then
    mkdir -p /home/mlzboy/b2c2/shared/db;
fi;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.