এই নিবন্ধটি আমাদের চলমান ব্যাশ টিউটোরিয়াল সিরিজের অংশ। অন্যান্য প্রোগ্রামিং ভাষার মতো, ব্যাশও ভেরিয়েবল সরবরাহ করে।
ব্যাশ ভেরিয়েবলগুলি সেই তথ্যের জন্য অস্থায়ী সঞ্চয়স্থান সরবরাহ করে যা প্রোগ্রামের জীবদ্দশায় প্রয়োজন হবে৷
সিনট্যাক্স:
VARNAME=VALUE
দ্রষ্টব্য: "=" সাইন ইন ভেরিয়েবল অ্যাসাইনমেন্টের চারপাশে কোনো স্থান থাকা উচিত নয়। আপনি যখন VAR=VALUE ব্যবহার করেন, শেল “=” একটি প্রতীক হিসাবে দেখে এবং কমান্ডটিকে একটি পরিবর্তনশীল অ্যাসাইনমেন্ট হিসাবে বিবেচনা করে। আপনি যখন VAR =VALUE ব্যবহার করেন, শেল ধরে নেয় যে VAR অবশ্যই একটি কমান্ডের নাম হতে হবে এবং এটি চালানোর চেষ্টা করে৷
শেল ভেরিয়েবলের ধরন সম্পর্কে চিন্তা করে না। ভেরিয়েবল স্ট্রিং, পূর্ণসংখ্যা বা বাস্তব সংখ্যা সংরক্ষণ করতে পারে।
উদাহরণ. 1 সাধারণ ব্যাশ ভেরিয়েবল অ্যাসাইনমেন্ট ব্যবহার
নিম্নলিখিত স্ক্রিপ্টটি LIST নামে একটি ভেরিয়েবল তৈরি করে এবং "/var/opt/bin" মান নির্ধারণ করে। ভেরিয়েবল অ্যাক্সেস করতে, ভেরিয়েবলের নামের সাথে $ এর উপসর্গ দিন, যা আপনাকে সেই ভেরিয়েবলে সংরক্ষিত মান দেবে।
$ cat sample.sh #!/bin/bash LIST="/var/opt/bin/" ls -l $LIST
উপরের স্ক্রিপ্টটি চালান, যা নীচে দেখানো হিসাবে দীর্ঘ ফর্ম্যাটে /var/opt/bin তালিকাভুক্ত করবে।
$ ./sample.sh total 8 drwxrwsr-x 2 bin bin 4096 Jan 29 06:43 softwares drwxr-sr-x 5 root bin 4096 Sep 2 2009 llist
ব্যাশ ভেরিয়েবল স্কোপ – স্থানীয় এবং গ্লোবাল
Bash এ, ভেরিয়েবল ঘোষণা করতে হবে না। কিন্তু, যখন আপনি ভেরিয়েবলটি অ্যাক্সেস করেন যা এখন পর্যন্ত ব্যবহার করা হয়নি, আপনি কোন সতর্কতা বা ত্রুটি বার্তা পাবেন না। পরিবর্তে, এটি একটি ফাঁকা মান প্রদর্শন করবে।
<কেন্দ্র> কেন্দ্র>উদাহরণ 2. ব্যাশ ভেরিয়েবলে ফাঁকা মান
$ cat var1.sh #!/bin/sh echo "Variable value is: $VAR1" VAR1="GEEKSTUFF" echo "Variable value is: $VAR1" $ ./var1.sh Variable value is: Variable value is: GEEKSTUFF
উপরে দেখানো হিসাবে, প্রাথমিকভাবে ভেরিয়েবলের একটি ফাঁকা মান থাকবে, বরাদ্দ করার পরে, আপনি আপনার মানগুলি পেতে পারেন। এক্সপোর্ট কমান্ড একটি ইন্টারেক্টিভ শেল থেকে একটি ভেরিয়েবল এক্সপোর্ট করতে ব্যবহৃত হয়। রপ্তানি ভেরিয়েবলের সুযোগের উপর প্রভাব দেখায়।
উদাহরণ 3. এক্সপোর্ট ছাড়াই ব্যাশ ভেরিয়েবল
একটি ইন্টারেক্টিভ শেলের একটি মান সহ একটি পরিবর্তনশীল বরাদ্দ করুন এবং আপনার শেল স্ক্রিপ্টে এটি অ্যাক্সেস করার চেষ্টা করুন৷
$ VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
এখন, উপরের স্ক্রিপ্টটি নীচে দেখানো হিসাবে চালান।
$ ./var2.sh VAR2= VAR2=UNIX
তবুও আপনি ভেরিয়েবল VAR2 এর জন্য ফাঁকা মান পাবেন। শেল শুধুমাত্র বর্তমান শেলে LINUX-এর সাথে ভেরিয়েবল VAR2 সঞ্চয় করে। var2.sh কার্যকর করার সময়, এটি শেল তৈরি করে এবং এটি স্ক্রিপ্টটি কার্যকর করে। তাই ভেরিয়েবল VAR2-এর মান থাকবে না স্পন করা শেলে। অন্য প্রোগ্রাম দ্বারা উত্তরাধিকারসূত্রে প্রাপ্ত করার জন্য আপনাকে ভেরিয়েবলটি রপ্তানি করতে হবে - একটি শেল স্ক্রিপ্ট সহ, নীচে দেখানো হয়েছে৷
উদাহরণ 4. একটি ব্যাশ ভেরিয়েবল রপ্তানি করা
$ export VAR2=LINUX $ cat var2.sh #!/bin/bash echo "VAR2=$VAR2" VAR2=UNIX echo "VAR2=$VAR2"
এখন উপরের স্ক্রিপ্টটি চালান।
$ ./var2.sh VAR2=LINUX VAR2=UNIX $ $echo $VAR2 LINUX
এখন, আপনি লক্ষ্য করতে পারেন যে শেল স্ক্রিপ্ট var2.sh কার্যকর করার পরে, VAR2 এর মান হল LINUX। কারণ ভেরিয়েবলগুলি আপনার ইন্টারেক্টিভ শেলে ফেরত পাঠানো হবে না, যদি না আপনি বর্তমান শেলে স্ক্রিপ্টটি কার্যকর না করেন।
একটি ব্যাশ ভেরিয়েবল ঘোষণা করা
bash-এ declare স্টেটমেন্ট ব্যবহার করে, আমরা ভেরিয়েবলের জন্য নির্ধারিত মান সীমিত করতে পারি। এটি ভেরিয়েবলের বৈশিষ্ট্যগুলিকে সীমাবদ্ধ করে। একটি ঘোষণার বিবৃতিতে বিকল্পটি একটি ভেরিয়েবলের ধরন নির্ধারণ করতে ব্যবহৃত হয়।
সিনট্যাক্স:
declare option variablename
- declare হল একটি কীওয়ার্ড
- বিকল্প হতে পারে:
- -r শুধুমাত্র পঠনশীল পরিবর্তনশীল
- -i পূর্ণসংখ্যা পরিবর্তনশীল
- -একটি অ্যারে ভেরিয়েবল
- -f ফাংশনের জন্য
- -x ঘোষণা করে এবং পরিবেশের মাধ্যমে পরবর্তী কমান্ডে রপ্তানি করে।
উদাহরণ 5. ডিক্লেয়ার ব্যবহার করে ব্যাশ ভেরিয়েবলের ঘোষণা
$ cat declar.sh #!/bin/bash declare -i intvar intvar=123 # Assigning integer value. echo $intvar intvar=12.3 #Trying to store string type value to an integer variable echo $intvar declare -r rovar=281 rovar=212 # Trying to change the readonly variable.
নীচের এক্সিকিউশন থেকে, আপনি যখন একটি ভেরিয়েবলে অবৈধ ডেটা বরাদ্দ করেন তখন আপনি ত্রুটি বার্তাটি লক্ষ্য করতে পারেন৷
$ ./declar.sh 123 t.sh: line 6: 12.3: syntax error: invalid arithmetic operator (error token is ".3") 123 t.sh: line 11: rovar: readonly variable
গ্লোবাল ব্যাশ ভেরিয়েবল
গ্লোবাল ভেরিয়েবলগুলিকে এনভায়রনমেন্ট ভেরিয়েবলও বলা হয়, যা সমস্ত শেলগুলিতে উপলব্ধ হবে। printenv কমান্ডটি সমস্ত এনভায়রনমেন্ট ভেরিয়েবল প্রদর্শন করতে ব্যবহৃত হয়।
$ printenv SHELL=/bin/bash HISTSIZE=1000 SSH_TTY=/dev/pts/1 HOME=/root LOGNAME=root CVS_RSH=ssh
স্থানীয় ব্যাশ ভেরিয়েবল
স্থানীয় ভেরিয়েবল শুধুমাত্র কোড ব্লকের মধ্যে দৃশ্যমান হয়। local একটি কীওয়ার্ড যা স্থানীয় ভেরিয়েবল ঘোষণা করতে ব্যবহৃত হয়। একটি ফাংশনে, একটি স্থানীয় ভেরিয়েবলের অর্থ শুধুমাত্র সেই ফাংশন ব্লকের মধ্যেই থাকে।
উদাহরণ 6. গ্লোবাল এবং লোকাল ব্যাশ ভেরিয়েবল
$ cat localvar.sh #!/bin/bash pprint() { local lvar="Local content" echo -e "Local variable value with in the function" echo $lvar gvar="Global content changed" echo -e "Global variable value with in the function" echo $gvar } gvar="Global content" echo -e "Global variable value before calling function" echo $gvar echo -e "Local variable value before calling function" echo $lvar pprint echo -e "Global variable value after calling function" echo $gvar echo -e "Local variable value after calling function" echo $lvar
উপরের স্ক্রিপ্টটি চালান,
$ sh t.sh Global variable value before calling function Global content Local variable value before calling function Local variable value with in the function Local content Global variable value with in the function Global content changed Global variable value after calling function Global content changed Local variable value after calling function
উপরের আউটপুটে, স্থানীয় ভেরিয়েবলের ফাংশন কল করার আগে এবং পরে শুধুমাত্র খালি মান থাকবে। এর ব্যাপ্তি শুধুমাত্র ফাংশনের সাথে। এটি ফাংশন থেকে অদৃশ্য হয়ে গেছে, যেখানে গ্লোবাল ভেরিয়েবলের আপডেট করা মান রয়েছে এমনকি ফাংশন এক্সিকিউশনের পরেও৷