¿Hay algunas herramientas integradas que reconocerán -x
y --xxxx
como modificadores, y no argumentos, o tiene que revisar todas las variables de entrada, probar guiones y luego analizar los argumentos a partir de entonces?
shell
shell-script
options
getopts
usuario394
fuente
fuente
getopt
siempre debe verificarse como GNU getopt antes de usarlo, pero no debe usarlo de todos modos ya quegetopts
es más portátil (y generalmente más agradable) de todos modos. Si haces necesidad de llamar por alguna razón, lo llaman de una manera específica de GNU, y asegurarse de queGETOPT_COMPATIBLE
no se encuentra en el medio ambiente.while getopts "ab:" opt
hacer?:
Después de una letra de opción significa que requiere un argumento. A:
como primer carácter significa suprimir los mensajes de error.Supongo que estás usando bash o similar. Un ejemplo:
fuente
+=
con una matriz. No sabía que podías hacer eso. ¡Agradable!Tienes que escribir un ciclo para analizar los parámetros. De hecho, puede usar el
getopts
comando para hacerlo fácilmente.Este es un ejemplo simple de
getopts
la página del manual:fuente
Recientemente escribí un script para el trabajo que era versátil y permitía múltiples tipos de interruptores en cualquier orden. No puedo revelar el guión completo por razones legales obvias (sin mencionar que no lo tengo conmigo en este momento), pero aquí está el meollo del asunto ... puede ponerlo en una subrutina y llamarlo al final de tu guión:
Recomiendo limitar su script bash a menos de 400 líneas / 15k caracteres; mi guión antes mencionado creció más allá de este tamaño y se volvió muy difícil trabajar en él. Comencé a reescribirlo en Perl, que es mucho más adecuado para la tarea. Tenga eso en cuenta mientras trabaja en sus scripts en bash. Bash es ideal para pequeños scripts y líneas, pero cualquier cosa más compleja y es mejor escribirlo en Perl.
Tenga en cuenta que no he probado lo anterior, por lo que probablemente no funcione, pero se entiende la idea general.
fuente
options
al final no es correcta, volverá-bash: syntax error near unexpected token $@
. Llámalo comooptions "$@"
.while
condición no debería ser(($#))
en su lugar?$#
? Editar: tienes razón. Lo arregló awhile (( "$#" ))