কম্পিউটার

আপনার ব্যাশ শেল স্ক্রিপ্টগুলিতে বিকল্পগুলি কীভাবে অন্তর্ভুক্ত করবেন

টার্মিনাল কমান্ডে সাধারণত অপশন বা সুইচ থাকে, যেটি আপনি কমান্ড কীভাবে কাজ করে তা পরিবর্তন করতে ব্যবহার করতে পারেন। কমান্ড-লাইন ইন্টারফেসের জন্য POSIX স্পেসিফিকেশনে বিকল্পগুলি অন্তর্ভুক্ত করা হয়েছে। এটি প্রাচীনতম UNIX অ্যাপ্লিকেশনগুলির সাথে প্রতিষ্ঠিত একটি সময়-সম্মানিত কনভেনশনও, তাই যখন আপনি নিজের কমান্ড তৈরি করছেন তখন আপনার ব্যাশ স্ক্রিপ্টগুলিতে কীভাবে সেগুলি অন্তর্ভুক্ত করবেন তা জেনে রাখা ভাল৷

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

ব্যাশে পার্সিং বিকল্প

ব্যাশে বিকল্প পার্স করার কৌশল হল আপনার শেল স্ক্রিপ্টে পাস করা সমস্ত আর্গুমেন্টের মাধ্যমে চক্রাকারে, সেগুলি একটি বিকল্প কিনা তা নির্ধারণ করা এবং তারপরে পরবর্তী আর্গুমেন্টে চলে যাওয়া। এই প্রক্রিয়াটি পুনরাবৃত্তি করুন যতক্ষণ না কোন বিকল্প অবশিষ্ট থাকে।

একটি সাধারণ বুলিয়ান বিকল্প দিয়ে শুরু করুন (কখনও কখনও সুইচ বলা হয় অথবা একটি পতাকা ):

#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done

echo $ALPHA

এই কোডে, আমি একটি while তৈরি করি loop যা একটি অসীম লুপ হিসাবে কাজ করে যতক্ষণ না প্রক্রিয়া করার জন্য আর কোন আর্গুমেন্ট নেই। একটি if বিবৃতি প্রথম অবস্থানে পাওয়া যাই হোক না কেন যুক্তি মেলানোর চেষ্টা করে ($1 ) হয় --alpha অথবা -a . (এগুলি কোন বিশেষ তাৎপর্য ছাড়াই ইচ্ছাকৃত বিকল্পের নাম। একটি প্রকৃত স্ক্রিপ্টে, আপনি --verbose ব্যবহার করতে পারেন এবং -v ভার্বোজ আউটপুট ট্রিগার করতে)।

shift কীওয়ার্ড সমস্ত আর্গুমেন্টকে 1 দ্বারা স্থানান্তরিত করে, যেমন 2 অবস্থানে একটি আর্গুমেন্ট ($2 ) অবস্থান 1 এ সরানো হয়েছে ($1 ) else বিবৃতিটি ট্রিগার করা হয় যখন প্রক্রিয়া করার জন্য আর কোন আর্গুমেন্ট থাকে না, যা while ভাঙে লুপ।

স্ক্রিপ্টের শেষে, $ALPHA এর মান টার্মিনালে প্রিন্ট করা হয়।

স্ক্রিপ্ট পরীক্ষা করুন:

$ bash ./test.sh --alpha
1
$ bash ./test.sh

$ bash ./test.sh -a
1

বিকল্পটি সঠিকভাবে সনাক্ত করা হয়েছে৷

ব্যাশে আর্গুমেন্ট সনাক্ত করা হচ্ছে

যদিও একটি সমস্যা আছে:অতিরিক্ত যুক্তি উপেক্ষা করা হয়।

$ bash ./test.sh --alpha foo
1
$

বিকল্প হিসাবে অভিপ্রেত নয় এমন আর্গুমেন্টগুলি ধরতে, আপনি বাশ অ্যারেতে অবশিষ্ট আর্গুমেন্টগুলি ডাম্প করতে পারেন৷

