variable script por pasar parametros con comando argumentos bash command-line-arguments arguments getopts

bash - script - analizar argumentos después de getopts



shift en bash (2)

Quiero llamar a un guión de bash como este

$ ./scriptName -o -p -t something path/to/file

Esto es hasta donde llego

#!/bin/bash o=false p=false while getopts ":opt:" options do case $options in o ) opt1=true ;; p ) opt2=true ;; t ) opt3=$OPTARG ;; esac done

pero como obtengo la path/to/file ?


Para capturar todos los parámetros restantes después del procesamiento de getopts , una buena solución es shift (eliminar) todos los parámetros procesados ​​(variable $OPTIND ) y asignar los parámetros restantes ( $@ ) a una variable específica. Respuesta corta:

shift $(($OPTIND - 1)) remaining_args="$@"

Ejemplo largo:

#!/bin/bash verbose=false function usage () { cat <<EOUSAGE $(basename $0) hvr:e: show usage EOUSAGE } while getopts :hvr:e: opt do case $opt in v) verbose=true ;; e) option_e="$OPTARG" ;; r) option_r="$option_r $OPTARG" ;; h) usage exit 1 ;; *) echo "Invalid option: -$OPTARG" >&2 usage exit 2 ;; esac done echo "Verbose is $verbose" echo "option_e is /"$option_e/"" echo "option_r is /"$option_r/"" echo "/$@ pre shift is /"$@/"" shift $((OPTIND - 1)) echo "/$@ post shift is /"$@/""

Esto dará salida

$ ./test-getopts.sh -r foo1 -v -e bla -r foo2 remain1 remain2 Verbose is true option_e is "bla" option_r is " foo1 foo2" $@ pre shift is "-r foo1 -v -e bla -r foo2 remain1 remain2" $@ post shift is "remain1 remain2"


Puedes hacer algo como:

shift $(($OPTIND - 1)) first_arg=$1 second_arg=$2

después de que el bucle se ha ejecutado.