কিভাবে একটি শেল স্ক্রিপ্টের ভিতর থেকে কমান্ড এক্সিকিউট করবেন

How Execute Commands From Within Shell Script



ব্যাশে, শেল স্ক্রিপ্ট থেকে কমান্ডগুলি কার্যকর করা প্রথমে কিছুটা ভীতিজনক হতে পারে এবং বিশ্বাসের লাফ দেওয়ার প্রয়োজন হতে পারে। সর্বোপরি, একটি ব্যাশ স্ক্রিপ্টের মধ্যে চালানো কমান্ডগুলি ইন্টারেক্টিভ নয়। এখানে আমরা একটি শেল স্ক্রিপ্ট থেকে কমান্ডগুলি চালানোর ভিত্তি স্থাপন করব যা কমান্ড সম্পর্কে নিম্নলিখিত প্রশ্নের উত্তর দেয়: তারা কোথা থেকে আসে? তারা কি? কিভাবে আমরা তাদের একটি স্ক্রিপ্ট ব্যবহার করি?

কমান্ড কোথা থেকে আসে?

Bash কমান্ডগুলি নিম্নলিখিত বিভাগগুলির মধ্যে থেকে আসে:







বাশ নিজেই (বিল্টইন দেখুন)

ব্যাশ তার নিজস্ব কমান্ডের সেট নিয়ে আসে যাতে এর বিল্ট-ইন ফিচার যেমন অ্যার্লে ডিক্লেয়ার করা, ফাইল থেকে লাইন পড়া এবং ব্যাশ-এ নির্মিত অন্যান্য ফিচার অ্যাক্সেস করা যায়। আমরা এই শ্রেণীর কমান্ডগুলিকে বলি, বাশ বিল্টিন কমান্ড বা সংক্ষিপ্তভাবে বিল্টইন।



আপনার পরিবেশে এক্সিকিউটেবল (বাহ্যিক কমান্ড দেখুন)

ডিফল্টরূপে, bash ডিফল্টরূপে কিছু ভেরিয়েবলের উত্তরাধিকারী হবে। এটি PATH ভেরিয়েবলের ক্ষেত্রে পরিলক্ষিত হয় এক্সিকিউটেবলের জন্য অবস্থানগুলি যা ব্যাশে বাহ্যিক কমান্ড হিসাবে উল্লেখ করা হয়। অর্থাৎ, যদি কার্ল কমান্ডটি আপনার পথে, এটি একটি ব্যাশ স্ক্রিপ্টের মধ্যে থেকে একইভাবে ইন্টারেক্টিভ মোডে চালানো যেতে পারে। আমরা এই বিভাগের কমান্ড, বাহ্যিক কমান্ড বা সংক্ষিপ্ত জন্য কমান্ড বলি।



ব্যবহারকারী-সংজ্ঞায়িত ফাংশন (ফাংশন দেখুন)

বাহ্যিক কমান্ড এবং বিল্টিনগুলি চালানোর আগে, একটি ফাংশন সংজ্ঞায়িত কিনা তা বাশ পরীক্ষা করে। যদি এটি হয় তবে ফাংশনটি কমান্ড হিসাবে কার্যকর করা হয়। যদি তা না হয় তবে এটি কমান্ডগুলির অগ্রাধিকার ক্রমকে এগিয়ে নিয়ে যায়। স্ক্রিপ্টের বাইরে সংজ্ঞায়িত ফাংশন চালানোর জন্য, তাদের অবশ্যই -x অ্যাট্রিবিউট দিয়ে ঘোষণা করতে হবে; অন্যথায়, সেগুলি ব্যবহার করে অন্তর্ভুক্ত করা যেতে পারে। কমান্ড। আমরা এই শ্রেণীর কমান্ডকে ব্যবহারকারীর সংজ্ঞায়িত ফাংশন বা সংক্ষেপে ফাংশন বলি।





কমান্ড কি

একটি কমান্ড শেল পরিবেশের মধ্যে একটি প্রোগ্রামের প্রবেশের একক বিন্দু হিসাবে বিবেচিত কোন শব্দ। যে ক্ষেত্রে কমান্ডটি কার্যকর করা হয়, কমান্ড নিজেই এবং argumentsচ্ছিক আর্গুমেন্টগুলি পজিশনাল প্যারামিটার, $ {0}, $ {1}, $ {2},… কমান্ড নিজেই এবং প্রসঙ্গে অপরিবর্তিত। অর্থাৎ, ফাংশনে অবস্থানগত পরামিতিগুলির বিপরীতে, $ {1}, $ {2},… যা প্রসঙ্গের উপর নির্ভর করে পরিবর্তিত হতে পারে, $ {0} ফাংশন কলগুলির মধ্যে অপরিবর্তিত।

