শেল ট্র্যাকিংয়ের মাধ্যমে শেল স্ক্রিপ্টে কমান্ডের কার্যনির্বাহনের কীভাবে ট্রেস করবেন


শেল স্ক্রিপ্ট ডিবাগিং সিরিজের এই নিবন্ধে, আমরা তৃতীয় শেল স্ক্রিপ্ট ডিবাগিং মোডটি ব্যাখ্যা করব, এটি শেল ট্রেসিং এবং এটি কীভাবে কাজ করে এবং কীভাবে এটি ব্যবহার করা যায় তা প্রদর্শনের জন্য কয়েকটি উদাহরণ দেখুন।

এই সিরিজের পূর্ববর্তী অংশটি অন্য দুটি শেল স্ক্রিপ্ট ডিবাগিং মোডের উপরে স্পষ্টভাবে আলোক ছুঁড়েছে: এই মোডগুলিতে কীভাবে শেল স্ক্রিপ্ট ডিবাগিং সক্ষম করতে পারে তার সহজ-বোধগম্য উদাহরণ সহ ভার্বোজ মোড এবং সিনট্যাক্স চেকিং মোড।

  1. লিনাক্সে কীভাবে শেল স্ক্রিপ্ট ডিবাগিং মোড সক্ষম করবেন - অংশ 1
  2. শেল স্ক্রিপ্টগুলিতে সিন্ট্যাক্স চেকিং ডিবাগিং মোড কীভাবে সম্পাদন করবেন - পার্ট 2

শেল ট্রেসিং এর অর্থ শেল স্ক্রিপ্টে কমান্ডের সম্পাদনকে চিহ্নিত করা। শেল ট্রেসিং স্যুইচ করতে, -x ডিবাগিং বিকল্পটি ব্যবহার করুন।

এটি শেলটি সমস্ত কমান্ড এবং তাদের আর্গুমেন্টগুলি টার্মিনালে কার্যকর করার সাথে সাথে প্রদর্শন করতে নির্দেশ দেয়।

আমরা নীচে sys_info.sh শেল স্ক্রিপ্ট ব্যবহার করব, যা আপনার সিস্টেমের তারিখ এবং সময়, লগ ইন হওয়া ব্যবহারকারীদের সংখ্যা এবং সিস্টেম আপটাইম সংক্ষেপে প্রিন্ট করে। তবে এটিতে সিনট্যাক্স ত্রুটি রয়েছে যা আমাদের খুঁজে বের করতে এবং সংশোধন করা দরকার।

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;    
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME
}

check_root
print_sys_info

exit 0

ফাইলটি সংরক্ষণ করুন এবং স্ক্রিপ্টটি সম্পাদনযোগ্য করুন। স্ক্রিপ্টটি কেবল রুট দ্বারা চালানো যেতে পারে, সুতরাং এটি নীচের মত চালানোর জন্য sudo কমান্ড নিয়োগ করুন:

$ chmod +x sys_info.sh
$ sudo bash -x sys_info.sh

উপরের আউটপুট থেকে আমরা লক্ষ করতে পারি যে একটি কমান্ড প্রথমে কার্যকর হয় তার আউটপুটে ভেরিয়েবলের মান হিসাবে প্রতিস্থাপনের আগে।

উদাহরণস্বরূপ, তারিখটি প্রথম কার্যকর করা হয়েছিল এবং এর আউটপুটটি ভেরিয়েবলের তারিখের পরিবর্তে পরিবর্তিত হয় DATE।

নীচের হিসাবে কেবল সিনট্যাক্স ত্রুটিগুলি প্রদর্শন করতে আমরা সিনট্যাক্স চেকিং করতে পারি:

$ sudo bash -n sys_info.sh 

যদি আমরা শেল স্ক্রিপ্টটি সমালোচনামূলকভাবে দেখে থাকি তবে আমরা বুঝতে পারি যে যদি বিবৃতি একটি ক্লোজিং ফাই শব্দ অনুপস্থিত। সুতরাং, আসুন আমরা এটি যুক্ত করি এবং নতুন স্ক্রিপ্টটি এখন নীচের মত দেখতে হবে:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
   fi    
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME
}

check_root
print_sys_info

exit 0

ফাইলটি আবার সংরক্ষণ করুন এবং এটিকে মূল হিসাবে অনুরোধ করুন এবং কিছু বাক্য গঠন পরীক্ষা করুন:

$ sudo bash -n sys_info.sh

উপরে আমাদের সিনট্যাক্স চেকিং অপারেশনের ফলাফলটি এখনও দেখায় যে 21 এ লাইনে আমাদের স্ক্রিপ্টে আরও একটি ত্রুটি রয়েছে So সুতরাং, আমাদের এখনও কিছু বাক্য গঠন সংশোধন করতে হবে।

