GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo pasar múltiples argumentos para ejecutar con el script .sh

El método más fácil para leer argumentos se puede describir de la siguiente manera;

Cada argumento es referenciado y analizado por $IFS o definido actualmente internal file separator . El carácter predeterminado es un espacio.

Por ejemplo, tome lo siguiente; # ./script.sh arg1 arg2

La lista de argumentos en ese ejemplo es arg1 = $1 y arg2 = $2 que se puede reescribir como arg1 arg2 = [email protected] .

Otra nota es el uso de una lista de registros, ¿con qué frecuencia cambia eso? Mi suposición es diaria. ¿Por qué no usar la salida del directorio como matriz de su ciclo iterativo? Por ejemplo;

for i in $(ls /path/to/logs); do
  ./workaround.sh $i;
done

O mejor aún, pasa al uso de functions en bash para eliminar el desorden.

function process_file()
{
  # transfer file code/command
}

function iterate_dir()
{
  local -a dir=($(ls $1))
  for file in ${dir[@]}; do
    process_file $file
  done
}

iterate_dir /path/to/log/for

Si bien estas son simplemente sugerencias para mejorar su conocimiento de scripts de shell, debo saber si hay un error que está recibiendo y también necesitaría conocer los detalles de cada código de scripts o funcionalidad. Haciendo uso del -x El argumento también ayuda a depurar secuencias de comandos.

Si simplemente está transfiriendo registros, es posible que desee eliminar todos los scripts y utilizar rsync , rsyslog o syslog ya que todos ellos son mucho más adecuados para la tarea en cuestión.


xargs -n 1 ./script.sh <list.txt

En este ejemplo, xargs ejecutará ./script.sh varias veces con un solo argumento leído desde su entrada estándar.

La entrada estándar proviene del archivo list.txt a través de una simple redirección de entrada de shell. Esto supone que el list.txt El archivo contiene un argumento para usar con el script por línea.

El ./script.sh el script se ejecutará una vez por cada línea en el list.txt archivo.

Sobre el -n marca a xargs

-n number

Invocar utilidad usando tantos argumentos de entrada estándar como sea posible, hasta number (un entero decimal positivo) argumentsmaximum.

Otra solución sería permitir que el script se lea directamente desde list.txt , o para tomar múltiples argumentos de línea de comando (las entradas de list.txt ), y para descargar los archivos en uno o varios lotes. Pero como no sabemos cuál es la mecánica del script, no puedo dar ninguna explicación detallada de cómo hacer esto.


dentro del script:necesita un ciclo de lectura como while read ; do ......... ; done < filename para tratar líneas como variable $REPLY...

por ejemplo

while read 
do
mv $REPLY $REPLY.old
done < liste.txt

cambiará el nombre de cualquier nombre de archivo desde dentro de liste.txt a filename.old

ahora tiene la estructura que puede adaptar a sus necesidades dependiendo de lo que quiera decir con " en el nombre de cada archivo de registro en list.txt para ser ejecutado". :)


Linux
  1. ¿Cómo pasar parámetros a un alias?

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

  3. ¿Cómo puedo pasar todos los argumentos con xargs en medio del comando en Linux?

  4. Cómo eliminar el carácter \r con sed

  5. Cómo pasar la salida del comando como múltiples argumentos a otro comando

Cómo escribir un script Bash con ejemplos

Cómo ejecutar un comando de Shell con Python

Cómo enumerar los sistemas de archivos en Linux con lfs

¿Pasar argumentos de línea de comando a Bash Script?

¿Cómo puedo obtener Ls para listar directorios con una barra inclinada al final?

¿Cómo ejecutar un comando en un script de Shell?