ব্যাশ এক্সপ্রেশন হল অপারেটর, বৈশিষ্ট্য বা মানগুলির সমন্বয় যা ব্যাশ শর্তসাপেক্ষ বিবৃতি তৈরি করতে ব্যবহৃত হয়। কন্ডিশনাল এক্সপ্রেশন বাইনারি বা ইউনারী এক্সপ্রেশন হতে পারে যার মধ্যে সাংখ্যিক, স্ট্রিং বা যেকোনো কমান্ড জড়িত যার রিটার্ন স্ট্যাটাস শূন্য হলে সফল হয়।
এখানে বেশ কিছু শর্তসাপেক্ষ অভিব্যক্তি আছে যা ফাইলের সাথে পরীক্ষা করতে ব্যবহার করা যেতে পারে। নিম্নোক্ত কয়েকটি শর্তসাপেক্ষ অভিব্যক্তি যা সহায়ক।
- [ -e filepath ] ফাইল বিদ্যমান থাকলে সত্য ফেরত দেয়।
- [ -x filepath ] যদি ফাইলটি বিদ্যমান থাকে এবং এক্সিকিউটেবল থাকে তাহলে সত্য ফেরত দেয়।
- [ -S ফাইলপথ ] ফাইলটি বিদ্যমান থাকলে এবং এটি একটি সকেট ফাইল থাকলে সত্য ফেরত দেয়।
- [ expr1 -a expr2 ] উভয় অভিব্যক্তি সত্য হলে সত্য দেখায়।
- [ expr1 -o expr2 ] এক্সপ্রেশন 1 বা 2 এর যেকোনো একটি সত্য হলে সত্য দেখায়।
ফাইল, স্ট্রিং এবং সংখ্যা পরীক্ষা করার জন্য আরও শর্তসাপেক্ষ অভিব্যক্তির জন্য অনুগ্রহ করে ব্যাশ ম্যান পৃষ্ঠাটি দেখুন৷
ব্যাশ উদাহরণ 1. ফাইলের অস্তিত্ব পরীক্ষা করুন
নিচের ব্যাশ শেল স্ক্রিপ্ট কোড-স্নিপেট তার পরম পাথ সহ ফাইলের নাম পায়, এবং ফাইলটি বিদ্যমান আছে কি না তা পরীক্ষা করে এবং এটি উপযুক্ত তথ্য ছুড়ে দেয়।
$ cat exist.sh #! /bin/bash file=$1 if [ -e $file ] then echo -e "File $file exists" else echo -e "File $file doesnt exists" fi $ ./exist.sh /usr/bin/boot.ini File /usr/bin/boot.ini exists
বিভিন্ন ব্যাশ ইফ স্টেটমেন্টের ধরন বুঝতে আমাদের আগের নিবন্ধটি পড়ুন।
ব্যাশ উদাহরণ 2. সংখ্যার তুলনা করুন
নীচের স্ক্রিপ্টটি ব্যবহারকারীর কাছ থেকে দুটি পূর্ণসংখ্যা পাঠ করে এবং উভয় সংখ্যাই একে অপরের থেকে সমান বা বড় বা কম কিনা তা পরীক্ষা করে।
$ cat numbers.sh #!/bin/bash echo "Please enter first number" read first echo "Please enter second number" read second if [ $first -eq 0 ] && [ $second -eq 0 ] then echo "Num1 and Num2 are zero" elif [ $first -eq $second ] then echo "Both Values are equal" elif [ $first -gt $second ] then echo "$first is greater than $second" else echo "$first is lesser than $second" fi $ ./numbers.sh Please enter first number 1 Please enter second number 1 Both Values are equal $ ./numbers.sh Please enter first number 3 Please enter second number 12 3 is lesser than 12
আপনি যদি ব্যাশ স্ক্রিপ্টিং-এ নতুন হন, আমাদের ব্যাশ পরিচিতি টিউটোরিয়াল পড়ুন।
<কেন্দ্র> কেন্দ্র>ব্যাশ উদাহরণ 3. মৌলিক পাটিগণিত ক্যালকুলেটর
এই উদাহরণগুলি ইনপুট পড়ে, যা এক ধরনের গাণিতিক ক্রিয়াকলাপ ব্যাশ ভেরিয়েবলে (inp1 এবং inp2) সম্পাদন করতে চায়। গাণিতিক অপারেশন যোগ, বিয়োগ বা গুণ হতে পারে..
$ cat calculator.sh #!/bin/bash inp1=12 inp2=11 echo "1. Addition" echo "2. Subtraction" echo "3. Multiplication" echo -n "Please choose a word [1,2 or 3]? " read oper if [ $oper -eq 1 ] then echo "Addition Result " $(($inp1 + $inp2)) else if [ $oper -eq 2 ] then echo "Subtraction Result " $(($inp1 - $inp2)) else if [ $oper -eq 3 ] then echo "Multiplication Result " $(($inp1 * $inp2)) else echo "Invalid input" fi fi fi $ ./calculator.sh 1. Addition 2. Subtraction 3. Multiplication Please choose a word [1,2 or 3]? 4 Invalid input
ব্যাশ স্পেশাল প্যারামিটার ( $*, $@, $#, $$, $!, $?, $-, $_ ) কীভাবে ব্যবহার করবেন তা জানা আপনার স্ক্রিপ্টিং জীবনকে সহজ করে তুলবে।
ব্যাশ উদাহরণ 4. আইপি ঠিকানা পড়ুন এবং পিং করুন
নিম্নলিখিত স্ক্রিপ্টটি আইপি ঠিকানাটি পড়তে এবং আইপি ঠিকানাটি পৌঁছানো যায় কিনা তা পরীক্ষা করতে ব্যবহৃত হয় এবং উপযুক্ত বার্তাটি প্রিন্ট করে৷
$ cat ipaddr.sh #!/bin/bash echo "Enter the Ipaddress" read ip if [ ! -z $ip ] then ping -c 1 $ip if [ $? -eq 0 ] ; then echo "Machine is giving ping response" else echo "Machine is not pinging" fi else echo "IP Address is empty" fi $ ./ipaddr.sh Enter the Ipaddress 10.176.191.106 Pinging 10.176.191.106 with 32 bytes of data: Reply from 10.176.191.106: bytes=32 time<1ms TTL=128 Ping statistics for 10.176.191.106: Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 0ms, Maximum = 0ms, Average = 0ms Machine is giving ping response
এই উদাহরণে, আইপ্যাডড্রেস শূন্যের দৈর্ঘ্য হলে -z সত্য ফেরত দেয়, যখন কন্ডিশন এর আগে থাকে! (negate) অপারেটর, অভিব্যক্তি মিথ্যা হলে, এটি যদি অংশে প্রবেশ করে এবং কার্যকর করে। তাই যখন আইপি ঠিকানাটি শূন্য না হয়, তখন এটি প্রবেশ করে এবং আইপি ঠিকানাটি পৌঁছানো যায় কিনা তা পরীক্ষা করে।
ব্যাশ উদাহরণ 5. ইনস্টলার স্ক্রিপ্ট
বেশিরভাগ প্যাকেজের ইনস্টলার স্ক্রিপ্ট রুট ব্যবহারকারী হিসাবে সেগুলি চালানোর অনুমতি দেয় না। স্ক্রিপ্ট সেই ব্যবহারকারীকে পরীক্ষা করে যে নির্বাহ করছে এবং ত্রুটি ছুঁড়ে দেয়।
নিচের স্ক্রিপ্টটি আপনাকে ওরাকল ইন্সটলার স্ক্রিপ্ট চালানোর অনুমতি দেয় শুধুমাত্র তখনই যে ব্যবহারকারী যে এক্সিকিউট করছে সে রুট নয়।
$ cat preinstaller.sh #!/bin/bash if [ `whoami` != 'root' ]; then echo "Executing the installer script" ./home/oracle/databases/runInstaller.sh else echo "Root is not allowed to execute the installer script" fi Executing the script as a root user, # ./preinstaller.sh Root is not allowed to execute the installer script
এই উদাহরণে whoami কমান্ডের আউটপুটকে "রুট" শব্দের সাথে তুলনা করা হয়েছে। স্ট্রিং তুলনা ==, !=, < এবং ব্যবহার করা উচিত এবং সাংখ্যিক তুলনার জন্য eq, ne,lt এবং gt ব্যবহার করা উচিত।
ব্যাশ উদাহরণ 6. উন্নত বন্ধনী
উপরের সমস্ত উদাহরণে, আমরা শর্তসাপেক্ষ অভিব্যক্তিকে আবদ্ধ করতে শুধুমাত্র একক বন্ধনী ব্যবহার করেছি, কিন্তু ব্যাশ ডবল বন্ধনীকে অনুমতি দেয় যা একক-বন্ধনী সিনট্যাক্সের একটি উন্নত সংস্করণ হিসেবে কাজ করে।
$ cat enhanced.sh #!/bin/bash echo "Enter the string" read str if [[ $str == *condition* ]] then echo "String "$str has the word \"condition\" fi $ ./enhanced.sh Enter the string conditionalstatement String conditionalstatement has the word "condition"
- [ টেস্ট কমান্ডের প্রতিশব্দ। এমনকি যদি এটি শেলে অন্তর্নির্মিত থাকে তবে এটি একটি নতুন প্রক্রিয়া তৈরি করে।
- [[ এটির একটি নতুন উন্নত সংস্করণ, যা একটি কীওয়ার্ড, কোনো প্রোগ্রাম নয়।
- [[ কর্ন এবং ব্যাশ দ্বারা বোঝা যায়।
- উপরের উদাহরণে, যদি $str ভেরিয়েবলে যেকোন জায়গায় "শর্ত" শব্দটি থাকে, তবে শর্তটি সত্য।
- এটি হল শেল গ্লোবিং বৈশিষ্ট্য, যা শুধুমাত্র তখনই সমর্থিত হবে যখন আপনি [[ (দ্বৈত বন্ধনী) ব্যবহার করবেন এবং তাই অনেক আর্গুমেন্ট উদ্ধৃত করার প্রয়োজন নেই।