kullanım getopt
Neden getopt?
Karışıklığı önlemek ve ayrıştırdığımız seçenekleri açıklığa kavuşturmak için ayrıntılı komut satırı argümanlarını ayrıştırmak, böylece komutların okuyucusunun neler olduğunu anlayabilmesi.
Getopt nedir?
getopt
kabuk yordamlarıyla kolay ayrıştırma için komut satırlarındaki seçenekleri ayırmak (ayrıştırmak) ve yasal seçenekleri denetlemek için kullanılır. Bunu getopt(3)
yapmak için GNU rutinlerini kullanır .
getopt
aşağıdaki seçenek türlerine sahip olabilir.
- Değersiz seçenekler
- anahtar / değer çifti seçenekleri
Not: Bu belgede sözdizimini açıklarken:
- [] İçindeki herhangi bir şey sözdiziminde / örneklerde isteğe bağlı bir parametredir.
- yer tutucudur, yani gerçek bir değerle değiştirilmelidir.
NASIL KULLANILIR getopt
?
Sözdizimi: İlk Form
getopt optstring parameters
Örnekler:
# 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"
Burada h, v, t seçenekler ve -h -v -t seçenekler komut satırında nasıl verilmelidir.
- 'h' değeri olmayan bir seçenektir.
- 'v:', -v seçeneğinin değere sahip olduğunu ve zorunlu bir seçenek olduğunu belirtir. ':', bir değere sahip olduğu anlamına gelir.
- 't ::', -t seçeneğinin değere sahip olduğunu ancak isteğe bağlı olduğunu gösterir. '::' isteğe bağlı anlamına gelir.
İsteğe bağlı parametrede, değerin seçenekle boşluk ayırması olamaz. Yani, "-t123" örneğinde -t seçeneği 123 değerdir.
Sözdizimi: İkinci Form
getopt [getopt_options] [--] [optstring] [parameters]
Burada getopt beş parçaya ayrıldıktan sonra
- Komutun kendisi yani getopt
- Getopt_options, bağımsız değişkenlerin nasıl ayrıştırılacağını açıklar. tek çizgi uzun seçenekleri, çift çizgi seçenekleri.
- -, getopt_options öğesini ayrıştırmak istediğiniz seçeneklerden ve izin verilen kısa seçeneklerden ayırır
- Kısa seçenekler - bulunduktan hemen sonra alınır. Form ilk sözdizimi gibi.
- Parametreler, bunlar programa geçtiğiniz seçeneklerdir. Ayrıştırmak ve ayarlanan gerçek değerleri almak istediğiniz seçenekler.
Örnekler
getopt -l "name:,version::,verbose" -- "n:v::V" "--name=Karthik -version=5.2 -verbose"
Sözdizimi: Üçüncü Form
getopt [getopt_options] [-o options] [--] [optstring] [parameters]
Burada getopt beş parçaya ayrıldıktan sonra
- Komutun kendisi yani getopt
- Getopt_options, bağımsız değişkenlerin nasıl ayrıştırılacağını açıklar. tek çizgi uzun seçenekleri, çift çizgi seçenekleri.
- Kısa seçenekler yani -o veya --options. Form ilk sözdiziminde olduğu gibi "-o" seçeneğinde ve "-" (çift tire) öncesi.
- -, getopt_options öğesini ayrıştırmak istediğiniz seçeneklerden ve izin verilen kısa seçeneklerden ayırır
- Parametreler, bunlar programa geçtiğiniz seçeneklerdir. Ayrıştırmak ve ayarlanan gerçek değerleri almak istediğiniz seçenekler.
Örnekler
getopt -l "name:,version::,verbose" -a -o "n:v::V" -- "-name=Karthik -version=5.2 -verbose"
GETOPT_OPTIONS
getopt_options komut satırı parametrelerini ayrıştırma şeklini değiştirir.
Aşağıda getopt_options bazı
Seçenek: -l veya --longoptions
Getopt komutu, çok karakterli seçeneklerin tanınmasına izin vermelidir. Birden çok seçenek virgülle ayrılır.
Örneğin, --name=Karthik
komut satırında gönderilen uzun bir seçenektir. Getopt'ta uzun seçeneklerin kullanımı
getopt "name:,version" "--name=Karthik"
Name: belirtildiğinden, seçenek bir değer içermelidir
Seçenek: -a veya --alternatif
Getopt komutu, uzun seçeneğin çift tire '-' yerine tek bir tire '-' olmasına izin vermelidir.
Örnek olarak, --name=Karthik
sadece-name=Karthik
getopt "name:,version" "-name=Karthik"
Kodla birlikte eksiksiz bir komut dosyası örneği:
#!/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
Bu komut dosyasını çalıştırma:
# 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
, bunu bir pozisyon argüman olun:./myscript 45 anystring
.