এই টিউটোরিয়ালে, আমরা শেল স্ক্রিপ্টগুলিতে ব্যবহৃত দুটি সবচেয়ে কার্যকর ব্যাশ সম্প্রসারণ ব্যাখ্যা করব:
- $ () - কমান্ড প্রতিস্থাপন
- $ {} - প্যারামিটার প্রতিস্থাপন/পরিবর্তনশীল সম্প্রসারণ
টোকেলে বিভক্ত হওয়ার পরে স্ক্রিপ্টে শেলের একটি সম্প্রসারণ করা হয়। একটি টোকেন হ'ল শেল দ্বারা একক একক হিসাবে বিবেচিত অক্ষরের একটি ক্রম। এটি একটি শব্দ বা অপারেটর হতে পারে।
আমরা এই নিবন্ধে উল্লিখিত সমস্ত উদাহরণ এবং স্ক্রিপ্টগুলি একটি ডেবিয়ান 10 বাস্টার সিস্টেমে চালাচ্ছি। যাইহোক, আপনি সহজেই তাদের অধিকাংশ লিনাক্স শেলগুলিতে প্রতিলিপি করতে পারেন। আমরা এই টিউটোরিয়ালের জন্য ডিফল্ট ডেবিয়ান কমান্ড লাইন, টার্মিনাল ব্যবহার করছি। ডেবিয়ানে, আপনি অ্যাপ্লিকেশন লঞ্চার অনুসন্ধান বারের মাধ্যমে এটি অ্যাক্সেস করতে পারেন:
অ্যাপ্লিকেশন লঞ্চার অ্যাক্সেস করতে, কেবল আপনার কীবোর্ডের সুপার/উইন্ডোজ কী টিপুন।
$ () কমান্ড প্রতিস্থাপন
সরকারী GNU বাশ রেফারেন্স ম্যানুয়াল অনুযায়ী:
কমান্ড প্রতিস্থাপন একটি কমান্ড আউটপুট কমান্ড নিজেই প্রতিস্থাপন করতে পারবেন। বাশ কমান্ডটি সম্পাদন করে এবং কমান্ডের স্ট্যান্ডার্ড আউটপুট দিয়ে কমান্ড প্রতিস্থাপনের পরিবর্তে সম্প্রসারণ সম্পাদন করে, যে কোনও পিছনের নতুন লাইন মুছে ফেলা হয়। এমবেডেড নতুন লাইন মুছে ফেলা হয় না, কিন্তু শব্দ বিভাজনের সময় সেগুলি সরানো হতে পারে। কমান্ড প্রতিস্থাপন ঘটে যখন একটি কমান্ড নিম্নরূপ:
$(কমান্ড)অথবা
'কমান্ড'
উদাহরণস্বরূপ, নিম্নলিখিত ইকো কমান্ডগুলি ডেট কমান্ডের আউটপুটকে তাদের ইনপুট হিসাবে প্রতিস্থাপন করে:
$বের করে দিল$(তারিখ)$বের করে দিল'তারিখ'
আপনি একটি পরিবর্তনশীল মান নির্ধারণ করতে কমান্ড প্রতিস্থাপন ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আমরা আজকের তারিখটি পরিবর্তনশীল আজকের মাধ্যমে মুদ্রণ করব:
$আজ= $(তারিখ)$বের করে দিল 'আজ $'
কমান্ড প্রতিস্থাপনের আরেকটি ইউটিলিটি ইনপুট পেতে শেল লুপগুলিতে রয়েছে। এখানে, আমরা কমান্ড প্রতিস্থাপন ব্যবহার করে আমাদের হোম ফোল্ডারে সমস্ত .txt ফাইল মুদ্রণ করার চেষ্টা করব:
জন্যচভিতরে /বাড়ি/তোমাকে/ *.txtকর
বের করে দিল '$ f'
সম্পন্ন
একটি শেল স্ক্রিপ্টে কমান্ড প্রতিস্থাপন ব্যবহার করা
উপরের উদাহরণগুলি কয়েকটি উপায় যার মাধ্যমে আপনি আপনার শেল স্ক্রিপ্টে কমান্ড প্রতিস্থাপনের শক্তি ব্যবহার করতে পারেন। এখানে একটি নমুনা অবস্থা রিপোর্ট যা আমরা নিম্নলিখিত শেল স্ক্রিপ্ট ব্যবহার করে মুদ্রণ করতে পারি:
#!/বিন/শবের করে দিল ***অবস্থা প্রতিবেদন***
আজ= $(তারিখ)
বের করে দিল 'আজকেআজ $'
ব্যবহারকারীরা= $(WHO | wc-দ্য)
বের করে দিল '$ USERSব্যবহারকারীরা বর্তমানে লগ ইন '
আপটাইম= $(তারিখ;আপটাইম)
বের করে দিল 'আপটাইম হল$ UPTIME'
কমান্ড প্রতিস্থাপন এই স্ক্রিপ্টে তিনবার ব্যবহার করা হয়েছে; তারিখ মুদ্রণ, ব্যবহারকারীদের লগ ইন এবং আপটাইম। আমরা স্ক্রিপ্টটি নিম্নরূপ সংরক্ষণ করেছি:
এটি এক্সিকিউটেবল করে তোলে এবং তারপর নিম্নলিখিত কমান্ডের মাধ্যমে এটি চালায়:
$chmod+ x status.sh$/statys.sh
এখানে আমাদের status.sh স্ক্রিপ্টের আউটপুট:
আপনি অবশ্যই উদাহরণগুলি অনুসরণ করে আরো অর্থপূর্ণ স্ক্রিপ্ট তৈরি করতে পারেন।
$ {} প্যারামিটার প্রতিস্থাপন/সম্প্রসারণ
একটি প্যারামিটার, ব্যাশে, একটি সত্তা যা মান সংরক্ষণ করতে ব্যবহৃত হয়। একটি প্যারামিটার একটি সংখ্যা, একটি নাম বা একটি বিশেষ চিহ্ন দ্বারা উল্লেখ করা যেতে পারে। যখন একটি প্যারামিটার একটি সংখ্যা দ্বারা উল্লেখ করা হয়, এটি একটি বলা হয় অবস্থানগত পরামিতি । যখন একটি প্যারামিটার একটি নাম দ্বারা উল্লেখ করা হয়, এটি একটি বলা হয় পরিবর্তনশীল । যখন একটি প্যারামিটারকে একটি বিশেষ চিহ্ন দ্বারা রেফারেন্স করা হয়, তার মানে হল সেগুলি বিশেষ ব্যবহারের সাথে স্বয়ংক্রিয় প্যারামিটার।
পরামিতি সম্প্রসারণ/প্রতিস্থাপন রেফারেন্স করা সত্তা/প্যারামিটার থেকে মান আনার প্রক্রিয়া। এটি এমন যে আপনি একটি ভেরিয়েবল প্রসারিত করছেন তার মান আনতে।
সর্বাধিক সম্ভাব্য প্যারামিটার সম্প্রসারণ সিনট্যাক্স নিম্নরূপ:
আপনি কীভাবে ব্যাশে প্যারামিটার সম্প্রসারণ ব্যবহার করতে পারেন তা এখানে:
$ {প্যারামিটার}উদাহরণস্বরূপ, প্যারামিটারটিকে তার মান দ্বারা প্রতিস্থাপন করা সবচেয়ে সহজ ব্যবহার:
$নাম='জন ডো'$বের করে দিল $ {name}
এই কমান্ডটি ইকো কমান্ড দ্বারা ব্যবহৃত ভেরিয়েবল নামের মান প্রতিস্থাপন করবে:
আপনি হয়তো ভাবছেন যে কোঁকড়া ধনুর্বন্ধনীগুলি এড়ানোর মাধ্যমে একই অর্জন করা যেতে পারে:
উত্তর হল প্যারামিটার সম্প্রসারণের সময়, এই কোঁকড়া ধনুর্বন্ধনী পরিবর্তনশীল নাম সীমাবদ্ধ করতে সাহায্য করে। এখানে সীমাবদ্ধ করে আমরা কি বলতে চাই তা ব্যাখ্যা করা যাক। আমাকে আমার সিস্টেমে নিম্নলিখিত কমান্ড চালাতে দিন:
$বের করে দিল 'ব্যক্তির নাম$ name_'ফলাফল পরিবর্তনশীল নামের মান মুদ্রণ করেনি কারণ সিস্টেমটি মনে করেছিল যে আমি পরিবর্তনশীল নাম_ উল্লেখ করছি। সুতরাং, আমার পরিবর্তনশীল নাম সীমাবদ্ধ করা হয়নি। নিম্নলিখিত উদাহরণে কোঁকড়া ধনুর্বন্ধনী পরিবর্তনশীল নাম সীমাবদ্ধ করবে এবং ফলাফলগুলি নিম্নরূপ ফেরত দেবে:
$বের করে দিল 'ব্যক্তির নাম$ {name}_ 'শেলের মধ্যে ভেরিয়েবলগুলি প্রতিস্থাপন করার সমস্ত উপায় এখানে দেওয়া হল:
$ {পরিবর্তনশীল} | এই কমান্ডটি ভেরিয়েবলের মান প্রতিস্থাপন করে। |
$ {পরিবর্তনশীল: -word} | যদি একটি ভেরিয়েবল শূন্য হয় বা এটি সেট না করা হয়, তাহলে শব্দটি ভেরিয়েবলের জন্য প্রতিস্থাপিত হয়। ভেরিয়েবলের মান পরিবর্তন হয় না। |
$ {পরিবর্তনশীল: = শব্দ} | যদি একটি ভেরিয়েবল শূন্য হয় বা এটি সেট না করা হয়, তাহলে ভেরিয়েবলের মান শব্দ সেট করা হয়। |
$ {পরিবর্তনশীল:? message} | যদি একটি ভেরিয়েবল শূন্য হয় বা এটি সেট না করা হয়, বার্তাটি স্ট্যান্ডার্ড ব্যাশ ত্রুটির জন্য মুদ্রিত হয়। |
$ {পরিবর্তনশীল:+শব্দ} | যদি পরিবর্তনশীল সেট করা হয়, শব্দ পরিবর্তনশীল জন্য প্রতিস্থাপিত হয়। যাইহোক, ভেরিয়েবলের মান নিজেই পরিবর্তন হয় না। |
উপরের উদাহরণগুলি কয়েকটি উপায় যা আপনি ব্যাশে ভেরিয়েবল প্রতিস্থাপনের শক্তি ব্যবহার করতে পারেন। আপনি আপনার শেল স্ক্রিপ্টগুলিতে সম্প্রসারণ ব্যবহার করার এই উপায়গুলি অন্তর্ভুক্ত করতে পারেন যাতে আপনার কাজটি সর্বোত্তমভাবে হাতে আসে।