ঘোষণার অবস্থানের উপর নির্ভর করে এবং বৈশ্বিক, ব্যাশ-এ অন্তর্নির্মিত, বা আপনার ব্যাশ প্রোগ্রামের স্থানীয় হিসাবে নির্ধারিত বৈশিষ্ট্যগুলির উপর নির্ভর করে কমান্ডগুলি বিস্তৃত।



এখানে কমান্ড প্রকারের একটি তালিকা জানা আছে।

অন্তর্নির্মিত কমান্ড

এরা বাশ মহাবিশ্বের প্রথম শ্রেণীর নাগরিক, যার মধ্যে রয়েছে '।' ব্যাশ বিল্টিন কমান্ডের তালিকায় থাকা এই কমান্ডগুলি আপনার ব্যাশ স্ক্রিপ্টের মধ্যে ব্যবহার করার জন্য উপলব্ধ।

আপনার ব্যাশ দোভাষীর পদ এবং সংস্করণ নম্বরের উপর নির্ভর করে কিছু কমান্ড উপলব্ধ নাও হতে পারে।

বাহ্যিক আদেশ

বাহ্যিক কমান্ডগুলি কার্লের মতো ব্যাশ স্ক্রিপ্টের বাইরে এক্সিকিউটেবল অ্যাক্সেসযোগ্য। ফাংশন থেকে ভিন্ন, বাহ্যিক কমান্ডগুলি ভেরিয়েবল হিসাবে সংরক্ষণ করা হয় না।

কমান্ড প্রকারের অগ্রাধিকার যত কম হবে, পরবর্তী কমান্ডটি ব্যাখ্যা করা যেতে পারে। বাহ্যিক কমান্ডগুলিতে ব্যাশে সর্বাধিক অগ্রাধিকার রয়েছে। এটি একটি বহিরাগত কমান্ড চালানোর আগে, ইন্টারপ্রেটার ব্যাশ, ফাংশনগুলি সন্ধান করবে, তারপর অন্তর্নির্মিত, এবং অবশেষে দেখতে চেষ্টা করবে যে কোনও কমান্ড বাহ্যিকভাবে বিদ্যমান কিনা। যদি না হয়, আপনি নিম্নলিখিত ত্রুটি দেখতে হবে।

bash: unknown-command:কমান্ডপাওয়া যায়নি

একটি ব্যাশ স্ক্রিপ্টে, ফাংশনগুলি বহিরাগত কমান্ড আচরণকে ওভাররাইড করতে পারে যদি একই নাম ভাগ করা হয় যেমন আমরা আগে কার্ল ব্যাশের উদাহরণে দেখেছি। একটি ফাংশন ব্যবহার করে একটি কাস্টম বাহ্যিক কমান্ডের একটি উদাহরণ অনুসরণ করা হয়।

কার্ল() {
কমান্ড $ {FUNCNAME}...
}

এটি কাজ করে কারণ ফাংশনগুলির বাহ্যিক কমান্ড এবং এমনকি ব্যাশ বিল্টিনের চেয়ে বেশি অগ্রাধিকার রয়েছে। সীমাবদ্ধতা একটি ফাংশন নামের অনুমোদিত অক্ষর।

লক্ষ্য করুন যে উপরের উদাহরণটি নিম্নরূপ একটি উপনাম ব্যবহার করে সম্পন্ন করা যেতে পারে।

উপনাম কার্ল= '
{
কার্ল ...
}
'

উপনামগুলির ক্ষেত্রে, কমান্ডের ধরন বাস্তবায়নের প্রেক্ষাপটের উপর নির্ভর করে ভিন্ন হতে পারে, যেখানে ফাংশন পদ্ধতি ব্যবহার করে কাস্টম বাহ্যিক কমান্ডের ক্ষেত্রে, এন্ট্রি পয়েন্ট সর্বদা একটি ফাংশন।

কার্যাবলী

ফাংশন ব্যাশে শাসন করে। বিল্টইন এবং এক্সটার্নাল কমান্ডগুলি দেখার আগে, বাশ পরীক্ষা করে দেখেন যে কোন ফাংশন কোন প্রার্থীর ফাংশন নাম দ্বারা সংজ্ঞায়িত হয়েছে, প্রথম শব্দটি কোন লাইনে বা পরে দেখা যাচ্ছে; একটি কমান্ড লাইনের শেষে চিহ্নিত চরিত্র। একমাত্র ব্যতিক্রম হল অল-ক্যাপে লেখা ব্যাশ ভেরিয়েবল যেমন $ {FUNCNAME}।

উপনাম() { FUNCNAME= asdf;বের করে দিল $ {@ ,,};}
উপনাম কার্ল='টেস্ট কার্ল উপনাম' #?

সহজ কমান্ড

