ব্যাশ শেলটি অবশ্যই একমাত্র শেল নয়, তবে এটি সবচেয়ে শক্তিশালী। এটি সিস্টেম অ্যাডমিনিস্ট্রেটরদের জন্য একটি জনপ্রিয় পছন্দ করে তোলে যারা গুরুতর অ্যাপ্লিকেশন বিকাশ করতে চান যা একটি সিস্টেমে চালানোর জন্য কমান্ডের একটি সাধারণ "লন্ড্রি তালিকা" ছাড়িয়ে যায়। অন্যান্য শেলগুলির জন্য প্রচুর দুর্দান্ত ব্যবহার রয়েছে (উদাহরণস্বরূপ, গিট হুকের জন্য আমি টিসিএস-তে ডিফল্ট করি), কিন্তু গুরুতর স্ক্রিপ্টিংয়ের জন্য ব্যাশ একটি সহজ পছন্দ, এবং কেন তা এখানে।
ফাংশন
ব্যাশ স্ক্রিপ্টে একটি ফাংশন তৈরি করতে, ফাংশন কীওয়ার্ড ব্যবহার করুন :
function foo {
# কোড এখানে
}
ফাংশনগুলি প্রোগ্রামারদের জন্য দরকারী কারণ তারা কোডের অপ্রয়োজনীয়তা কমাতে সাহায্য করে। কোডে কম অপ্রয়োজনীয়তা প্রয়োজনীয় রক্ষণাবেক্ষণের পরিমাণকে হ্রাস করে কারণ আপনার যদি একটি মান পরিবর্তন করার প্রয়োজন হয় তবে প্রতিবার এটি ব্যবহার করার পরিবর্তে আপনাকে এটি শুধুমাত্র একবার (এর ফাংশনে) খুঁজে বের করতে হবে।
হাউ ব্যাশ স্ট্যাক আপ হয়
Tcsh এর উল্লেখযোগ্য ব্যতিক্রম সহ শেলগুলিতে ফাংশনগুলি মোটামুটি ভালভাবে সমর্থিত।
- কর্ন শেল: Bash হিসাবে একই সিনট্যাক্স ব্যবহার করে
- Zsh: Bash হিসাবে একই সিনট্যাক্স ব্যবহার করে
- মাছ: একটি কাস্টম ফাংশন ব্যবহার করে ফাংশন তৈরি এবং ম্যানিপুলেট করার কমান্ড
- Tcsh: কখনও কখনও, আপনি goto ব্যবহার করে Tcsh-এ ফাংশনের অভাব পূরণ করতে পারেন বিবৃতি, কিন্তু এটি খুব কমই সর্বোত্তম পছন্দ।
পুনঃনির্দেশ
ইনপুট এবং আউটপুট পুনঃনির্দেশ যে কোনো প্রোগ্রামিং এবং স্ক্রিপ্টিং ভাষায় একটি সুন্দর আদর্শ ফাংশন, এবং আপনি যখন একটি শেল ব্যবহার করছেন তখন এটি স্বাভাবিকভাবেই ঘটে। আপনি টেক্সট ইনপুট; আপনি আউটপুট পাবেন। কিছু শেল অন্যদের চেয়ে বেশি শক্তিশালী, এবং আপনি যেমন অনুমান করতে পারেন, ব্যাশ আপনাকে কল্পনাযোগ্য প্রায় প্রতিটি বিকল্প দেয়।
মূল বিষয়গুলি সহজ:কিছু সংখ্যক > ব্যবহার করুন আউটপুট পুনর্নির্দেশ করার জন্য অক্ষর এবং কিছু সংখ্যক ইনপুট পুনর্নির্দেশ করার জন্য অক্ষর। যদিও নির্দিষ্ট ধরণের ইনপুট এবং আউটপুটের জন্য কিছু বিশেষ উপাধি রয়েছে। উদাহরণস্বরূপ, ত্রুটি বার্তাগুলি stderr নামে একটি স্ট্রীমে যায়৷ , যেটিকে 2> হিসাবে মনোনীত করা হয়েছে৷ পুনর্নির্দেশের উদ্দেশ্যে। উদাহরণ স্বরূপ, এই কমান্ডটি output.log নামের একটি ফাইলে ত্রুটির বার্তা পাঠায় :
$ ls /void 2> output.log
হাউ ব্যাশ স্ট্যাক আপ হয়
শেলের সাথে ইন্টারঅ্যাক্ট করার সময় পুনঃনির্দেশ একটি দুর্দান্ত সুবিধাজনক ফাংশন, এবং যখন সমস্ত প্রধান শেল কিছু ধরণের পুনঃনির্দেশ সমর্থন করে, সমস্ত শেলগুলিতে সমস্ত বৈশিষ্ট্য উপলব্ধ নয়৷
- কর্ন শেল: Bash হিসাবে একই সিনট্যাক্স ব্যবহার করে
- Zsh: Bash হিসাবে একই সিনট্যাক্স ব্যবহার করে
- মাছ: আংশিক সমর্থন
- Tcsh: আংশিক সমর্থন
উৎস
আপনি যখন একটি শেল থেকে একটি ফাইল উৎস করেন, আপনি ফাইলটি আপনার শেল পরিবেশে আমদানি করছেন। বেশিরভাগ শেল এটি নিখুঁতভাবে পরিচালনা করে, তবে কিছু আপনার সুবিধার জন্য কয়েকটি অতিরিক্ত বৈশিষ্ট্য সরবরাহ করে।
উদাহরণস্বরূপ, যখন আপনি উৎস ব্যবহার করেন ব্যাশে, এটি আপনার উল্লেখ করা ফাইলের জন্য আপনার বর্তমান ডিরেক্টরি অনুসন্ধান করে। যদি এটি উত্স থেকে ফাইলটি খুঁজে না পায় তবে এটি পরিবর্তে আপনার PATH অনুসন্ধান করে। এটি একটি ছোট বোনাস, কিন্তু এটি খুব সুবিধাজনক কারণ এটি আপনাকে আপনার ড্রাইভে একটি কেন্দ্রীভূত অবস্থানে সাধারণ ফাংশন সংরক্ষণ করতে দেয় এবং তারপরে আপনার পরিবেশকে একটি সমন্বিত উন্নয়ন পরিবেশের (IDE) মতো আচরণ করতে দেয়৷ আপনার ফাংশনগুলি কোথায় সংরক্ষণ করা হবে তা নিয়ে আপনাকে চিন্তা করতে হবে না, কারণ আপনি জানেন যে সেগুলি আপনার স্থানীয় সমতুল্য /usr/include , তাই আপনি যেখানেই থাকুন না কেন আপনি যখন তাদের উৎস করেন, ব্যাশ তাদের খুঁজে পায়।
হাউ ব্যাশ স্ট্যাক আপ হয়
Bash হল একমাত্র শেল যা বর্তমান ডিরেক্টরি এবং আপনার PATH উভয়ই অনুসন্ধান করে যখন আপনি উৎস ব্যবহার করেন কমান্ড বা সংক্ষিপ্ত (এবং POSIX-ly সঠিক) । স্বরলিপি।
কী বাইন্ডিং
অনেক শেল আপনাকে তাদের সাথে কীভাবে ইন্টারঅ্যাক্ট করবেন তা কাস্টমাইজ করার অনুমতি দেয় এবং অবশ্যই, টেক্সট-ভিত্তিক ইন্টারফেসের সাথে যে কোনো মিথস্ক্রিয়া টাইপিংয়ের মাধ্যমে শুরু হয়। ব্যাশে, আপনি আপনার বর্তমান কীম্যাপ দেখতে পারেন:
$ bind -V | grep keymap
আপনার কীম্যাপ পরিবর্তন করতে (উদাহরণস্বরূপ, Emacs থেকে Vi এ):
$ bind 'set keymap vi'
ব্যাশ কিভাবে স্ট্যাক আপ হয়
শুধুমাত্র Bash এবং Zsh কী বাইন্ডিংয়ের জন্য অন্তর্নির্মিত প্রিসেট সরবরাহ করে।
ইতিহাস
Bash-এর যেকোনো শেলের সবচেয়ে শক্তিশালী কমান্ড-ইতিহাস ইন্টারফেস রয়েছে। ইতিহাসের ব্যাশ সংস্করণ বিপরীত অনুসন্ধান, দ্রুত স্মরণ, ইতিহাস সম্পাদনা (লাইন নম্বর দ্বারা এন্ট্রি মুছে ফেলা সহ), এবং আরও অনেক কিছুর জন্য অনুমতি দেয়। অন্যান্য সমস্ত শেল ব্যাশের ইতিহাসের ইন্টারফেসের সাথে মেলে, কিন্তু কোনটিই (এমনকি Zsh, যা সাধারণত ব্যাশকে অনুকরণ করে) তাদের নিজস্বভাবে এটি মেলে না।
ইতিহাস ম্যানিপুলেশন
ইতিহাস কমান্ড আপনার অতীতের সাথে যোগাযোগ করার একমাত্র উপায় নয়। Bash-এ শর্টহ্যান্ড নোটেশনের একটি সমৃদ্ধ সংগ্রহ রয়েছে যা আপনাকে আপনার শেল ইতিহাসে কমান্ডগুলি স্মরণ করতে এবং এমনকি পরিবর্তন করতে সক্ষম করে৷
উদাহরণস্বরূপ, আবার সাম্প্রতিক কমান্ড চালানোর জন্য ( history | tail -n1 এর আউটপুট , একটি অগ্রণী স্পেস ব্যবহার করে , এখানে দ্বারা মনোনীত , ইতিহাস কমান্ডটিকে আপনার ইতিহাসের বাইরে রাখতে), আপনি শুধু !! টাইপ করতে পারেন ব্যাশে।:
$ wc -w luarocks.xml
1284 luarocks.xml
$ !!
1284 luarocks.xml
সেই কমান্ডের অংশ অন্য কিছু দিয়ে প্রতিস্থাপন করার সময় সাম্প্রতিক কমান্ড চালানোর জন্য, আপনি স্ট্রিং প্রতিস্থাপন ব্যবহার করতে পারেন:
$ wc -w luarocks.xml
1284 luarocks.xml
$ ^-w^-l
$ wc -l luarocks.xml
214 luarocks.xml
এরকম অনেক শর্টকাট আছে, সবগুলোই ব্যাশ ম্যান এবং ইনফো পেজে নথিভুক্ত। অবশ্যই, এই কৌশলগুলির অনেকগুলি উন্নত ব্যবহারকারীদের জন্য উদ্দিষ্ট যাদের সাথে Bash মিথস্ক্রিয়া এতই পুনরাবৃত্তিমূলক এবং জাগতিক যে অস্পষ্ট, আপাতদৃষ্টিতে এলোমেলো কী সমন্বয়গুলি দরকারী। Zsh কার্যকরভাবে Bash অনুকরণ করে, কিন্তু অন্য কোন শেল এই ধরনের সর্বাধিক দক্ষতা প্রদান করে না।
হাউ ব্যাশ স্ট্যাক আপ হয়
Bash-এর ইতিহাস কমান্ডগুলি অন্য কোনো শেল দ্বারা অতুলনীয় (Zsh কাছাকাছি আসে, কিন্তু কিছু বিকল্প নেই, যেমন লাইন নম্বর দ্বারা মুছে ফেলার ক্ষমতা)।
অ্যাসোসিয়েটিভ অ্যারে
বেশিরভাগ শেল ইনডেক্সড অ্যারে তৈরি, ম্যানিপুলেট এবং কোয়েরি করার ক্ষমতা দেয়। সরল ইংরেজিতে, একটি সূচীকৃত অ্যারে হল একটি সংখ্যার সাথে উপসর্গযুক্ত জিনিসগুলির একটি তালিকা। জিনিসগুলির এই তালিকা, তাদের নির্ধারিত নম্বর সহ, সুবিধাজনকভাবে একটি একক ভেরিয়েবলে মোড়ানো হয়, যা এটিকে আপনার কোডে "বহন" করা সহজ করে তোলে৷
ব্যাশ, তবে, অ্যাসোসিয়েটিভ অ্যারে তৈরি করার ক্ষমতা অন্তর্ভুক্ত করে এবং এই অ্যারেগুলিকে অন্য যেকোনো অ্যারের মতোই বিবেচনা করে। একটি সহযোগী অ্যারে আপনাকে সংখ্যাযুক্ত মানের পরিবর্তে কী এবং মান জোড়ার তালিকা তৈরি করতে দেয়।
অ্যাসোসিয়েটিভ অ্যারে সম্পর্কে চমৎকার জিনিস হল কীগুলি নির্বিচারে হতে পারে:
$ ঘোষণা করুন -A userdata
$ userdata[name]=seth
$ userdata[pass]=8eab07eb620533b083f241ec4e6b9724
$ userdata[লগইন]=`date --utc +%s`প্রে>যেকোনো কী জিজ্ঞাসা করুন:
$ echo "${userdata[name]}"
seth
$ echo "${userdata[login]}"
1583362192একটি অ্যারে থেকে আপনি যে সাধারণ অ্যারে অপারেশনগুলি আশা করেন তার বেশিরভাগই উপলব্ধ৷
৷হাউ ব্যাশ স্ট্যাক আপ হয়
ব্যাশ হল একমাত্র শেল যা অ্যাসোসিয়েটিভ অ্যারেগুলির জন্য সম্পূর্ণ সমর্থন প্রদান করে (আবারও, Zsh কাছাকাছি আসে কিন্তু কী তালিকাভুক্ত করার ফাংশন নেই)।
শেল স্ক্রিপ্টিংয়ের জন্য ব্যাশ চয়ন করুন
Bash-এর কিছু সুবিধা POSIX-এর সাথে সঙ্গতিপূর্ণ নয়। তাত্ত্বিকভাবে, এর মানে হল আপনি একটি ব্যাশ স্ক্রিপ্ট লিখতে পারেন যা ব্যাশ ছাড়া সিস্টেমে প্রত্যাশিতভাবে চলে না। যদি তা হয়, তাহলে বলা হয় যে আপনার স্ক্রিপ্ট "পোর্টেবল" নয়৷
৷যদিও অনুশীলনে, ব্যাশ একটি বিনামূল্যের এবং ওপেন সোর্স সফ্টওয়্যার, তাই যে কেউ এটি ইনস্টল করতে পারে, সে লিনাক্স, বিএসডি, ওপেনইন্ডিয়ানা, উইন্ডোজ বা ম্যাকওএস চালায়। ব্যাশ ইনস্টল করার জন্য ব্যবহারকারীকে ব্যাশকে তাদের ডিফল্ট শেল হিসাবে ব্যবহার করার প্রয়োজন হয় না, এমনকি সচেতনভাবে এটি চালু করার প্রয়োজন হয় না, কারণ একটি ভাল শেল স্ক্রিপ্ট সনাক্ত করে যে এটি তার উপরের শেবাং-এ কোন শেল ব্যবহার করে। লাইন (#!/bin/bash , উদাহরণস্বরূপ)।
সন্দেহ হলে, আপনার ডকুমেন্টেশনে ব্যাশকে আপনার শেল স্ক্রিপ্টের নির্ভরতা হিসাবে অন্তর্ভুক্ত করুন (যদিও এটি একমাত্র নির্ভরতা হয়) ব্যবহারকারীদের সতর্ক করতে যে এটি একটি ব্যাশ স্ক্রিপ্ট এবং একটি সাধারণ শেল স্ক্রিপ্ট নয়৷
ব্যাশের অনেক সুবিধা রয়েছে এবং আমি দেখতে পাচ্ছি যে ব্যবহারকারীরা ব্যাশ ইনস্টল করেছেন কিনা তা নিয়ে উদ্বেগের চেয়ে বেশি। পাইথন বা জাভা বা অন্য কোন সফ্টওয়্যারের মতোই, কখনও কখনও নির্ভরতা থাকে। আপনি যদি ব্যাশ উপভোগ করেন এবং এর শর্টহ্যান্ড এবং শর্টকাটগুলি দরকারী মনে করেন তবে নিজেকে ছোট করবেন না৷
সিসাডমিনদের জন্য ব্যাশ স্ক্রিপ্টিং সম্পর্কে আমাদের ইবুক ডাউনলোড করুন!