এই নিবন্ধটি while loop ব্যবহার করে ব্যাশ স্ক্রিপ্টে ফাইলগুলি কীভাবে পড়তে হয় সে সম্পর্কে। . একটি ফাইল পড়া প্রোগ্রামিং একটি সাধারণ অপারেশন. আপনার বিভিন্ন পদ্ধতির সাথে পরিচিত হওয়া উচিত এবং কোন পদ্ধতিটি ব্যবহার করা আরও কার্যকর। ব্যাশে, একটি একক কাজ অনেক উপায়ে অর্জন করা যেতে পারে তবে কাজটি সম্পন্ন করার জন্য সর্বদা একটি সর্বোত্তম উপায় রয়েছে এবং আমাদের এটি অনুসরণ করা উচিত।
while loop ব্যবহার করে ফাইলের বিষয়বস্তু কীভাবে পড়তে হয় তা দেখার আগে , লুপ কিভাবে কাজ করে তার একটি দ্রুত প্রাইমার। যখন লুপ একটি শর্ত মূল্যায়ন করে এবং শর্তটি সত্য হলে প্রদত্ত কোডের সেটের উপর পুনরাবৃত্তি করে।
while [ CONDITION ]
do
code block
done
চলুন লুপ করার সময় ভেঙে পড়ি সিনট্যাক্স।
- while loop একটি শর্ত অনুসরণ করে কিছুক্ষণ কীওয়ার্ড দিয়ে শুরু করা উচিত।
- একটি শর্ত [ ] এর মধ্যে আবদ্ধ করা উচিত অথবা [[ ]] . লুপ কার্যকর করার জন্য শর্তটি সর্বদা সত্য হওয়া উচিত।
- কোডের প্রকৃত ব্লক করুন এর মধ্যে স্থাপন করা হবে এবং হয়েছে .
NUMBER=0
while [[ $NUMBER -le 10 ]]
do
echo " Welcome ${NUMBER} times "
(( NUMBER++ ))
done
এটি একটি খুব সাধারণ উদাহরণ, যেখানে লুপ NUMBER পর্যন্ত চালায় 10 এর বেশি নয়৷ এবং ইকো স্টেটমেন্ট প্রিন্ট করে।
সাথে যখন আমরা পড়া ব্যবহার করব লাইন দ্বারা একটি ফাইল লাইনের বিষয়বস্তু পড়ার কমান্ড। কিভাবে যখন তার সিনট্যাক্স নিচে দেওয়া হল এবং পড়ুন কমান্ড একত্রিত হয়। এখন ইনপুট হিসাবে ফাইলটি পাস করার বিভিন্ন উপায় রয়েছে এবং আমরা সেগুলি দেখতে পাব।
# SYNTAX
while read VARIABLE
do
code
done
লিনাক্সে পাইপিং
সাধারণত আমরা টার্মিনাল থেকে ফাইলের বিষয়বস্তু দেখতে cat কমান্ড ব্যবহার করব। এছাড়াও, আমরা cat কমান্ডের আউটপুট পাইপ করব অন্যান্য কমান্ডের জন্য যেমন grep, sort, ইত্যাদি।
একইভাবে, আমরা cat কমান্ড ব্যবহার করব এখানে ফাইলের বিষয়বস্তু পড়তে এবং এটি একটি যখন পাইপ করুন লুপ. প্রদর্শনের জন্য, আমি /etc/passwd ব্যবহার করছি ফাইল কিন্তু এই ফাইলের সাথে তালগোল পাকানো বাঞ্ছনীয় নয় তাই এই ফাইলের একটি ব্যাকআপ কপি নিন এবং যদি আপনি চান তাহলে এটির সাথে খেলুন৷
cat /etc/passwd | while read LREAD
do
echo ${LREAD}
done
পড়ার সময়
উপরের কোডটি জমা দিলে কী ঘটবে তা ভেঙে দেওয়া যাক।
- বিড়াল /etc/passwd ফাইলের বিষয়বস্তু পড়বে এবং পাইপের মাধ্যমে ইনপুট হিসেবে পাস করবে।
- পড়ুন কমান্ড ক্যাট কমান্ড থেকে ইনপুট হিসাবে পাস করা প্রতিটি লাইন পড়ে এবং এটি LREAD এ সংরক্ষণ করে পরিবর্তনশীল।
- পড়ুন কমান্ড EOL পর্যন্ত ফাইলের বিষয়বস্তু পড়বে ব্যাখ্যা করা হয়।
আপনি অন্যান্য কমান্ড যেমন হেড, টেইল এবং পাইপ টাইপ লুপে ব্যবহার করতে পারেন।
head -n 5 /etc/passwd | while read LREAD
do
echo ${LREAD}
done
পড়ার সময়
লিনাক্সে ইনপুট পুনঃনির্দেশ
আমরা ফাইলের বিষয়বস্তুকে while loop-এ রিডাইরেক্ট করতে পারি ইনপুট পুনঃনির্দেশ অপারেটর ব্যবহার করে (<) .
while read LREAD
do
echo ${LREAD}
done < /etc/passwd | head -n 5
আপনি ফাইলের নামটি একটি ভেরিয়েবলে সংরক্ষণ করতে পারেন এবং এটি একটি পুনঃনির্দেশ অপারেটরের মাধ্যমে পাস করতে পারেন৷
৷FILENAME="/etc/passwd"
while read LREAD
do
echo ${LREAD}
done < ${FILENAME}
আপনি আপনার স্ক্রিপ্টে একটি যুক্তি হিসাবে ফাইলের নামগুলিও পাস করতে পারেন৷
while read LREAD
do
echo ${LREAD}
done < $1 | head -n 5
অভ্যন্তরীণ ক্ষেত্র বিভাজক
আপনি বিভিন্ন ধরনের ফাইল ফরম্যাটের সাথে কাজ করতে পারেন (CSV , TXT , JSON ) এবং আপনি একটি কাস্টম ডিলিমিটারের উপর ভিত্তি করে ফাইলের বিষয়বস্তু বিভক্ত করতে চাইতে পারেন। এই ক্ষেত্রে, আপনি "অভ্যন্তরীণ ক্ষেত্র বিভাজক (IFS) ব্যবহার করতে পারেন৷ ” ফাইলের বিষয়বস্তু বিভক্ত করতে এবং ভেরিয়েবলে সংরক্ষণ করতে।
আমাকে এটা কিভাবে কাজ করে প্রদর্শন করা যাক. /etc/passwd দেখুন ফাইল যার একটি কোলন আছে (:) ডিলিমিটার হিসাবে। আপনি এখন একটি লাইন থেকে প্রতিটি শব্দকে বিভক্ত করতে পারেন এবং এটি একটি পৃথক ভেরিয়েবলে সংরক্ষণ করতে পারেন৷
নীচের উদাহরণে, আমি /etc/passwd বিভক্ত করছি আমার বিভাজক হিসাবে একটি কোলন সহ ফাইল এবং প্রতিটি বিভক্তকে বিভিন্ন ভেরিয়েবলে সংরক্ষণ করে।
while IFS=":" read A B C D E F G
do
echo ${A}
echo ${B}
echo ${C}
echo ${D}
echo ${E}
echo ${F}
echo ${G}
done < /etc/passwd
আমি উপরের স্ক্রিনশটটিতে স্ক্রিনশটের আকার বিবেচনা করে শুধুমাত্র একটি লাইন বিভক্ত প্রদর্শন করেছি৷
লিনাক্সে খালি লাইনগুলি
আপনি যখন লুপ করেন তখন খালি লাইনগুলি উপেক্ষা করা হয় না৷ ফাইলের বিষয়বস্তুর মাধ্যমে। এটি প্রদর্শন করার জন্য আমি নীচের বিষয়বস্তু সহ একটি নমুনা ফাইল তৈরি করেছি। এখানে 4টি লাইন এবং কয়েকটি খালি লাইন রয়েছে, অগ্রণী হোয়াইটস্পেস, ট্রেইলিং হোয়াইট স্পেস, লাইন 2 এ ট্যাব অক্ষর এবং কিছু এস্কেপ অক্ষর (\n এবং \t )।

