ট্র্যাক
/
Bash
Bash
/
সিলেবাস
/
ভ্যারিয়েবল
ভ্

ভ্যারিয়েবল মধ্যে Bash

{one: "১টি অনুশীলনী", other: "%{count}টি অনুশীলনী"}

ভ্যারিয়েবল সম্পর্কে

ভ্যারিয়েবল

ভ্যারিয়েবল হলো ডেটা রাখার জায়গা। Bash-এ দুই ধরনের ডেটা থাকে: স্ট্রিং আর অ্যারে। অ্যারে নিয়ে কথা বলব পরে।

এভাবে একটি ভ্যারিয়েবলে মান অ্যাসাইন করা হয়

name="value"
Note

গুরুত্বপূর্ণ: সমান চিহ্নের দুই পাশে কোনো ফাঁকা জায়গা থাকা চলবে না!

এই উদাহরণের মতো ফাঁকা জায়গা থাকলে,

x = 10

bash তখন = আর 10 এই দুটি আর্গুমেন্ট নিয়ে x কমান্ডটি কল করতে যাবে!

ভ্যারিয়েবলকে প্যারামিটার-ও বলা হয়। এই ডকুমেন্টে দুটি শব্দই একই অর্থে ব্যবহৃত হবে।

bash যে গুরুত্বপূর্ণ প্যারামিটারগুলো ব্যবহার করে বা সেট করে, তার কয়েকটি হলো:

  • PATH -- এক্সটার্নাল কমান্ড খুঁজে বের করতে ব্যবহৃত ডিরেক্টরিগুলোর কোলন দিয়ে আলাদা করা একটি তালিকা।
  • IFS -- "ইন্টারনাল ফিল্ড সেপারেটর"। এটি কীভাবে ব্যবহার হয়, নিচে দেখব।
  • PWD -- আপনার বর্তমান ওয়ার্কিং ডিরেক্টরি। এর মান pwd কমান্ডের আউটপুটের সমান হবে।
  • RANDOM -- 0 থেকে 32767-এর মধ্যে একটি সিউডো-র‍্যান্ডম ইন্টিজার।
  • BASH_VERSION -- চলমান bash ইনস্ট্যান্সের ভার্সন স্ট্রিং।

ভ্যারিয়েবলের নাম

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

Caution

সব বড় হাতের অক্ষরে লেখা ভ্যারিয়েবল নাম এড়িয়ে চলাই ভালো অভ্যাস। শেল তার প্যারামিটারগুলোর জন্য এই রীতিটাই ব্যবহার করে, আর বিশেষ অর্থ বহন করা শেল প্যারামিটার ভুলে ওভাররাইট করে ফেলা আপনি চাইবেন না। যেমন: 1, 2, 3

প্যারামিটার এক্সপ্যানশন

$varname সিনট্যাক্স দিয়ে আপনি একটি প্যারামিটারের মান পেয়ে যান।

x=10
echo "The value of x is $x"

আশপাশের লেখার সাথে ভ্যারিয়েবলের নাম যাতে গুলিয়ে না যায়, সেজন্য ভ্যারিয়েবলের নামটি দ্বিতীয় বন্ধনী {}-এর ভেতরে রাখতে পারেন। যেমন 10x10 স্ট্রিংটি প্রিন্ট করতে

echo "${x}x$x"
# or
echo "${x}x${x}"

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

পজিশনাল প্যারামিটার

কমান্ড ও আর্গুমেন্ট পাঠে যেমন আলোচনা করেছি, কমান্ড আর্গুমেন্ট নিতে পারে। Bash স্ক্রিপ্টও এর ব্যতিক্রম নয়। বর্তমান bash ইনস্ট্যান্সে যেসব আর্গুমেন্ট দেওয়া হয়, তাদের পজিশনাল প্যারামিটার বলা হয়। এগুলো এই বিশেষ প্যারামিটারগুলোর মাধ্যমে পাওয়া যায়:

  • $1 -- প্রথম পজিশনাল প্যারামিটার
  • $2 ... $9 -- পরের প্যারামিটারগুলো
  • ${10} ... -- দুই অঙ্কের সংখ্যার জন্য দ্বিতীয় বন্ধনী লাগে।
  • $0 -- বর্তমান স্ক্রিপ্টের নাম।

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

বিশেষ পজিশনাল প্যারামিটার

পজিশনাল প্যারামিটার নিয়ে কাজ করতে সাহায্য করে এমন কিছু বিশেষ প্যারামিটার আছে।

  • $# এক্সপ্যান্ড হয়ে পজিশনাল প্যারামিটারগুলোর সংখ্যা দেয়।
  • "$@" এক্সপ্যান্ড হয়ে সব পজিশনাল প্যারামিটারের তালিকা দেয়, প্রতিটি আলাদা শব্দ হিসেবে।
  • "$*" এক্সপ্যান্ড হয়ে একটি স্ট্রিং দেয়, যেখানে সব পজিশনাল প্যারামিটার একটি ক্যারেক্টার দিয়ে জোড়া লাগানো থাকে।
    • জোড়া লাগানোর ক্যারেক্টারটি $IFS ভ্যারিয়েবলের প্রথম ক্যারেক্টার, যা ডিফল্টভাবে একটি স্পেস।

নিরাপদে কোটের মধ্যে রেখে পজিশনাল প্যারামিটার অন্য কমান্ডে পাঠানোর সবচেয়ে নিরাপদ উপায় হলো "$@"। পজিশনাল প্যারামিটারগুলোর ওপর লুপ চালাতেও এটাই ব্যবহার করবেন:

for arg in "$@"; do
    do_something_with "$arg"
done

বাস্তবে "$*"-এর চেয়ে "$@"-ই বেশি ব্যবহার হয়।

কমান্ড সাবস্টিটিউশন

bash স্ক্রিপ্টে খুব বেশি করা একটি কাজ হলো কোনো কমান্ডের আউটপুট ধরে নিয়ে একটি ভ্যারিয়েবলে রেখে দেওয়া। এজন্য ব্যবহার করবেন কমান্ড সাবস্টিটিউশন।

var=$(command)

যেমন, একটি স্ট্রিংকে বড় হাতের অক্ষরে রূপান্তর করতে পারেন এভাবে:

text="Hello world!"
uppercase=$(echo "$text" | tr '[:lower:]' '[:upper:]')
echo "$uppercase"
# => HELLO WORLD!

প্যারামিটার এক্সপ্যানশন নিয়ে আরও

ভ্যারিয়েবল ও স্ট্রিং নিয়ে কাজ করার জন্য bash-এ অনেক বিল্ট-ইন সুবিধা আছে, তাই এক্সটার্নাল কমান্ড কল করার দরকার পড়ে না।

  • টেক্সট বড় হাতের অক্ষরে রূপান্তর। আগের অংশে দেখিয়েছি কীভাবে tr দিয়ে টেক্সট বড় হাতের অক্ষরে করা যায়। bash-এ করতে হলে:

    echo "${text^^}"
    

    একইভাবে ${text,,} মানটিকে ছোট হাতের অক্ষরে করে।

  • ভ্যারিয়েবল খালি থাকলে একটি ডিফল্ট মান দেওয়া।

    default="nothing here"
    result=""
    echo "${result:-$default}"
    # => nothing here
    
  • খোঁজা ও প্রতিস্থাপন।

    text="Hello world!"
    echo "${text//[aeiou]/X}"
    # => HXllX wXrld!"
    

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

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে