Buscar..


Observaciones

  • shift desplaza los parámetros de posición a la izquierda de modo que $2 convierte en $1 , $3 convierte en $2 y así sucesivamente.
  • "$@" es una matriz de todos los parámetros posicionales pasados ​​al script / función.
  • "$*" es una cadena compuesta por todos los parámetros posicionales pasados ​​al script / función.

Análisis de múltiples parámetros

Para analizar una gran cantidad de parámetros, la forma preferida de hacer esto es usar un bucle while, una declaración de caso, y el desplazamiento.

shift se usa para mostrar el primer parámetro de la serie, lo que solía ser $ 2 , ahora $ 1 . Esto es útil para procesar argumentos uno a la vez.

#!/bin/bash

# Load the user defined parameters
while [[ $# > 0 ]]
do
        case "$1" in

                -a|--valueA)
                        valA="$2"
                        shift
                        ;;

                -b|--valueB)
                        valB="$2"
                        shift
                        ;;

                --help|*)
                        echo "Usage:"
                        echo "    --valueA \"value\""
                        echo "    --valueB \"value\""
                        echo "    --help"
                        exit 1
                        ;;
        esac
        shift
done

echo "A: $valA"
echo "B: $valB"

Entradas y salidas

$ ./multipleParams.sh --help
Usage:
    --valueA "value"
    --valueB "value"
    --help

$ ./multipleParams.sh
A: 
B:

$ ./multipleParams.sh --valueB 2
A: 
B: 2

$ ./multipleParams.sh --valueB 2 --valueA "hello world"
A: hello world
B: 2

Parámetros de acceso

Al ejecutar un script de Bash, los parámetros pasados ​​en el script se nombran de acuerdo con su posición: $1 es el nombre del primer parámetro, $2 es el nombre del segundo parámetro, y así sucesivamente.

Un parámetro faltante simplemente se evalúa como una cadena vacía. La comprobación de la existencia de un parámetro se puede hacer de la siguiente manera:

if [ -z "$1" ]; then
    echo "No argument supplied"
fi

Obteniendo todos los parametros

$@ y $* son formas de interactuar con todos los parámetros del script. Haciendo referencia a la página de Bash , vemos que:

  • $* : Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión ocurre entre comillas dobles, se expande a una sola palabra con el valor de cada parámetro separado por el primer carácter de la variable especial IFS.
  • $@ : Se expande a los parámetros posicionales, comenzando desde uno. Cuando la expansión ocurre dentro de comillas dobles, cada parámetro se expande a una palabra separada.

Obtener el número de parámetros

$# obtiene el número de parámetros pasados ​​a un script. Un caso de uso típico sería verificar si se pasa el número apropiado de argumentos:

if [ $# -eq 0 ]; then
    echo "No arguments supplied"
fi

Ejemplo 1

Recorre todos los argumentos y verifica si son archivos:

for item in "$@"
do  
    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done

Ejemplo 2

Recorre todos los argumentos y verifica si son archivos:

for (( i = 1; i <= $#; ++ i ))
do
    item=${@:$i:1}

    if [[ -f $item ]]; then
        echo "$item is a file"
    fi  
done

Análisis de argumentos utilizando un bucle for

Un ejemplo simple que proporciona las opciones:

Optar Alt. Optar Detalles
-h --help Mostrar ayuda
-v --version Mostrar información de la versión
-dr path --doc-root path Una opción que toma un parámetro secundario (una ruta)
-i --install Una opción booleana (verdadero / falso)
-* - Opción inválida
#!/bin/bash
dr=''
install=false

skip=false
for op in "$@";do
    if $skip;then skip=false;continue;fi
    case "$op" in
        -v|--version)
            echo "$ver_info"
            shift
            exit 0
            ;;
        -h|--help)
            echo "$help"
            shift
            exit 0
            ;;
        -dr|--doc-root)
            shift
            if [[ "$1" != "" ]]; then
                dr="${1/%\//}"
                shift
                skip=true
            else
                echo "E: Arg missing for -dr option"
                exit 1
            fi
            ;;
        -i|--install)
            install=true
            shift
            ;;
        -*)
            echo "E: Invalid option: $1"
            shift
            exit 1
            ;;
    esac
done

Guión envoltorio

El script Wrapper es un script que envuelve otro script o comando para proporcionar funcionalidades adicionales o simplemente para hacer algo menos tedioso.

Por ejemplo, el egrep real en el nuevo sistema GNU / Linux está siendo reemplazado por un script envoltorio llamado egrep . Así es como se ve:

#!/bin/sh
exec grep -E "$@"

Entonces, cuando ejecuta egrep en tales sistemas, en realidad está ejecutando grep -E con todos los argumentos reenviados.

En el caso general, si desea ejecutar un ejemplo script / comando exmp con otro guión mexmp entonces el envoltorio mexmp guión se verá así:

#!/bin/sh
exmp "$@" # Add other options before "$@"
# or 
#full/path/to/exmp "$@"

Dividir cadena en una matriz en Bash

Digamos que tenemos un parámetro String y queremos dividirlo con una coma

my_param="foo,bar,bash"

Para dividir esta cadena por comas podemos utilizar;

IFS=',' read -r -a array <<< "$my_param"

Aquí, IFS es una variable especial llamada Separador de campo interno que define el carácter o caracteres utilizados para separar un patrón en tokens para algunas operaciones.

Para acceder a un elemento individual:

echo "${array[0]}"

Para iterar sobre los elementos:

for element in "${array[@]}"
do
    echo "$element"
done

Para obtener tanto el índice como el valor:

for index in "${!array[@]}"
do
    echo "$index ${array[index]}"
done


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow