GNU/Linux >> Tutoriels Linux >  >> Linux

L'incrémentation du compteur dans la boucle Bash ne fonctionne pas

Premièrement, vous n'augmentez pas le compteur. Modification de COUNTER=$((COUNTER)) en COUNTER=$((COUNTER + 1)) ou COUNTER=$[COUNTER + 1] l'augmentera.

Deuxièmement, il est plus délicat de rétro-propager les variables de sous-shell à l'appelé comme vous le supposez. Les variables d'un sous-shell ne sont pas disponibles en dehors du sous-shell. Ce sont des variables locales au processus enfant.

Une façon de le résoudre consiste à utiliser un fichier temporaire pour stocker la valeur intermédiaire :

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 TESTÉ :Centos, SuSE, RH


COUNTER=$((COUNTER+1)) 

est une construction assez maladroite dans la programmation moderne.

(( COUNTER++ ))

semble plus "moderne". Vous pouvez également utiliser

let COUNTER++

si vous pensez que cela améliore la lisibilité. Parfois, Bash donne trop de façons de faire les choses - la philosophie Perl je suppose - alors que Python "il n'y a qu'une seule bonne façon de le faire" pourrait être plus approprié. C'est une déclaration discutable s'il en est une ! Quoi qu'il en soit, je dirais que le but (dans ce cas) n'est pas seulement d'incrémenter une variable mais (règle générale) d'écrire également du code que quelqu'un d'autre peut comprendre et prendre en charge. La conformité contribue grandement à y parvenir.

HTH


Linux
  1. Incrémenter le numéro de build dans Bash ?

  2. Bash Beginner Series #8 :Boucles dans Bash

  3. bash sh - commande introuvable

  4. Linux limits.conf ne fonctionne pas ?

  5. La commande Linux 'll' ne fonctionne pas

Bash pendant la boucle

Bash pour la boucle

Bash jusqu'à la boucle

Comment incrémenter et décrémenter une variable dans Bash (compteur)

Bash pause et continuer

echo caractère de nouvelle ligne ne fonctionne pas dans bash