ব্যাশ ম্যান পেজে সাধারণ কমান্ডগুলি definedচ্ছিক যুক্তি অনুসারে একটি শব্দ হিসাবে সংজ্ঞায়িত করা হয়। প্রসঙ্গে, একটি সাধারণ কমান্ড হয় একটি অন্তর্নির্মিত, বহিরাগত কমান্ড, অথবা ফাংশন হতে পারে।

ব্যাশ স্ক্রিপ্টের মধ্যে থেকে কমান্ডগুলি কীভাবে চালানো যায়

এখন যেহেতু আমরা জানি যে কোন ধরণের কমান্ড পাওয়া যায়, আমরা আপনার স্ক্রিপ্টগুলিতে সেগুলি কীভাবে ব্যবহার করতে পারি তা প্রসারিত করতে পারি। প্রথমে, আমাদের জানতে হবে কিভাবে bash এ কমান্ড অগ্রাধিকার কাজ করে।

ব্যাশ স্ক্রিপ্টে অগ্রাধিকার নিয়ন্ত্রণ করার কিছু উপায় এখানে দেওয়া হল।

বাশকে সিদ্ধান্ত নিতে দিন

কমান্ড_নাম

বেশিরভাগ ক্ষেত্রে, বিশেষত শুরুতে, আমরা কেবল ব্যাশকে কোন কমান্ডটি ব্যবহার করতে হবে তা নির্ধারণ করতে দেই। যাইহোক, এমন কিছু ক্ষেত্রে আছে যখন আপনার অভিপ্রায় ব্যাশ দ্বারা সঠিকভাবে ব্যাখ্যা করা যাবে না। ফাংশনের নাম এবং বাহ্যিক কমান্ড বা বিল্টিনগুলি ওভারল্যাপ হয়ে গেলে এইরকম হয়।

একটি বাহ্যিক কমান্ড চালান

কমান্ডকমান্ড_নাম

ধরুন যে একটি বহিরাগত কমান্ড command_name রয়েছে যা ইন্টারেক্টিভ মোডে উপলব্ধ এবং আপনি এটি একটি ব্যাশ স্ক্রিপ্টে ব্যবহার করতে চান। আমরা স্পষ্টভাবে ব্যাশকে বলতে পারি যে command_name হল একটি বাহ্যিক কমান্ড যা বিল্টইন কমান্ড ব্যবহার করে।

বাহ্যিক কমান্ডের উদাহরণ

নিম্নলিখিত অনুমান করা বাহ্যিক কমান্ড উদাহরণ ইনস্টল করা হয়:

ফাইল
যাওয়া
ফিগলেট
উদাহরণ: ফাইলের ধরন এবং তথ্য পান
{ # ফাইলের ধরন এবং তথ্য পান
ফাইল $ {infile} # (1,2)
}
# (1) কমান্ড, ফাইল
# (2) infile = {ফাইলের পথ}
উদাহরণ: মঞ্চে পরিবর্তিত এবং গিটের নতুন ফাইল
{ # মঞ্চের ফাইলগুলি গিটের মধ্যে
git যোগ করুন# (1)
}
# (1) কমান্ড, গিট
উদাহরণ: ফিগলেট ব্যবহার করে অ্যাসিআই আর্ট তৈরি করুন
{ # ascii শিল্প তৈরি করুন
ফিগলেট$ {বার্তা} # (1,2)
}
# (1) কমান্ড, ফিগলেট
# (2) বার্তা = {বার্তা ascii শিল্প হিসাবে প্রদর্শিত}

একটি অন্তর্নির্মিত কমান্ড চালান

অন্তর্নির্মিতকমান্ড_নাম

ধরুন যে command_name হল একটি কমান্ড যা বিল্ট ইন ব্যাশ হিসাবে সংজ্ঞায়িত। ব্যাশকে জানাতে যে আমরা কমান্ড_নামকে বিল্টইন হিসাবে চালাতে চাই আমরা বিল্টইন বিল্টিন ব্যবহার করি।

অন্তর্নির্মিত কমান্ড উদাহরণ
উদাহরণ: কয়টি বিল্টিন?
অন্তর্নির্মিত{,}{,,}{,,,} # কত বিল্টিন?
উদাহরণ: ফ্যান্টম ডিক্লেয়ার
{
ঘোষণা করা() { বের করে দিলউফ!;}
ঘোষণা করা– এক্সএফঘোষণা করা #?
}

উপসংহার

ব্যাশ শেল স্ক্রিপ্টের মধ্যে থেকে একটি কমান্ড চালানো মোটামুটি সহজ। তিনটি প্রধান কমান্ড প্রকার রয়েছে। ব্যাশ -এ কীভাবে সাধারণ কমান্ডগুলি ব্যাখ্যা করা হয় তা জানার ফলে রানটাইম -এ কোন ধরনের কমান্ড কার্যকর করা হয় তার উপর নিয়ন্ত্রণ উন্নত হতে পারে।