-2
votes

Quel est le problème avec mon script de shell Linux?

#!/bin/bash
declare -a tableau
for i in `seq 0 9`
do 
    echo "enter a nbr : "
    read ${tableau[$i]}
done
let "max = ${tableau[0]}"
for j in `seq 1 9`
    if [ ${tableau[$i]} -gt $max ]
    then
        let "max = ${tableau[$i]}"
    fi 
done
echo "Max is : $max"
the user will enter 10 number in a TABLE ,i should find the max and the min .

3 commentaires

Vous manquez do dans la seconde pour boucle. Collez votre code dans Shellcheck.net.


Courez-le bien que Shellcheck comme première étape. Puis décrivez ce que ça fait ça, ça ne devrait pas être ...


Voir également Comment utiliser Shellcheck , Comment déboguer un script Bash? (U & L.se), Comment déboguer un script Bash ? (SO), Comment déboguer Bash Script? (asku), Débogage des scripts Bash , etc.


4 Réponses :


3
votes
  1. Comme dit précédemment, la déclaration de lecture ne doit pas avoir $ ni {}.
  2. Il ne devrait pas y avoir de place pour une affectation variable: max = $ {tableau [0]}
  3. Dans votre deuxième boucle, vous êtes itération J mais utilisez i pour l'index de la matrice.

    qui donne xxx


3 commentaires

Je n'utiliserais pas les missions dans ce cas particulier (la même chose que vous), mais la question utilisée laisse, ce qui n'est pas une mauvaise chose à faire, c'est ça?


Pas vraiment, mais il aurait toujours besoin de se débarrasser de l'espace: Soit x = 2 pas let x = 2.


Les espaces autour de = sont ok dans une expression arithmétique.



0
votes

Essayez-le xxx

sortie: xxx


4 commentaires

Votre deuxième affectation ne doit pas avoir de place: max = $ {tableau [$ j]}


J'ai une sortie appropriée sur mon ordinateur. Vous voyez une erreur sur la vôtre?


vous avez manqué "faire" après la seconde "pour"


vous êtes le bienvenu) . N'oubliez pas de Stackoverflow.com/help/someone-answers



0
votes

J'essaie que cela ne fonctionne toujours pas, c'est l'erreur de message que je reçois une erreur de syntaxe près de TOKE inattendue 'si' xxx


1 commentaires

Bash cherche le mot-clé do après le 2e pour , mais il a si et a lancé une erreur de syntaxe. Collez votre code dans shellcheck.net



0
votes

Bit d'un avis de code. Il s'agit d'une manière plus spécifique à Bash de l'écrire: xxx

où:

  • lecture -p pour fournir l'invite
  • l'expression de la corde au lieu d'appeler à SEQ
  • itération sur les éléments de la matrice, pas les touches.
  • $ n'est pas strictement requis dans les expressions arithmétiques (y compris pour les éléments de réseau indexé, le code entre [ et ]
  • Utilisation du ((...)) Arithmétique Conditionnel
  • L'opérateur logique &&

    Cependant, vous n'avez même pas besoin de 2 boucles: xxx


0 commentaires