GNU/Linux >> Tutoriales Linux >  >> Linux

El incremento del contador en el bucle Bash no funciona

Primero, no estás aumentando el contador. Cambiando COUNTER=$((COUNTER)) en COUNTER=$((COUNTER + 1)) o COUNTER=$[COUNTER + 1] lo aumentará.

En segundo lugar, es más complicado propagar hacia atrás las variables de la subcapa al receptor de la llamada a medida que supone. Las variables en una subcapa no están disponibles fuera de la subcapa. Estas son variables locales del proceso hijo.

Una forma de resolverlo es usar un archivo temporal para almacenar el valor intermedio:

TEMPFILE=/tmp/$$.tmp
echo 0 > $TEMPFILE

# Loop goes here
  # Fetch the value and increase it
  COUNTER=$[$(cat $TEMPFILE) + 1]

  # Store the new value
  echo $COUNTER > $TEMPFILE

# Loop done, script done, delete the file
unlink $TEMPFILE

COUNTER=1
while [ Your != "done" ]
do
     echo " $COUNTER "
     COUNTER=$[$COUNTER +1]
done

BASH PROBADO:Centos, SuSE, RH


COUNTER=$((COUNTER+1)) 

es una construcción bastante torpe en la programación moderna.

(( COUNTER++ ))

parece más "moderno". También puedes usar

let COUNTER++

si crees que eso mejora la legibilidad. A veces, Bash ofrece demasiadas formas de hacer las cosas, supongo que la filosofía de Perl, cuando quizás el Python "solo hay una forma correcta de hacerlo" podría ser más apropiado. ¡Esa es una declaración discutible si alguna vez hubo una! De todos modos, sugeriría que el objetivo (en este caso) no es solo incrementar una variable sino (regla general) también escribir código que alguien más pueda entender y admitir. La conformidad contribuye en gran medida a lograrlo.

HTH


Linux
  1. ¿Incrementar el número de compilación en Bash?

  2. Bash Beginner Series #8:Bucles en Bash

  3. Bash para ejemplos de bucle

  4. Matriz en Bash no encontrada

  5. bash sh - comando no encontrado

Cómo escribir un bucle en Bash

Golpear mientras se repite

Golpe para bucle

Golpear hasta bucle

Cómo incrementar y decrementar una variable en Bash (Contador)

Bash romper y continuar