Хорошо, я любитель Linux, играющий с getops
и getop
; Я прочитал несколько разговоров на нескольких форумах по этой теме, но я не могу заставить свой код работать.
Вот небольшой скрипт, использующий getopts
, переработанный с этого форума:
#!bin/bash
while getopts ":a:p:" opt; do
case $opt in
a) arg_1="$OPTARG"
;;
p) arg_2="$OPTARG"
;;
\?)
;;
esac
done
printf "Argument firstArg is %s\n" "$arg_1"
printf "Argument secondArg is %s\n" "$arg_2"
делает свою работу:
bash test02.sh -asomestring -bsomestring2 #either with or without quotes
#Argument firstArg is somestring
#Argument secondArg is somestring2
Теперь, поскольку я хочу попробовать длинные имена опций, я пытаюсь getopt
, пытаясь понять синтаксис из примеров, которые я нашел в Интернете:
#!/bin/bash
temp=`getopt -o a:b: -l arga:,argb:--"$@"`
eval set --"$temp"
while true ; do
case "$1" in
a|arga) firstArg="$OPTARG"
;;
b|argb) secondArg="$OPTARG"
;;
\?)
;;
esac
done
printf "Argument firstArg is %s\n" "$firstArg"
printf "Argument secondArg is %s\n" "$secondArg"
Приведенный выше код не работает:
bash test04.sh -a'somestring' -b'somestring2' #either with or without quotes
#getopt: invalid option -- 'b'
#Try `getopt --help' for more information.
#
bash test04.sh --arga=somestring --argb=somestring2
#getopt: unrecognized option '--argb=somestring2'
#Try `getopt --help' for more information.
Не могли бы вы помочь мне понять мои ошибки?