J'ai essayé de chercher et je n'ai pas trouvé de réponse directe à mon problème, car tous les autres codes semblent faire ce que je fais. Je travaille sur un exercice de scripting Shell pour calculer les moyennes d'une classe et je l'ai fait jusqu'ici à l'aide de nos scripts de référence. Cependant, des erreurs de syntaxe se produisent (erreur au bas du code).
#!/bin/bash
avg=0
temp_total=0
number_of_args=$#
# First see the sufficient cmd args
if [ $# -lt 2 ] ; then
echo -e "Oops! I need at least 2 command line args to calculate an average\n"
echo -e "Syntax: $0: number1 number2 ... numberN\n"
echo -e "Example:$0 5 4\n\t$0 56 66 34"
exit 1
fi
# now calculate the average of the numbers given on command line as cmd args for i in $*
do
# addition of all the numbers on cmd args
temp_total='expr $temp_total + $i '
done
avg='expr $temp_total / $number_of_args '
echo "The average of all the numbers is $avg"
Donc, l'erreur que je reçois est
./avg.sh: line 16: syntax error near unexpected token `do'
./avg.sh: line 16: `do'
Je ne trouve rien de particulièrement faux autour de cette zone, alors j'espérais que quelqu'un pourrait m'aider! Merci!
edit: En particulier, j'ai essayé de supprimer les commentaires au hasard, sans succès. J'ai recopié la section aussi. J'ai également essayé de trouver différentes façons de gérer cette partie, mais la plupart des scripts de calcul de moyenne semblent le traiter de la même manière, alors je suis perdu!
Le message d'erreur indique qu'un do
inattendu est dû à une erreur: do
est un mot réservé utilisé dans for
name__, case
name__, while
et until
name__. Comme le commentaire précédent se termine par for i in $*
, je suppose que vous avez simplement oublié d'ajouter un saut de ligne à cet endroit:
# now calculate the average of the numbers given on command line as cmd args
for i in $*
do
# addition of all the numbers on cmd args
temp_total='expr $temp_total + $1 '
done
man bash
/Shell GRAMMAR/Compound Commands explique comment construire for
et d'autres boucles. Si vous voulez simplement boucler sur chaque argument, bash
supporte également une forme courte, je le combinerai avec bash
Expansion arithmétique ici:
# now calculate the average of the numbers given on command line as cmd args
for i
do
# addition of all the numbers on cmd args
temp_total=$((temp_total+i))
done