শেল স্ক্রিপ্টিংয়ে কীভাবে হেরডোক ব্যবহার করবেন


এখানে নথি (হেরাদোক) একটি ইনপুট বা ফাইল স্ট্রিম আক্ষরিক যা কোডের একটি বিশেষ ব্লক হিসাবে বিবেচিত হয়। কোডের এই ব্লকটি প্রসেসিংয়ের জন্য একটি আদেশে পাঠানো হবে। হেরাদোক ইউনিক্স শেল থেকে উদ্ভূত এবং sh, tcsh, ksh, bash, zsh, csh এর মতো জনপ্রিয় লিনাক্স শেলগুলিতে পাওয়া যায়। উল্লেখযোগ্যভাবে, অন্যান্য প্রোগ্রামিং ভাষা যেমন পার্ল, রুবি, পিএইচপি এছাড়াও হেরডোক সমর্থন করে।

হার্ডোকের কাঠামো

হেরডোক 2 টি কোণ বন্ধনী ব্যবহার করেন (<<) এর পরে একটি ডিলিমিটার টোকেন। কোডের ব্লকটি শেষ করতে একই ডিলিমিটার টোকেন ব্যবহার করা হবে। ডিলিমিটারের মধ্যে যা আসে তা কোডের একটি ব্লক হিসাবে বিবেচিত হয়।

নীচের উদাহরণটি দেখুন। আমি কোডের ব্লকটিকে বিড়াল কমান্ডে পুনর্নির্দেশ করছি। এখানে ডিলিমিটারটি "ব্লক" এ সেট করা হয়েছে এবং একই "ব্লক" দ্বারা সমাপ্ত করা হবে।

cat << BLOCK
	Hello world
	Today date is $(date +%F)
	My home directory = ${HOME}
BLOCK

দ্রষ্টব্য: ব্লকটি শুরু করতে এবং অবরুদ্ধ করতে আপনার একই ডিলিমিটার টোকেন ব্যবহার করা উচিত।

মাল্টলাইন মন্তব্য তৈরি করুন

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

এটি মাল্টি-লাইন মন্তব্য সমর্থন করার জন্য ব্যাশের অন্তর্নির্মিত বৈশিষ্ট্য নয়, কেবল একটি হ্যাক। আপনি যদি কোনও কমান্ডে হেরেডোক পুনর্নির্দেশ না করে থাকেন, দোভাষী দোষীভাবে কোডের ব্লকটি পড়বেন এবং কোনও কিছুই কার্যকর করবেন না।

<< COMMENT
	This is comment line 1
	This is comment line 2
	This is comment line 3
COMMENT

হোয়াইট স্পেস পরিচালনা করা

ডিফল্টরূপে, হেরাদোক কোনও সাদা স্থান অক্ষর (ট্যাব, স্পেস) দমন করবে না। (<<) এর পরে একটি ডিলিমিটার পরে ড্যাশ (-) যোগ করে আমরা এই আচরণটি ওভাররাইড করতে পারি। এটি সমস্ত ট্যাব স্পেস দমন করবে কিন্তু সাদা স্পেস দমন করা হবে না।

cat <<- BLOCK
This line has no whitespace.
  This line has 2 white spaces at the beginning.
    This line has a single tab.
        This line has 2 tabs.
            This line has 3 tabs.
BLOCK

পরিবর্তনশীল এবং কমান্ড সাবস্কিওশন

হেরাদোক পরিবর্তনশীল বিকল্প গ্রহণ করে। ভেরিয়েবলগুলি ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল বা পরিবেশগত পরিবর্তনশীল হতে পারে।

TODAY=$(date +%F)
	
cat << BLOCK1
# User defined variables
Today date is = ${TODAY}
#Environ Variables
I am running as = ${USER}
My home dir is = ${HOME}
I am using ${SHELL} as my shell
BLOCK1

একইভাবে, আপনি হেরডোক কোড ব্লকের ভিতরে যে কোনও কমান্ড চালাতে পারেন।

cat << BLOCK2
$(uname -a) 
BLOCK2

পালিয়ে যাওয়া বিশেষ অক্ষর

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

পৃথক বিশেষ অক্ষরগুলি থেকে বাঁচতে ব্যাকস্ল্যাশ (\) ব্যবহার করুন।

cat << BLOCK4
$(uname -a)
BLOCK4

cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

ব্লকের ভিতরে থাকা সমস্ত বিশেষ অক্ষরকে ছাড়িয়ে যাওয়ার জন্য একক উদ্ধৃতি, ডাবল কোট, বা ব্যাকস্ল্যাশ সহ উপসর্গ ডিলিমিটার দিয়ে সীমানা ঘিরে রাখা।

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1

cat << "BLOCK2"
I am running as = ${USER}
BLOCK2

cat << \BLOCK3
I am running as = ${USER}
BLOCK3

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

নীচের উদাহরণে, আমরা এসএসএইচ মাধ্যমে একটি রিমোট সার্ভারে কোডের একটি ব্লক কার্যকর করার চেষ্টা করছি।

নীচের উদাহরণে আমি একটি ডাটাবেসের সাথে সংযোগ করতে এবং ক্যোয়ারি চালানোর জন্য পিএসএলএল-তে একটি নির্বাচনী বিবৃতিটি পাস করছি। .Cql ফাইলটি চালানোর জন্য -f পতাকা ব্যবহার করার পরিবর্তে বাশ স্ক্রিপ্টের মধ্যে পিএসএলএল-তে কোয়েরি চালানোর বিকল্প উপায়।

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK

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