#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
else
    break
fi
done

echo $ALPHA

ARG=( "${@}" )
for i in ${ARG[@]}; do
    echo $i
done

স্ক্রিপ্টের নতুন সংস্করণ পরীক্ষা করুন:

$ bash ./test.sh --alpha foo
1
foo
$ bash ./test.sh foo

foo
$ bash ./test.sh --alpha foo bar
1
foo
bar

আর্গুমেন্ট সহ বিকল্পগুলি

কিছু বিকল্পের জন্য তাদের নিজস্ব যুক্তি প্রয়োজন। উদাহরণস্বরূপ, আপনি ব্যবহারকারীকে একটি রঙ বা গ্রাফিকের রেজোলিউশন বা আপনার অ্যাপ্লিকেশনটিকে একটি কাস্টম কনফিগারেশন ফাইলে নির্দেশ করার মতো একটি বৈশিষ্ট্য সেট করার অনুমতি দিতে পারেন৷

Bash এ এটি বাস্তবায়ন করতে, আপনি shift ব্যবহার করতে পারেন কীওয়ার্ড যেমন আপনি বুলিয়ান সুইচের সাথে করেন তবে আর্গুমেন্টগুলিকে 1 এর পরিবর্তে 2 দ্বারা স্থানান্তর করুন।

#!/bin/bash

while [ True ]; do
if [ "$1" = "--alpha" -o "$1" = "-a" ]; then
    ALPHA=1
    shift 1
elif [ "$1" = "--config" -o "$1" = "-c" ]; then
    CONFIG=$2
    shift 2
else
    break
fi
done

echo $ALPHA
echo $CONFIG

ARG=( "${@}" )

for i in ${ARG[@]}; do
    echo $i
done

এই কোডে, আমি একটি elif যোগ করি --config উভয়ের সাথে প্রতিটি আর্গুমেন্টের তুলনা করার ক্লজ এবং -c . মিলের ক্ষেত্রে, CONFIG নামক একটি ভেরিয়েবলের মান দ্বিতীয় আর্গুমেন্ট যাই হোক না কেন তার মান সেট করা হয় (এর মানে হল --config বিকল্পের জন্য একটি যুক্তি প্রয়োজন)। --config শিফট করতে সমস্ত আর্গুমেন্ট 2:1 দ্বারা স্থান পরিবর্তন করে অথবা -c , এবং 1 এর আর্গুমেন্ট সরাতে। যথারীতি, লুপ পুনরাবৃত্তি হয় যতক্ষণ না কোন মিলিত আর্গুমেন্ট থাকে।

এখানে স্ক্রিপ্টের নতুন সংস্করণের একটি পরীক্ষা রয়েছে:

$ bash ./test.sh --config my.conf foo bar
my.conf
foo
bar
$ bash ./test.sh -a --config my.conf baz
1
my.conf
baz

বিকল্প পার্সিং সহজ করা হয়েছে

Bash এ অপশন পার্স করার অন্যান্য উপায় আছে। আপনি বিকল্পভাবে একটি case ব্যবহার করতে পারেন বিবৃতি বা getopt আদেশ আপনি যা ব্যবহার করতে চান না কেন, আপনার ব্যবহারকারীদের জন্য বিকল্পগুলি যেকোনো অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ বৈশিষ্ট্য, এবং ব্যাশ এটিকে সহজ করে তোলে৷


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

  2. ব্যাশ-ইট - আপনার স্ক্রিপ্ট এবং উপনাম নিয়ন্ত্রণ করতে ব্যাশ ফ্রেমওয়ার্ক

  3. উইন্ডোজ 10 এ ব্যাশ (লিনাক্স শেল) কীভাবে ইনস্টল ও ব্যবহার করবেন [টিউটোরিয়াল]

  4. উইন্ডোজ 10 এ কীভাবে লিনাক্স ব্যাশ শেল ইনস্টল করবেন