while read LREAD
do
echo ${LREAD}
done < testfile
ফলাফল দেখুন, ফাঁকা লাইন উপেক্ষা করা হয় না. এছাড়াও, লক্ষণীয় একটি আকর্ষণীয় বিষয় হল কিভাবে সাদা স্থানগুলি পড়ুন দ্বারা ছাঁটাই করা হয় আদেশ ফাইলের বিষয়বস্তু পড়ার সময় ফাঁকা লাইন উপেক্ষা করার একটি সহজ উপায় হল -z দিয়ে পরীক্ষা অপারেটর ব্যবহার করা পতাকা যা স্ট্রিং দৈর্ঘ্য শূন্য কিনা তা পরীক্ষা করে। এখন একই উদাহরণের পুনরাবৃত্তি করা যাক কিন্তু এবার একটি পরীক্ষা অপারেটরের সাথে।
while read LREAD
do
if [[ ! -z $LREAD ]]
then
echo ${LREAD}
fi
done < testfile
এখন আউটপুট থেকে, আপনি দেখতে পাচ্ছেন খালি লাইনগুলি উপেক্ষা করা হয়েছে।
এস্কেপ ক্যারেক্টার
এস্কেপ অক্ষর যেমন \n , \t , \c একটি ফাইল পড়ার সময় প্রিন্ট করা হবে না। এটি প্রদর্শনের জন্য আমি একই নমুনা ফাইল ব্যবহার করছি যাতে কয়েকটি এস্কেপ অক্ষর রয়েছে।

while read LREAD
do
echo ${LREAD}
done < testfile
আপনি আউটপুট এস্কেপ অক্ষর থেকে দেখতে পারেন তাদের অর্থ হারিয়েছে এবং শুধুমাত্র n এবং t \n এর পরিবর্তে মুদ্রিত হয় এবং \t . আপনি -r ব্যবহার করতে পারেন ব্যাকস্ল্যাশ ব্যাখ্যা প্রতিরোধ করতে।
while read -r LREAD
do
echo ${LREAD}
done < testfile
এই নিবন্ধের জন্য এটি। কোনো প্রতিক্রিয়া বা টিপস থাকলে আমরা আপনার কাছ থেকে ফিরে শুনতে চাই। আপনার মতামত আমাদের আরও ভাল কন্টেন্ট তৈরি করতে সাহায্য করে। পড়তে থাকুন এবং সমর্থন করতে থাকুন৷