GNU/Linux >> Linux Esercitazione >  >> Linux

L'incremento del contatore nel ciclo Bash non funziona

Innanzitutto, non stai aumentando il contatore. Modifica COUNTER=$((COUNTER)) in COUNTER=$((COUNTER + 1)) o COUNTER=$[COUNTER + 1] lo aumenterà.

In secondo luogo, è più complicato propagare all'indietro le variabili subshell al chiamato come supponi. Le variabili in una subshell non sono disponibili al di fuori della subshell. Queste sono variabili locali al processo figlio.

Un modo per risolverlo è utilizzare un file temporaneo per memorizzare il valore 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 TESTATO:Centos, SuSE, RH


COUNTER=$((COUNTER+1)) 

è un costrutto piuttosto goffo nella programmazione moderna.

(( COUNTER++ ))

sembra più "moderno". Puoi anche usare

let COUNTER++

se pensi che migliori la leggibilità. A volte, Bash offre troppi modi di fare le cose - la filosofia Perl suppongo - quando forse il Python "c'è solo un modo giusto per farlo" potrebbe essere più appropriato. Questa è un'affermazione discutibile se mai ce n'è stata una! Ad ogni modo, suggerirei che l'obiettivo (in questo caso) non sia solo quello di incrementare una variabile ma (regola generale) anche di scrivere codice che qualcun altro possa capire e supportare. La conformità fa molto per raggiungere questo obiettivo.

HTH


Linux
  1. La variabile Curl Outfile non funziona nello script Bash?

  2. Incrementare il numero di build in Bash?

  3. bash sh - comando non trovato

  4. Il comando Linux 'll' non funziona

  5. Comando Conda che funziona nel prompt dei comandi ma non nello script bash

Bash mentre Loop

Bash For Loop

Bash fino a Loop

Come aumentare e diminuire la variabile in Bash (counter)

Bash pausa e continua

Bash Beginner Series #8:Loop in Bash