Parsear parámetros en bash
By josepgarcia on Mié, 06/23/2010 - 11:09
Queremos obtener todos los parámetros pasados a un script, las opciones disponibles serán "-a" y "-b":
Ejemplo: ./parsear.sh -a param1 param2 paramN -b param1 param2 paramN
Una opción es usar la función "getopts":
while getopts "a:b:" OPTION; do case $OPTION in a) echo "OPTION is a" echo "parametros A= $OPTARG" ;; b) echo "OPTION is b" echo "parametros B= $OPTARG" ;; esac done
El problema de "getopts" es que no nos coge todos los parámetros que le pasemos, sólo admite una parámetro más después de las opciones "-a" y "-b".
$ sh parser.sh -a 1 -b 22 OPTION is a parametros A= 1 OPTION is b parametros B= 22 $ sh parser.sh -a 1 -b 22 33 44 OPTION is a parametros A= 1 OPTION is b parametros B= 22
Para que detecte todos los parámetros que existen después de "b" habría que ponerlos entre comillas (pero no queremos):
sh parser.sh -a 1 -b "22 33 44" OPTION is a parametros A= 1 OPTION is b parametros B= 22 33 44
Por lo que he tenido que solucionarlo de la siguiente forma:
#!/bin/bash
function mostrarParametros (){
echo "parametros pasados a la funcion::: $*"
x=$( echo $* | wc -w)
echo "total de parametros = $x"
conta=2
while [ $conta -le $x ]
do
param=$( echo $* | cut -d" " -f$conta)
echo "parametro $conta = $param"
conta=$(expr $conta + 1)
done
}
echo "############"
echo "PARAMETROS B"
# a la función mostrarParametros le pasamos como argumento
# todos los caracteres que hay desde "-b" hasta el próximo "-"
# o hasta el final
mostrarParametros $( echo $* | egrep -oi -- '-b[^-]*')
echo "############"
echo "PARAMETROS A"
mostrarParametros $( echo $* | egrep -oi -- '-a[^-]*')La salida de esta función es:
$ sh parsear_parametros_mini.sh -a 1 2 3 -b 4 55 ############ PARAMETROS B parametros pasados a la funcion::: -b 4 55 total de parametros = 3 parametro 2 = 4 parametro 3 = 55 ############ PARAMETROS A parametros pasados a la funcion::: -a 1 2 3 total de parametros = 4 parametro 2 = 1 parametro 3 = 2 parametro 4 = 3
Categoría:
Añadir nuevo comentario