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





Enviar un comentario nuevo