ব্যবহার getopt
কেন?
বিভ্রান্তি এড়াতে এবং আমরা যে বিকল্পগুলি পার্স করছি তা স্পষ্ট করার জন্য বিস্তৃত কমান্ড-লাইন যুক্তিগুলি পার্স করা যাতে কমান্ডের পাঠক বুঝতে পারে যে কী ঘটছে।
গোটপট কী?
getopt
শেল পদ্ধতি দ্বারা সহজে পার্সিংয়ের জন্য কমান্ড লাইনে বিকল্পগুলি ব্রেক (পার্স) করতে এবং আইনী বিকল্পগুলি পরীক্ষা করার জন্য ব্যবহৃত হয়। এটি করার জন্য এটি জিএনইউ getopt(3)
রুটিনগুলি ব্যবহার করে ।
getopt
নিম্নলিখিত ধরণের বিকল্প থাকতে পারে।
- কোন মান বিকল্প
- কী-মান জোড় বিকল্প
দ্রষ্টব্য: এই নথিতে সিনট্যাক্স ব্যাখ্যা করার সময়:
- [] এর ভিতরে যা কিছু আছে তা সিনট্যাক্স / উদাহরণগুলিতে optionচ্ছিক প্যারামিটার।
- একটি স্থানধারক, যার অর্থ এটি একটি আসল মান দিয়ে প্রতিস্থাপন করা উচিত।
কিভাবে ব্যবহার করবেন getopt
?
সিনট্যাক্স: প্রথম ফর্ম
getopt optstring parameters
উদাহরণ:
# This is correct
getopt "hv:t::" "-v 123 -t123"
getopt "hv:t::" "-v123 -t123" # -v and 123 doesn't have whitespace
# -h takes no value.
getopt "hv:t::" "-h -v123"
# This is wrong. after -t can't have whitespace.
# Only optional params cannot have whitespace between key and value
getopt "hv:t::" "-v 123 -t 123"
# Multiple arguments that takes value.
getopt "h:v:t::g::" "-h abc -v 123 -t21"
# Multiple arguments without value
# All of these are correct
getopt "hvt" "-htv"
getopt "hvt" "-h -t -v"
getopt "hvt" "-tv -h"
এখানে h, v, t টি বিকল্প রয়েছে এবং -h -v -t হল কমান্ড-লাইনে কীভাবে অপশন দেওয়া উচিত।
- 'এইচ' একটি মূল্যমানের বিকল্প।
- 'v:' ইঙ্গিত দেয় যে বিকল্প -v এর মান রয়েছে এবং এটি একটি বাধ্যতামূলক বিকল্প। ':' অর্থের একটি মান আছে।
- 't ::' ইঙ্গিত দেয় যে বিকল্প-টির মান রয়েছে তবে এটি alচ্ছিক। '::' অর্থ alচ্ছিক।
.চ্ছিক প্যারামে, মানটির সাথে বিকল্পের সাথে সাদা স্থান পৃথকীকরণ থাকতে পারে না। সুতরাং, "-t123" উদাহরণে, -t বিকল্প 123 এর মান।
সিনট্যাক্স: দ্বিতীয় ফর্ম
getopt [getopt_options] [--] [optstring] [parameters]
এখানে গোটোপ্টের পরে পাঁচটি ভাগে বিভক্ত হয়
- কমান্ড নিজেই অর্থাৎ getopt
- Getopt_options, এটি আর্গুমেন্টগুলি পার্স করার পদ্ধতি বর্ণনা করে। একক ড্যাশ দীর্ঘ বিকল্প, ডাবল ড্যাশ বিকল্প।
- -, আপনি পার্স করতে চান এমন বিকল্পগুলি এবং অনুমোদিত সংক্ষিপ্ত বিকল্পগুলি থেকে getopt_options পৃথক করে
- সংক্ষিপ্ত বিকল্পগুলি, অবিলম্বে নেওয়া হয় - পাওয়া যায়। ঠিক প্রথম সিনট্যাক্স ফর্ম মত।
- পরামিতিগুলি, এগুলি হ'ল বিকল্পগুলি যা আপনি প্রোগ্রামটিতে প্রবেশ করেছেন। আপনি যে বিকল্পগুলি পার্স করতে চান এবং সেগুলিতে আসল মান সেট করে পেতে চান।
উদাহরণ
getopt -l "name:,version::,verbose" -- "n:v::V" "--name=Karthik -version=5.2 -verbose"
সিনট্যাক্স: তৃতীয় ফর্ম
getopt [getopt_options] [-o options] [--] [optstring] [parameters]
এখানে গোটোপ্টের পরে পাঁচটি ভাগে বিভক্ত হয়
- কমান্ড নিজেই অর্থাৎ getopt
- Getopt_options, এটি আর্গুমেন্টগুলি পার্স করার পদ্ধতি বর্ণনা করে। একক ড্যাশ দীর্ঘ বিকল্প, ডাবল ড্যাশ বিকল্প।
- সংক্ষিপ্ত বিকল্পগুলি যেমন -o বা --options। ঠিক প্রথম সিনট্যাক্সের মতো তবে "-o" বিকল্পের সাথে এবং "-" এর আগে (ডাবল ড্যাশ)।
- -, আপনি পার্স করতে চান এমন বিকল্পগুলি এবং অনুমোদিত সংক্ষিপ্ত বিকল্পগুলি থেকে getopt_options পৃথক করে
- পরামিতিগুলি, এগুলি হ'ল বিকল্পগুলি যা আপনি প্রোগ্রামটিতে প্রবেশ করেছেন। আপনি যে বিকল্পগুলি পার্স করতে চান এবং সেগুলিতে আসল মান সেট করে পেতে চান।
উদাহরণ
getopt -l "name:,version::,verbose" -a -o "n:v::V" -- "-name=Karthik -version=5.2 -verbose"
GETOPT_OPTIONS
getopt_options কমান্ড-লাইন প্যারামগুলি পার্স করার পদ্ধতি পরিবর্তন করে।
নীচে কিছু getopt_options রয়েছে
বিকল্প: -l বা - দীর্ঘমেয়াদী
মানে getopt কমান্ডের দ্বারা বহু-চরিত্রের বিকল্পগুলি স্বীকৃত হওয়া উচিত। একাধিক বিকল্প কমা দ্বারা পৃথক করা হয়।
উদাহরণস্বরূপ, --name=Karthik
কমান্ড লাইনে প্রেরণ করা একটি দীর্ঘ বিকল্প। Getopt এ, দীর্ঘ বিকল্পগুলির ব্যবহারের মতো like
getopt "name:,version" "--name=Karthik"
যেহেতু নাম: নির্দিষ্ট করা আছে, অপশনটিতে একটি মান থাকতে হবে
বিকল্প: -এ বা - বিকল্প
মানে getopt কমান্ডটি দীর্ঘ বিকল্পটিকে ডাবল ড্যাশ '-' এর পরিবর্তে একক ড্যাশ '-' দেওয়ার অনুমতি দেবে।
উদাহরণস্বরূপ, পরিবর্তে --name=Karthik
আপনি কেবল ব্যবহার করতে পারেন-name=Karthik
getopt "name:,version" "-name=Karthik"
কোড সহ একটি সম্পূর্ণ স্ক্রিপ্ট উদাহরণ:
#!/bin/bash
# filename: commandLine.sh
# author: @theBuzzyCoder
showHelp() {
# `cat << EOF` This means that cat should stop reading when EOF is detected
cat << EOF
Usage: ./installer -v <espo-version> [-hrV]
Install Pre-requisites for EspoCRM with docker in Development mode
-h, -help, --help Display help
-v, -espo-version, --espo-version Set and Download specific version of EspoCRM
-r, -rebuild, --rebuild Rebuild php vendor directory using composer and compiled css using grunt
-V, -verbose, --verbose Run script in verbose mode. Will print out each step of execution.
EOF
# EOF is found above and hence cat command stops reading. This is equivalent to echo but much neater when printing out.
}
export version=0
export verbose=0
export rebuilt=0
# $@ is all command line parameters passed to the script.
# -o is for short options like -v
# -l is for long options with double dash like --version
# the comma separates different long options
# -a is for long options with single dash like -version
options=$(getopt -l "help,version:,verbose,rebuild,dryrun" -o "hv:Vrd" -a -- "$@")
# set --:
# If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters
# are set to the arguments, even if some of them begin with a ‘-’.
eval set -- "$options"
while true
do
case $1 in
-h|--help)
showHelp
exit 0
;;
-v|--version)
shift
export version=$1
;;
-V|--verbose)
export verbose=1
set -xv # Set xtrace and verbose mode.
;;
-r|--rebuild)
export rebuild=1
;;
--)
shift
break;;
esac
shift
done
এই স্ক্রিপ্ট ফাইলটি চালানো হচ্ছে:
# With short options grouped together and long option
# With double dash '--version'
bash commandLine.sh --version=1.0 -rV
# With short options grouped together and long option
# With single dash '-version'
bash commandLine.sh -version=1.0 -rV
# OR with short option that takes value, value separated by whitespace
# by key
bash commandLine.sh -v 1.0 -rV
# OR with short option that takes value, value without whitespace
# separation from key.
bash commandLine.sh -v1.0 -rV
# OR Separating individual short options
bash commandLine.sh -v1.0 -r -V
-s
, এটি একটি অবস্থানগত যুক্তি করুন:./myscript 45 anystring
।