এই সংক্ষিপ্ত টিউটোরিয়াল আপনাকে শিখাবে কিভাবে আপনার ব্যাশ/শেল স্ক্রিপ্ট থেকে ইউজারের টাইপড ইনপুট নেওয়া যায়। এটি শিখা সহজ, করা সহজ — পড়তে থাকুন!
read কমান্ড
শেল স্ক্রিপ্টে ইউজার ইনপুট পড়তে恰当ভাবে নামকৃত read কমান্ড ব্যবহার করুন। এর সিনট্যাক্স:
read OPTIONS VARIABLES
লক্ষ্য করুন:
- read কমান্ড স্ট্যান্ডার্ড ইনপুট- থেকে একটি লাইন পড়ে সেটি ফিল্ডে ভাগ করে
- সাধারণত স্ট্যান্ডার্ড ইনপুট হল কিবোর্ড ইনপুটসহ টার্মিনাল, কিন্তু আপনি read কমান্ডে ইনপুট পাইপ বা রিডাইরেক্ট ও করতে পারেন
- ইউজারের দৃষ্টিকোণ থেকে, তারা প্রম্পট পাবে এবং কিছু টাইপ করে এন্টার কী চাপাতে হবে — তারপর স্ক্রিপ্ট দেওয়া ইনপুট দিয়ে চালু হবে
- OPTIONS হল নিচের টেবিলের অপশন ফ্ল্যাগের তালিকা যা read কমান্ডের আচরণ পরিবর্তন করবে
- VARIABLES হল ভ্যালুগুলোর তালিকা যা স্পেস দিয়ে আলাদা করে স্ক্রিপ্টে পাস হবে
- -p অপশন ব্যবহার করলে এর সাথে একটি ম্যাচিং প্রম্পট লিস্ট দিয়ে ইউজাকে বলা যায় কী ইনপুট দিতে হবে
- যেহেতু একাধিক VARIABLES স্পেস দিয়ে দেওয়া যায়, যে কোনো ভ্যালুতে স্পেস বা স্পেশাল ক্যারেক্টার থাকলে সেটি কোটেশন মার্কে রাখতে হবে
| read সাধারণ ব্যবহৃত অপশন | |
|---|---|
| -a array | পড়া শব্দগুলো ARRAY ভেরিয়েবলের সিকোয়েনশিয়াল ইনডেক্সে অ্যাসাইন করে, শূন্য থেকে শুরু করে |
| -p prompt | নিউলাইন ছাড়া PROMPT স্ট্রিং আউটপুট করে ইনপুট পড়ার আগে |
| -r | ব্যাকস্ল্যাশকে যেকোনো ক্যারেক্টার ইস্কেপ করার অনুমতি না দেয় |
| -s | টার্মিনাল থেকে আসা ইনপুট ইকো (দেখানো) না করে |
| -t timeout | TIMEOUT সেকেন্ডের মধ্যে পূর্ণ লাইন ইনপুট না পড়া গেলে টাইম আউট হয়ে ফেইলচার রিটার্ন করে |
স্বাভাবিকভাবে, read কমান্ডের ইউজার ম্যানুয়াল, সমস্ত উপলব্ধ অপশনসহ পাওয়া যাবে:
man read
Read কমান্ড ব্যবহার করে ইনপুটের জন্য প্রম্পট করা
ব্যাশ/শেল স্ক্রিপ্টে read কমান্ড ব্যবহার করে ইউজার ইনপুট গ্রহণের কিছু উদাহরণ নিচে দেওয়া হলো।
আর তার আগে…
লিনাক্স শেল স্ক্রিপ্টে ‘#!’ কী?
শুধু ইনপুট নেওয়া
এটি কমান্ডের সবচেয়ে সহজ ব্যবহার — শুধু একটি মান ইনপুট থেকে পড়া:
#!/bin/bash read word echo You just typed $word
উপরে ইনপুট $word ভেরিয়েবলে পড়া হয়েছে, এবং echo কমান্ড দিয়ে ডিসপ্লে করা হয়েছে। আবার বলছি, এখানে কোনো প্রম্পট থাকবে না — স্ক্রিন থেমে থাকবে এবং ইউজারের টাইপ করার জন্য অপেক্ষা করবে, এন্টার কী চাপালে স্ক্রিপ্ট দেওয়া ইনপুট দিয়ে রিজিউম হবে।
একাধিক ইনপুট ভ্যালু নেওয়ার জন্য কমান্ডে আরও ভেরিয়েবল যোগ করুন, স্পেস দিয়ে আলাদা করে:
#!/bin/bash read word1 word2 echo You just typed $word1 followed by $word2
মেসেজসহ ইনপুটের জন্য প্রম্পট করা
ইনপুটের জন্য স্ক্রিন থেমে থাকা ইউজার-ফ্রেন্ডলি নয়। সাধারণত আপনি ইউজাকে বলবেন কী ইনপুট দিতে হবে — যেমন ইউজারনেম বা পাসওয়ার্ড। এই উদাহরণটি ঠিক সেটাই করে:
#!/bin/bash read -p 'Username: ' username read -sp 'Password: ' password echo Your username is $username, we will not display your password
উপরে, -p অপশন ব্যবহার করে একটি প্রম্পট দেখানো হয়েছে — ইউজাকে বলে দেওয়া হয়েছে প্রতিটি ভেরিয়েবলের জন্য কী ইনপুট দিতে হবে।
-s অপশনও পাসওয়ার্ড ভেরিয়েবলের জন্য ব্যবহার করা হয়েছে, যা টাইপ করা ইনপুট সাইলেন্ট করে (দেখায় না)।
মেসেজসহ একাধিক ইনপুটের জন্য প্রম্পট করা
আপনি প্রম্পট দিয়ে একাধিক মান পড়তে পারেন:
#!/bin/bash read -p 'Please type your first and last name: ' first last echo Your name is $first $last
Yes/No-এর জন্য প্রম্পট করা
এখানে দেখানো হলো কিভাবে একটি সিম্পল yes/no প্রশ্ন করা যায় while loop এবং case statement ব্যবহার করে। y বা Y দিয়ে শুরু হওয়া যেকোনো স্ট্রিং yes হিসেবে ইন্টারপ্রেট হবে, n বা N দিয়ে শুরু হওয়া যেকোনো স্ট্রিং no হিসেবে ইন্টারপ্রেট হবে:
#!/bin/bash while true; do read -p "Do you wish to perform this action?" yesno case $yesno in [Yy]* ) echo "You answered yes" ;; [Nn]* ) echo "You answered no, exiting" exit ;; * ) echo "Answer either yes or no!";; esac done
স্ক্রিপ্টটি no পাওয়া পর্যন্ত চলবে — এবং যেকোনো অ্যাকশন করতে ইউজাকে প্রম্পট করার জন্য সহজে মডিফাই করা যায়।