আমরা যদি আরও একবার স্ক্রিপ্টটি বিশ্লেষণ করে দেখি তবে লাইন 21-তে ত্রুটিটি print_sys_info ফাংশনের অভ্যন্তরে শেষ প্রতিধ্বনি কমান্ডের << কোড (") বন্ধ হওয়া ডাবল উদ্ধৃতিটি হ'ল ।

ইকো কমান্ডে আমরা ক্লোজিং ডাবল উদ্ধৃতি যুক্ত করব এবং ফাইলটি সংরক্ষণ করব। পরিবর্তিত লিপিটি নীচে রয়েছে:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME"
}

check_root
print_sys_info

exit 0

এখন সিনথেটিকভাবে আরও একবার স্ক্রিপ্ট চেক করুন।

$ sudo bash -n sys_info.sh

উপরের কমান্ডটি কোনও আউটপুট উত্পাদন করবে না কারণ আমাদের স্ক্রিপ্টটি এখন সিনট্যাক্টিক্যালি সঠিক। আমরা দ্বিতীয় বারের মতো স্ক্রিপ্টের সম্পাদনটিও সনাক্ত করতে পারি এবং এটি ভালভাবে কাজ করা উচিত:

$ sudo bash -x sys_info.sh

এখন স্ক্রিপ্ট রান করুন।

$ sudo ./sys_info.sh

শেল স্ক্রিপ্ট এক্সিকিউশন ট্র্যাকিংয়ের গুরুত্ব

শেল স্ক্রিপ্ট ট্রেসিং আমাদের সিনট্যাক্স ত্রুটিগুলি চিহ্নিত করতে এবং আরও গুরুত্বপূর্ণভাবে যৌক্তিক ত্রুটিগুলি সহায়তা করে। উদাহরণস্বরূপ sys_info.sh শেল স্ক্রিপ্টের চেক_রোট ফাংশনটি ধরুন, যা কোনও ব্যবহারকারী মূল বা না তা নির্ধারণ করার উদ্দেশ্যে, যেহেতু স্ক্রিপ্টটি কেবলমাত্র কার্যকর করার অনুমতি দেওয়া হয়েছে সুপারভাইজার দ্বারা

check_root(){
    if [ "$UID" -ne "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

এখানকার ম্যাজিকটি যদি বিবৃতি ["$UID" -ne "$ROOT_ID"] দ্বারা নিয়ন্ত্রিত হয় তবে একবার আমরা উপযুক্ত সংখ্যাসূচক অপারেটর ব্যবহার না করে ( -ne এই ক্ষেত্রে, যার অর্থ সমান নয়), আমরা একটি সম্ভাব্য যৌক্তিক ত্রুটি শেষ করি।

ধরে নেওয়া যাক আমরা -ইক > (এর সমান) ব্যবহার করেছি, এটি কোনও সিস্টেম ব্যবহারকারীর পাশাপাশি মূল ব্যবহারকারীকে স্ক্রিপ্ট চালানোর অনুমতি দেবে, সুতরাং একটি যৌক্তিক ত্রুটি।

check_root(){
    if [ "$UID" -eq "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

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

অতএব, নীচের লাইনটি কার্যকারণটিতে এর কার্যকর প্রয়োগটি সনাক্ত করে এই যৌক্তিক ত্রুটিটি খুঁজে পেতে সহায়তা করবে:

একটি যৌক্তিক ত্রুটি সহ স্ক্রিপ্ট:

#!/bin/bash
#script to print brief system info

ROOT_ID="0"

DATE=`date`
NO_USERS=`who | wc -l`
UPTIME=`uptime`

check_root(){
    if [ "$UID" -eq "$ROOT_ID" ]; then
        echo "You are not allowed to execute this program!"
        exit 1;
    fi
}

print_sys_info(){
    echo "System Time    : $DATE"
    echo "Number of users: $NO_USERS"
    echo "System Uptime  : $UPTIME"
}

#turning on and off debugging of check_root function
set -x ; check_root;  set +x ;
print_sys_info

exit 0

ফাইলটি সংরক্ষণ করুন এবং স্ক্রিপ্টটি শুরু করুন, আমরা দেখতে পাচ্ছি যে নিয়মিত সিস্টেম ব্যবহারকারী নীচের আউটপুটে যেমন sudo ছাড়াই স্ক্রিপ্টটি চালাতে পারেন। এর কারণ হল USER_ID এর মান 100 যা মূল ROOT_ID এর সমান নয় যা 0 হয়।

$ ./sys_info.sh

ঠিক আছে, এটি এখনই, আমরা শেল স্ক্রিপ্ট ডিবাগিং সিরিজের শেষে এসেছি, নীচের প্রতিক্রিয়া ফর্মটি এই গাইড বা পুরো 3-অংশের সিরিজ সম্পর্কিত, আমাদের কাছে কোনও প্রশ্ন বা প্রতিক্রিয়া জানাতে ব্যবহার করা যেতে পারে।


সমস্ত অধিকার সংরক্ষিত. © Linux-Console.net • 2019-2024