GNU/Linux >> Tutoriales Linux >  >> Linux

Parámetros de script en Bash

Si no está completamente apegado a usar "from" y "to" como nombres de opciones, es bastante fácil implementar esto usando getopts:

while getopts f:t: opts; do
   case ${opts} in
      f) FROM_VAL=${OPTARG} ;;
      t) TO_VAL=${OPTARG} ;;
   esac
done

getopts es un programa que procesa los argumentos de la línea de comandos y los analiza convenientemente por usted.

f:t: especifica que espera 2 parámetros que contienen valores (indicados por los dos puntos). Algo así como f:t:v dice que -v solo se interpretará como una bandera.

opts es donde se almacena el parámetro actual. El case declaración es donde procesará esto.

${OPTARG} contiene el valor que sigue al parámetro. ${FROM_VAL} por ejemplo obtendrá el valor /home/kristoffer/test.png si ejecutó su secuencia de comandos como:

ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt

Como sugieren los demás, si es la primera vez que escribe scripts de bash, debería leer algunos conceptos básicos. Este fue solo un tutorial rápido sobre cómo getopts funciona.


Los argumentos que proporcione a un bashscript aparecerán en las variables $1 y $2 y $3 donde el número se refiere al argumento. $0 es el comando en sí.

Los argumentos están separados por espacios, por lo que si proporciona el -from y -to en el comando, también terminarán en estas variables, así que para esto:

./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt

Obtendrás:

$0    # ocrscript.sh
$1    # -from
$2    # /home/kristoffer/test.png
$3    # -to
$4    # /home/kristoffer/test.txt

Podría ser más fácil omitir el -from y el -to , como:

ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt

Entonces tendrás:

$1    # /home/kristoffer/test.png
$2    # /home/kristoffer/test.txt

La desventaja es que tendrás que proporcionarlo en el orden correcto. Existen bibliotecas que pueden facilitar el análisis de argumentos con nombre en la línea de comandos, pero, por lo general, para scripts de shell simples, debe usar la forma fácil, si no hay problema.

Entonces puedes hacer:

/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1

Las comillas dobles alrededor del $1 y el $2 no siempre son necesarios, pero se recomiendan, porque algunas cadenas no funcionarán si no las pone entre comillas dobles.


Usa las variables "$1" , "$2" , "$3" y así sucesivamente para acceder a los argumentos. Para acceder a todos ellos puedes usar "[email protected]" , o para obtener el recuento de argumentos $# (puede ser útil para comprobar si hay muy pocos o demasiados argumentos).


Necesitaba asegurarme de que mis scripts fueran completamente portátiles entre varias máquinas, shells e incluso versiones de cygwin. Además, mis colegas para quienes tuve que escribir los guiones son programadores, así que terminé usando esto:

for ((i=1;i<=$#;i++)); 
do

    if [ ${!i} = "-s" ] 
    then ((i++)) 
        var1=${!i};

    elif [ ${!i} = "-log" ];
    then ((i++)) 
        logFile=${!i};  

    elif [ ${!i} = "-x" ];
    then ((i++)) 
        var2=${!i};    

    elif [ ${!i} = "-p" ]; 
    then ((i++)) 
        var3=${!i};

    elif [ ${!i} = "-b" ];
    then ((i++)) 
        var4=${!i};

    elif [ ${!i} = "-l" ];
    then ((i++)) 
        var5=${!i}; 

    elif [ ${!i} = "-a" ];
    then ((i++)) 
        var6=${!i};
    fi

done;

Justificación:incluí un launcher.sh script también, ya que toda la operación tenía varios pasos que eran casi independientes entre sí (digo "cuasi", porque aunque cada script podía ejecutarse por sí solo, generalmente se ejecutaban todos juntos), y en dos días descubrí que aproximadamente la mitad de mis colegas, siendo programadores y todo, eran demasiado buenos para usar el archivo de inicio, seguir el "uso" o leer la AYUDA que se mostraba cada vez que hacían algo mal y estaban haciendo todo un lío, ejecutando scripts con argumentos en el orden incorrecto y quejándose de que los scripts no funcionaban correctamente. Siendo el colérico que soy, decidí revisar todos mis guiones para asegurarme de que sean a prueba de colegas. El segmento de código anterior fue lo primero.


Linux
  1. Agregar argumentos y opciones a sus scripts de Bash

  2. Debian – ¿Mover /var, /home a una partición separada?

  3. ¿Cómo cambiar los puntos de montaje?

  4. ./configure:/bin/sh^M:mal intérprete

  5. ¿No puede ejecutar scripts bash incluso como root?

35 ejemplos de secuencias de comandos Bash

¿Cómo pasar parámetros a un script Bash?

Ejecute el comando bash en la canalización de jenkins

¿Cuándo debo usar /dev/shm/ y cuándo debo usar /tmp/?

Permisos de escritura de usuario SFTP chrooted

Cómo cambiar el valor predeterminado /tmp a /home/user/tmp