unix - examples - awk separador de campos
¿Cómo hacer un parámetro de múltiples caracteres en UNIX usando getopt? (3)
Estoy tratando de hacer un comando getopt tal que cuando pase el parámetro "-ab" a un script, ese script tratará a -ab como un solo parámetro.
#!/bin/sh
args=`getopt "ab":fc:d $*`
set -- $args
for i in $args
do
case "$i" in
-ab) shift;echo "You typed ab $1.";shift;;
-c) shift;echo "You typed a c $1";shift;;
esac
done
Sin embargo, esto no parece funcionar. ¿Alguien puede ofrecer alguna ayuda?
Estuve luchando con esto por mucho tiempo, luego comencé a leer sobre getopt y getopts
Opciones de un solo char y opciones largas.
Tenía un requisito similar donde necesitaba tener varios argumentos de entrada multichar.
así que, se me ocurrió esto - funcionó en mi caso - espero que esto te ayude
function show_help {
echo "usage: $BASH_SOURCE --input1 <input1> --input2 <input2> --input3 <input3>"
echo " --input1 - is input 1 ."
echo " --input2 - is input 2 ."
echo " --input3 - is input 3 ."
}
# Read command line options
ARGUMENT_LIST=(
"input1"
"input2"
"input3"
)
# read arguments
opts=$(getopt /
--longoptions "$(printf "%s:," "${ARGUMENT_LIST[@]}")" /
--name "$(basename "$0")" /
--options "" /
-- "$@"
)
echo $opts
eval set --$opts
while true; do
case "$1" in
h)
show_help
exit 0
;;
--input1)
shift
empId=$1
;;
--input2)
shift
fromDate=$1
;;
--input3)
shift
toDate=$1
;;
--)
shift
break
;;
esac
shift
done
Nota: he agregado la función de ayuda según mis requisitos, puede eliminarla si no es necesario
getopt no soporta lo que buscas. Puede usar una sola letra ( -a
) o opciones largas ( --long
). Algo como -ab
se trata de la misma forma que -ab
: como opción a
con argumento b
. Tenga en cuenta que las opciones largas están prefijadas por dos guiones.