অ-বিকল্পের যুক্তির পরে বিকল্পগুলি পার্স করার জন্য গোটপটস ব্যবহার করা


10

আমার কাছে একটি ফাইলের নীচে বাশ স্ক্রিপ্ট রয়েছে nepleaks_upd.shযা আমি চালাতে চাই ./nepleaks_upd.sh bootstrap --branch off। নিতে এটি তৈরি করতে পারেনি --branch, তবে এটি দিয়ে কী কাজ করে তা ./nepleaks_upd.sh bootstrap -b off

usage() { echo "Usage: $0 [prepare | up | down]  [-b <on/off>]" 1>&2; exit 1; }                                                                                                 

case "$1" in                                                                                           
               bootstrap)                                                                                  
                  while getopts ":b:" o; do                                                            
                   case "${o}" in                                                                      
                    b)                                                                                 
                        b=${OPTARG}                                                                    
                        if [ ${b} == "off" ]; then                                                      
                               echo "git clone https://github.com/iPrayag/dotfiles.git"  
                               ## logic                                                      
                        fi                                                                             
                        ;;                                                                             
                    *)                                                                                 
                        echo ${o}                                                                      
                        usage                                                                          
                        ;;                                                                             
                   esac                                                                                
                  done                                                                                 
                  shift $((OPTIND-1))                                                                  
                  echo "option1 = ${o}" 
                  echo "option2 = ${b}"                                                                      
                  if [ -z "${b}" ]; then                                                               
                         usage                                                                         
                  fi                                                                                   

                    ;;                                                                                 
                up)                                                                                         
                     echo "up"     
                     ##logic                                                                    
                     ;;                                                                                
                down)                                                                                  
                     echo "down" 
                     ##logic                                                                     
                    ;;                                                                                 
                *)                                                                                     
                    echo "Usage: $0 {up | down} dev"                                                
                    exit 1                                                                             
                    ;;                                                                                 
esac         

প্রথম ছাড়া case .. in .... esac, এটি সূক্ষ্ম কাজ করে। এর সাথে case ... in ... esacএটি খালি বিকল্প দেয় -b,

$ ./nepleaks_upd.sh bootstrap -b off
option1 = ?
option2 = 
Usage: ./nepleaks_upd.sh [bootstrap | up | down]  [-b <on/off>]

আপনার ব্যবহারের আগে বিকল্পগুলি পরীক্ষা করা উচিত নয় $1?
আনসার্ট

@ অক্সনট এটি একই কথা বলে ভাই
4:44

"প্রথম ছাড়া case .. in .... esac, এটি ঠিকঠাক কাজ করে" বলতে আপনার অর্থ কী ? আপনি কি লাইনগুলি 5-25 ./nepleaks_upd.sh -b offসঠিকভাবে পার্স করতে চান? হতে পারে আপনার একটি দরকার shift, তাই getopts" bootstrap" তে দম বন্ধ করবেন না ।
স্কট

@ স্কট হ্যাঁ, ঠিক সেই অংশটি ঠিকঠাক কাজ করে।
5:54

উত্তর:


12

getoptsপ্রথম আর্গুমেন্টে বিশ্লেষণ শুরু করে এবং প্রথম অ-বিকল্পের যুক্তিতে থামে। যে মান সম্মেলন নেই - কিছু গনুহ ইউটিলিটি আর্গুমেন্ট বিকল্প প্রয়োগ করা সম্ভব, কিন্তু স্বাভাবিক জিনিস যে হয় somecommand foo -bar qux, -barএকটি বিকল্প হিসাবে পার্স করা হয় না।

আপনি যদি পরে বিকল্পগুলি বিশ্লেষণ শুরু করতে চান তবে আপনাকে এটি bootstrapনির্দেশ করতে হবে। ভেরিয়েবলটি কোন অবস্থানে রয়েছে তা মনে রাখতে getoptsব্যবহার করে OPTINDOPTINDপ্রথম মানটি এড়িয়ে শুরু করতে 2 এ সেট করুন।

case "$1" in
   bootstrap)
      OPTIND=2
      while getopts ":b:" o; do
          

বিকল্পভাবে, আপনি shiftযে যুক্তিগুলি ইতিমধ্যে প্রক্রিয়াভুক্ত করতে পারেন।

subcommand=$1; shift
case "$subcommand" in
    bootstrap)
      while getopts ":b:" o; do
          
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.