Josep Garcia

Parsear parámetros en bash

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

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

CAPTCHA
Esta pregunta se hace para comprobar que es usted una persona real e impedir el envío automatizado de mensajes basura.
CAPTCHA de imagen
Enter the characters shown in the image.

Categorías

LinuxAndroidBash ScriptingDrupal

Twitter

Twitter Josep Carlet