ইউনিক্সের মূল আশার একটি ছিল যে এটি সাধারণ কম্পিউটার ব্যবহারকারীদের তাদের কম্পিউটার ফাইন-টিউন করতে ক্ষমতা দেবে যাতে সেগুলো তাদের অনন্য কাজের শৈলির সাথে মিলে যায়। দশক গুলোর মধ্যে কম্পিউটার কাস্টমাইজেশন সংক্রান্ত প্রত্যাশা কমে গিয়েছে, এবং অনেক ব্যবহারকারী তাদের অ্যাপ এবং ওয়েবসাইটের সংকলনকে তাদের "কাস্টম এনভায়রনমেন্ট" মনে করেন। এর একটি কারণ হলো অনেক অপারেটিং সিস্টেমের কম্পোনেন্টগুলো ওপেন নয়, তাই তাদের সোর্স কোড সাধারণ ব্যবহারকারীদের কাছে উপলব্ধ নয়।
কিন্তু লিনাক্স ব্যবহারকারীদের জন্য, কাস্টম প্রোগ্রাম অর্জনযোগ্য কারণ পুরো সিস্টেম টার্মিনালের মাধ্যমে উপলব্ধ কমান্ডগুলোর চারদিকে তৈরি। টার্মিনাল শুধু দ্রুত কমান্ড বা গভীর ট্রাবলশুটিং-এর জন্য একটি ইন্টারফেস নয়; এটি একটি স্ক্রিপ্টিং এনভায়রনমেন্ট যা আপনার ওয়ার্কলোড কমানতে পারে আপনার নীরস কাজগুলো ন देखकर।
প্রোগ্রামিং শিখতে কীভাবে
আপনি যদি কখনো কোনো প্রোগ্রামিং না করে থাকেন, তবে এটি দুটি ভিন্ন চ্যালেঞ্জের 형태로 চিন্তা করতে সাহায্য করতে পারে: একটি হলো কোড কীভাবে লেখা হয় তা বোঝা, এবং অন্যটি হলো কী কোড লিখতে হবে তা বোঝা। আপনি সিন্ট্যাক্স শিখতে পারেন— কিন্তু আপনি দুর항 যেতে পারবেন না ভাষা-তে কোন শব্দগুলো উপলব্ধ তা না জেনে। প্র্যাকটিসে, আপনি দুটি কনসেপ্ট একসাথে শিখতে শুরু করেন কারণ শব্দ ছাড়া সিন্ট্যাক্স শিখা যায় না, তাই প্রাথমিকভাবে, আপনি বেসিক কমান্ড এবং বেসিক প্রোগ্রামিং স্ট্রাকচার ব্যবহার করে সাধারণ টাস্ক লিখেন। একবার আপনি বেসিকসের সাথে কমফরটেবল হলে, আপনি ভাষার আরও অনেক অংশ এক্সপ্লোর করতে পারেন যাতে আপনার প্রোগ্রামগুলো আরও বড় এবং গুরুত্বপূর্ণ জিনিসগুলো করতে পারে।
ব্যাশে, আপনি যে অধিকাংশ শব্দগুলো ব্যবহার করেন সেগুলো লিনাক্স কমান্ড। সিন্ট্যাক্স হলো ব্যাশ। আপনি যদি ইতিমধ্যে ব্যাশ নিয়মিত ব্যবহার করেন, তবে ব্যাশ প্রোগ্রামিং-এ ট্রানজিশন তুলনামূলকভাবে সহজ। কিন্তু আপনি যদি ব্যাশ ব্যবহার না করেন, তবে আপনি জানতে খুশি হবেন যে এটি একটি সহজ ভাষা যা স্পষ্টতা এবং সাদگیের জন্য তৈরি।
ইন্টারেক্টিভ ডিজাইন
কখনো কখনো, প্রোগ্রামিং শিখতে সবচেয়ে কঠিন জিনিস হলো বোঝা যে একটি কম্পিউটার আপনার জন্য কী করতে পারে। অপরিহার্যভাবে, যদি একটি কম্পিউটার নিজে থেকে আপনি যা করছেন সেটি সব করতে পারত, তবে আপনাকে কখনো কম্পিউটার ছুঁয়ে দিতে হতো না। কিন্তু বাস্তবতা হলো মানুষই গুরুত্বপূর্ণ। আপনার কম্পিউটার আপনাকে কীভাবে সাহায্য করতে পারে তা খুঁজে বের করার চাবি হলো সপ্তাহে আপনি যে কাজগুলো বারবার করেন সেগুলোর দিকে লক্ষ্য করা। কম্পিউটার পুনরাবৃত্তি খুব ভালো হ্যান্ডেল করে।
কিন্তু আপনার কম্পিউটারকে কিছু করতে বলতে পারার জন্য, আপনাকে জানতে হবে কীভাবে সেটি করতে হয়। এটি একটি ক্ষেত্রে ব্যাশ এক্সেল করে: ইন্টারেক্টিভ প্রোগ্রামিং। আপনি টার্মিনালে একটি অ্যাকশন পারফর্ম করার সাথে সাথে, আপনি কীভাবে সেটি স্ক্রিপ্ট করবেন সেটিও শিখছেন।
উদাহরণস্বরূপ, আমাকে একবার বড় পরিমাণ পিডিএফ বই কম-ইঙ্ক এবং প্রিন্টার-ফ্রেন্ডলি ভার্সনে কনভার্ট করার কাজ দিয়া হয়েছিল। এটার একটি উপায় হলো পিডিএফ একটি পিডিএফ এডিটরে খুলুন, প্রতিটি চিত্র সিলেক্ট করুন—পেজ ব্যাকগ্রাউন্ড এবং টেক্সচারও চিত্র হিসেবে গণ্য হয়—সেগুলো ডিলিট করুন, এবং তারপর একটি নতুন পিডিএফ হিসেবে সেভ করুন। শুধু একটি বই এইভাবে করলে আধা দিন লাগত।
আমার প্রথম চিন্তা ছিল পিডিএফ এডিটর স্ক্রিপ্ট করার পদ্ধতি শিখব, কিন্তু দিন যাপন করার পর গবেষণায়, আমি এমন কোনো পিডিএফ এডিটিং অ্যাপ্লিকেশন খুঁজে পাইনি যা স্ক্রিপ্ট করা যায় (খুব বদসूरत মাউস-অটোমেশন হ্যাকস বাদে)। তাই আমি টার্মিনালের ভেতর থেকে কাজটি সম্পন্ন করার উপায় খুঁজে বের করার দিকে মনোযোগ দিলাম। এর ফলে বেশ কিছু নতুন আবিষ্কার হয়েছে, যাতে GhostScript, পোস্টস্ক্রিপ্টের ওপেন সোর্স ভার্সন (যে প্রিন্টার ভাষা পিডিএফের ভিত্তি)। গোষ্ঠকScript কাজে কয়েক দিন ব্যবহার করার পর, আমি নিশ্চিত হয়েছিলাম যে এটি আমার সমস্যার সমাধান।
একটি বেসিক স্ক্রিপ্ট ফর্মুলেট করা যা কমান্ডটি চালাবে শুধু কমান্ড এবং অপশনগুলো কপি করার বিষয় ছিল যা আমি পিডিএফ থেকে চিত্র মুছে ফেলতে ব্যবহার করেছিলাম এবং সেগুলো একটি টেক্সট ফাইলে পেস্ট করি। ফাইলটি স্ক্রিপ্ট হিসেবে চালালে, 추정컨데, একই ফলাফল দেবে।
ব্যাশ স্ক্রিপ্টে আর্গুমেন্ট পাস করা
টার্মিনালে একটি কমান্ড চালানোর এবং একটি শেল স্ক্রিপ্টে একটি কমান্ড চালানোর মধ্যে পার্থক্য হলো প্রথমটি ইন্টারেক্টিভ। একটি টার্মিনালে, আপনি চলাকালীন জিনিসগুলো এডজাস্ট করতে পারেন। উদাহরণস্বরূপ, যদি আমি example_1.pdf প্রসেস করেছি এবং পরবর্তী ডকুমেন্ট প্রসেস করার জন্য প্রস্তুত হই, আমার কমান্ডটি এডাপ্ট করার জন্য আমাকে শুধু ফাইলনেম পরিবর্তন করতে হবে।
একটি শেল স্ক্রিপ্ট ইন্টারেক্টিভ নয়। আসলে, একটি শেল স্ক্রিপ্ট এগজিস্ট করার একমাত্র কারণ হলো যাতে আপনাকে সেটির দিকে লক্ষ্য করতে না হয়। এই কারণেই কমান্ডগুলো (এবং সেগুলো চালানোর শেল স্ক্রিপ্টগুলো) আর্গুমেন্ট গ্রহণ করে।
একটি শেল স্ক্রিপ্টে, কিছু প্রিডিফাইনড ভেরিয়েবল থাকে যা স্ক্রিপ্ট কীভাবে শুরু হয় তা রিফ্লেক্ট করে। প্রাথমিক ভেরিয়েবল হলো $0, এবং এটি স্ক্রিপ্ট শুরু করার জন্য ইস্যু করা কমান্ডকে রিপ্রেজেন্ট করে। পরবর্তী ভেরিয়েবল হলো $1, যা শেল স্ক্রিপ্টে পাস করা প্রথম "আর্গুমেন্ট"-কে রিপ্রেজেন্ট করে। উদাহরণস্বরূপ, কমান্ড echo hello-এ, কমান্ড echo হলো $0, এবং শব্দ hello হলো $1। কমান্ড echo hello world-এ, কমান্ড echo হলো $0, hello হলো $1, এবং world হলো $2।
একটি ইন্টারেক্টিভ শেলে:
$ echo hello world
hello world
একটি নন-ইন্টারেক্টিভ শেল স্ক্রিপ্টে, আপনি করতে পারেন একই জিনিস খুব শाब্দিকভাবে। এই টেক্সটটি একটি টেক্সট ফাইলে টাইপ করুন এবং এটি hello.sh হিসেবে সেভ করুন:
echo hello world
এখন স্ক্রিপ্টটি চালান:
$ bash hello.sh
hello world
এটি কাজ করে, কিন্তু এটি এই সত্যের সুবিধা নেয় না যে একটি স্ক্রিপ্ট ইনপুট নিতে পারে। hello.sh-কে এইভাবে পরিবর্তন করুন:
echo $1
দুই আর্গুমেন্ট কোটেশন মার্কস দিয়ে একসাথে গ্রুপ করে স্ক্রিপ্টটি চালান:
$ bash hello.sh "hello bash"
hello bash
আমার পিডিএফ রিডাকশন প্রজেক্টের জন্য, আমার এই ধরনের নন-ইন্টারেক্টিভিটির জন্য একটি বাস্তব প্রয়োজন ছিল, কারণ প্রতিটি পিডিএফ কন্ডেন্স করতে বেশ কিছু মিনিট লাগত। কিন্তু ইনপুট গ্রহণকারী একটি স্ক্রিপ্ট তৈরি করে, আমি একবারে flera পিডিএফ ফাইল স্ক্রিপ্টে ফিড করতে পারতাম। স্ক্রিপ্ট প্রতিটি সিকোয়েনশিয়ালি প্রসেস করত, যা অর্ধেক ঘন্টা বা তার বেশি লাগতে পারত, কিন্তু এটি ছিল এমন অর্ধেক ঘন্টা যা আমি অন্যান্য কাজের জন্য ব্যবহার করতে পারতাম।
ফ্লো কন্ট্রোল
ব্যাশ স্ক্রিপ্ট তৈরি করা যেটি অনুমোদনযোগ্য, যা মূলত আপনার প্রয়োজনীয় টাস্ক পুনরাবৃত্তি করতে আপনার কৃত quy trìnhের ট্রান্সক্রিপ্ট। তবে, স্ক্রিপ্টগুলো আরও শক্তিশালী করা যায় ইনফর্মেশন কীভাবে তাদের মধ্য দিয়ে প্রবাহিত হয় সেটি কন্ট্রোল করে। একটি স্ক্রিপ্টের ডেটা প্রতিক্রিয়া পরিচালনার সাধারণ পদ্ধতিগুলো হলো:
- if/then
- for loops
- while loops
- case statements
কম্পিউটার বুদ্ধিমান নয়, কিন্তু তারা ডেটা কমপেয়ার এবং পার্স করার 데 ভালো। আপনি কিছু ডেটা অ্যানালিসিস সেটিতে বিল্ড করলে স্ক্রিপ্টগুলো অনেক বেশি বুদ্ধিমানের মতো অনুভব হবে। উদাহরণস্বরূপ, বেসিক hello.sh স্ক্রিপ্ট ইনপুট আছে নাই না, সেটি নির্বিশেষে চলে:
$ bash hello.sh foo
foo
$ bash hello.sh
$
যদি এটি কোনো ইনপুট না পাওয়া হলে একটি হেল্প মেসেজ দিত, তবে এটি আরও ইউজার-ফ্রেন্ডলি হত। এটি একটি if/then স্টেটমেন্ট, এবং আপনি যদি বেসিকভাবে ব্যাশ ব্যবহার করেন, তবে আপনি সম্ভবত জানতেন না যে ব্যাশে এমন একটি স্টেটমেন্ট আছে। কিন্তু প্রোগ্রামিংয়ের একটি অংশ হলো ভাষা শিখা, এবং একটু গবেষণার সাথে আপনি if/then স্টেটমেন্ট সম্পর্কে শিখবেন:
if [ "$1" = "" ]; then
echo "syntax: $0 WORD"
echo "আপনি যদি একাধিক শব্দ দেন, তবে কোটেশন মার্কসে ভাগ করুন।"
else
echo "$1"
fi
এই নতুন ভার্সনের hello.sh চালালে ফলাফল:
$ bash hello.sh
syntax: hello.sh WORD
আপনি যদি একাধিক শব্দ দেন, তবে কোটেশন মার্কসে ভাগ করুন।
$ bash hello.sh "hello world"
hello world
একটি স্ক্রিপ্টের মাধ্যমে কাজ করা
আপনি যেন পিডিএফ ফাইল থেকে চিত্র মুছে ফেলার কিছু খুঁজছেন, বা আপনার অस्त-ব্যস্ত ডাউনলোড ফোল্ডার ম্যানেজ করার কিছু, বা কুবেরনেটিস ইমেজ তৈরি এবং প্রোভিশন করার কিছু, ব্যাশ স্ক্রিপ্টিং শিখা ব্যাশ ব্যবহার করার এবং তারপর সেই স্ক্রিপ্টগুলোকে শুধু কমান্ডের তালিকা থেকে কিছুতে পরিণত করার উপায় শিখার বিষয় যা ইনপুটের প্রতিক্রিয়া জানায়। এটি সাধারণত আবিষ্কারের একটি প্রক্রিয়া: আপনি নতুন লিনাক্স কমান্ডগুলো আবিষ্কার করতে বাধ্য হবেন যা টেক্সট কমান্ড দিয়ে কাজগুলো পারফর্ম করতে পারে যা আপনি কখনো কল্পনা করিনি, এবং আপনি ব্যাশের নতুন ফাংশনগুলো খুঁজে পাবেন যা আপনার স্ক্রিপ্টগুলোকে আপনার চাওয়া সব ভিন্ন ভাবেই রান করার জন্য এডাপ্টেবল করে দেবে।
এই ট্রিকগুলো শিখার একটি উপায় হলো অন্য লোকের স্ক্রিপ্টগুলো পড়া। লোকেরা কীভাবে তাদের সিস্টেমে রোট কমান্ড অটোমেট করছে সেটির ফিল পান। যেটি আপনার কাছে পরিচিত মনে হয় সেটি দেখুন, এবং যেটি অপরিচিত সেগুলোর জন্য আরও তথ্য খুঁজুন।
আরেকটি উপায় হলো আমাদের ব্যাশ দিয়ে প্রোগ্রামিং-এর ইবুক ডাউনলোড করা। এটি আপনাকে ব্যাশ-নির্দিষ্ট প্রোগ্রামিং কনসেপ্ট পরিচয় করায়, এবং আপনি যা শিখবেন সেই কনস্ট্রাক্টস দিয়ে আপনি আপনার নিজস্ব কমান্ড তৈরি শুরু করতে পারেন। এবং অবশ্যই, এটি ডাউনলোড করার জন্য বিনামূল্য এবং ক্রিয়েটিভ কমন্স লাইসেন্সের অধীনে, তাই আজই আপনার কপি নিন।