Monday, August 8, 2016

লিনাক্সে টার্মিনাল ব্যবহার পর্ব-২

লিনাক্সে টার্মিনাল ব্যাবহারপর্ব -১  এ আমরা দেখেছিলাম কিভাবে কমান্ড লাইন অর্থ্যাৎ ব্যাশ এর কাজ শুরু করবো। আজ আমরা তার কিছু অ্যাডভান্স কাজ এবং কমান্ডস দেখবো। প্রথমেই দেখা যাক আমরা লিনাক্সের টার্মিনালে কিভাবে কিছু ‍প্রিন্ট করবো। ব্যাপারটা খুবই সহজ। জাষ্ট লিখব
echo “Text here.”

এখানে আমরা একটা ষ্ট্রিং নিয়ে কাজ করেছি। চাইলে আমরা ষ্ট্রিংটাকে আগে রিড করেও তারপর প্রিন্ট করতে পারি। তাহলে রিড করার জন্য আমাদের লিখতে হবে-
read x

তাহলেই টার্মিনালে ইনপুট চাইবে। সেখানে আমরা ইনপুট দিলে সেটা x ভেরিয়েবলে স্টোর হবে। এই ভেরিয়েবল যেকোন টাইপ হতে পারে। এবার আমরা x কে প্রিন্ট করবো। লিখব-
echo $x

এখানে ডলার সাইন নির্দেশ করছে এটা একটা ভেরিয়েবল। ডলার যেমন দামি, এটাও তেমন দামি জিনিস। হা হা…
আচ্ছা এবার আমরা একটা নিউমেরিকাল ইনপুট দিয়ে দেখি প্রিন্ট হয় কি না।

ওয়াও। দ্যাটস ওসাম।
ব্যাপারটা ওনেকটা সি প্রোগ্রামিং এর মত তাইনা? অবশ্য একটা সমস্য আছে। সেখানে আমরা একবারে একটা ফাইলে প্রোগ্রাম লিখি এবং সেটাকে একবারে রান করে ইনপুট দিয়ে আউটপুট পাই। কিন্তু এখানে এক লাইন এক লাইন করে লিখতে হয়।
আচ্ছা যদি এখানেও যদি পুরো প্রোগ্রাম একসাথে লিখে রান করা যেত তবে কেমন হতো তুমি বলতো? এই পথ যদি না শেষ হয় তবেকেমন হত তুমি বলতো? অনেক ভালো।
ওয়েল লিনাক্স আমাদের সে সুযোগও দিচ্ছে। এটাকে স্ক্রিপ্টিং বলে। আমরা আমাদের প্রয়োজনীয় কমান্ডগুলি একটা ফাইলে লিখবো, যেটাকে বলা হয় শেল। সি প্রোগ্রাম যেমন .c এক্সটেনশন দিয়ে শেষ হয়, শেল ফাইল তেমনি .sh এক্সটেনশন দিয়ে শেষ হয়।

ওকে তাহলে আমরা একটা ফাইল ক্রিয়েট করে সেটাতে কিছু কমান্ড লিখি। ফাইল ক্রিয়েটের জন্য আমরা যে কোন একটা টেক্সট এডিটর ব্যবহার করবো। আমি এখানে nano ব্যাবহার করছি। nano ওপেন করার জন্য আমরা টর্মিনালে শুধু লিখবো- nano
টেক্সট এডিটরে আমরা আমাদের কমান্ডগুলো লিখবো। লেখা শেষ হলে ctrl+x চাপবো। তখন এডিটর আমাদের কাছে জানতে চাইবে আমরা কি ফাইলটি সেভ করবো কি না। সেভ করলে y না করলে n। আমরা সেভ করবো। y লিখে এন্টার চাপবো।


তারপর আমাদের কাছে ফাইলের নাম চাইবে। আমরা ফাইলের নাম লিখে এন্টার করবো। এবং অবশ্যই নামের শেষ .sh দিতে ভুলবো না।

ফাইল সেভ করলে আমরা আবার টার্মিনালে ফেরত আসবো।

এবার আমরা ফাইলটা ওপেন করবো, অর্থাৎ রান করবো। সেজন্য আমরা লিখবো-
./filename.sh


ও ও…. এটা কি হলো? আমাদের বলছে পারমিশন নেই। কেমনে কি? ওকে তাহলে আমরা একটু পারমিশন নিয়ে আলোচনা করি।
লিনাক্সের পারমিশনকে আমরা দুই ক্যাটাগরিতে নিতে পারি। এক. এক্সেসিবিলিটি এবং দুই. ইউজার.
এক্সেসিবিলিটি পারমিশন তি ধরনের। রিড পারমিশন যেটার পয়েন্ট হলো 4, রাইট পারমিশন যেটার পয়েন্ট 2 এবং এক্সিকিউশন পারমিশন যেটার পয়েন্ট 1. এখন কোন ফাইলের পারমিশন যদি থাকে 3 তাহলে আমরা বুঝবো সেটার শুধুমাত্র এক্সিকিউশন এবং রাইট পারমিশন আছে (1+2=3)। একইভাবে যদি কোন ফাইলের যদি পারমিশন পয়েন্ট থাকে 7 তাহলে আমরা বুঝবো সেটার সব পারমিশন আছে (1+2+4=7)।
আবার তিন ধরনের ইউজার হলো ওনার, গ্রুপ(নেটওয়ার্ক গ্রুপ) এবং আদার্স/পাবলিক। তিন ধরনের ইউজারের জন্য তিনটি পারমিশন পয়েন্ট।
তো কোন ফাইলের পারমিশন সেট করার কমান্ড হলো-
chmod *** filename.sh

এখানে তিনটি স্টার যথাক্রমে ওনার, গ্রুপ এবং আদার্স/পাবলিক ইউজারের জন্য। সুতরাং আমরা চাইলে এক ইউজারের জন্য এক ধরনের পারমিশন দিতে পারবো।

আচ্ছা এবার তাহলে আমরা আমাদের ফাইলটিতে পারমিশন দি। যেহেতু আমরা কোন নেটওয়ার্কের সাথে কানেক্টেড না। তাহলে আমরাই ওনার আমরাই গ্রুপ আমরাই আদার্স/পাবলিক এবং আমরা সবাই রাজা আমাদের এই রাজার রাজত্বে। সুতরাং আমরা ফুল পারমিশন দিব।
chmod 777 filename.sh

এবার আমরা আমাদের ফাইল আবার রান করি।

ওয়াও। এটা কাজ করছে।
আচ্ছা তাহলে আমরা এবার একটা ছোটখাট প্রোগ্রাম করি যেটাতে দুটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল দেখাবে।
তো আমরা nano ওপেন করে লিখবো এবং add.sh নাম দিয়ে সেভ করবো-

পারমিশন দিব-
chmod 777 add.sh
এবং রান করে ইনপুট দিব।

এখানে কিছু বিষয় খেয়াল রাখতে হবে। যেমন অপ্রয়জনীয় স্পেস দেয়া যাবেনা। সেমিকমা দেয়া যাবেনা ইত্যাদি।
আচ্ছা এবার আমরা একটু কন্ডিশনাল প্রোগ্রামিং শিখবো। অর্থাৎ IF ELSE এর কাজ। তো দেখা যাক-
আমরা একটা প্রোগ্রাম লিখবো যেটা একটি সংখা ইনপুট নিয়ে সেটা কি পজিটিভ, নেগেটিভ নাকি জিরো সেটা দেখাবে। যার নাম দিলাম cond.sh-

পারমিশন সেট করে রান করবো এবং আউটপুট দিব।

এখানে -gt মানে হলো grater then, -lt মানে হলো less then, আর fi নির্দেশ করছে আমাদের পূর্বক্ত if স্টেটমেন্ট শেষ হবে এখানে।
আচ্ছা এই পর্বের বিদায়বেলায় আমরা লুপিং শুরু করে যাব। আপাতত আমরা শুধু ফর লুপ নিয়ে মাথা ঘামাবো। (কারন এর বেশী আমি কিছু পারিনা।)
তাহলে আমরা একটা প্রোগ্রাম লিখি যেটা একটি সংখ্যা ইনপুট নিবে এবং ১ থেকে ওই সংখ্যা পর্যন্ত প্রিন্ট করবে এবং শেষে সবগুলো সংখ্যার যোগফল প্রিন্ট করবে। যেটার নাম দিলাম loop.sh

ব্যাস এ যেহেতু সেকেন্ড ব্রেস ব্যাবহার হয়না। সেহেতু আমরা আমাদের লুপ এর ভিতরের ষ্টেটমেন্টগুলো এবং এই দুটি সিনট্যাক্সের ভিতরে লিখবো।
রান করার পর আমরা আউটপুট দেখলাম-

এই পর্ব এই পর্যন্তই। আবারও বলছি যেহেতু আমি লিনাক্সে পুরোপুরি নবিশ। সুতরাং ভুল হতে পারে। ক্ষমাসুন্দর দৃষ্টিতে দেখে জানানোর অনুরোধ করছি। শুদ্ধ করে নেব। ধন্যবাদ।

Md. Rasedur Rahman Roxy
Dept. of CSE
Bangladesh University of Business & Technology

No comments:

Post a Comment