Erreur script bash

Résolu/Fermé
Paul - 3 mars 2015 à 23:13
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 5 mars 2015 à 08:57
Bonjour à tous,

Premièrement je précise que je suis débutant dans la programmation en bash et j'ai un peu de mal à comprendre l'erreur dont me parle la console.

L'erreur (ou plutôt les erreurs) sont les suivantes :
./algo.sh: ligne 36 : [: « ] » manquant
./algo.sh: ligne 39 : [: « ] » manquant


Et elles tournent en boucle (rien de très choquant on se trouve dans une boucle plus ou moins infinie.

Ci-joint le script dans sa totalité (pour la petite histoire c'est juste un programme qui analyse des chiffres, ce serait long d'expliquer pourquoi et un peu ridicule aussi...)

D'avance merci :

let "a = 0"
let "b = 1"
let "c = 0"
let "d = 2"
let "e = 0"
let "f = 0"
let "g = 3"
let "h = 4"
let "i = 0"
let "j = 0"

let "x = 0"

while [ $x = 0 ]; do

# INCREMENTATION DE BASE AVEC RESPECT DE L'HORODATAGE
let "j = j + 1";
if [ $j -gt 9 ]; then let "i = i + 1" ; let "j = 0" ; fi
if [ $i -gt 5 ]; then let "h = h + 1" ; let "i = 0" ; fi
if [ $h -gt 9 ]; then let "g = g + 1" ; let "h = 0" ; fi
if [ $g -gt 5 ]; then let "f = f + 1" ; let "g = 0" ; fi
if [ $f -gt 9 ]; then let "e = e + 1" ; let "f = 0" ; fi
if [ $e -gt 2 ]; then let "d = d + 1" ; let "e = 0" ; fi
if [ $d -gt 9 ]; then let "c = c + 1" ; let "d = 0" ; fi
if [ $c -gt 3 ]; then let "b = b + 1" ; let "c = 0" ; fi
if [ $b -gt 9 ]; then let "a = a + 1" ; let "b = 0" ; fi
if [ $a -gt 1 ]; then exit 0 ; fi

# CORRECTIONS DE L'INCREMENTATION POUR MOIS/ JOURS/ HEURES
if [ $a = 1 ] && [ $b -gt 2 ]; then exit 0 ; fi
if [ $c = 3 ] && [ $d -gt 1 ]; then let "d = 1" ; let "c = 0" ; let "b = b +1" ; fi
if [ $c = 0 ] && [ $d = 0 ]; then let "d = d + 1" ; fi
if [ $e = 2 ] && [ $f -gt 3 ]; then let "f = 0"; let "e = 0"; let "d = d + 1"; fi

# VERIFICATIONS BASIQUES SANS ACE : BA, DB, FB, FD, GB, GD, GF
if [ $b = $a ] || [ $d = $b ] || [ $f = $b ] || [ $f = $d ] || [ $g = $b ] || [ $g = $d ] || [ $g = $f ]; then : #DATE CORRESPOND PAS
else
# VERIFICATIONS BASIQUES SANS ACE 2 : HB, HD, HF, HG, IB, ID, IF, IG, IH
if [ $h = $b ] || [ $h = $d ] || [ $h = $f ] || [ $h = $g ] || [ $i = $b ] || [ $i = $d ] || [ $i = $f ] || [ $i = $g ] || [ $i = $h ]; then : #DATE CORRESPOND PAS
else
# VERIFICATIONS BASIQUES SANS ACE 3 : JB, JD, JF, JG, JH, JI
if [ $j = $b ] || [ $j = $d ] || [ $j = $f ] || [ $j = $g ] || [ $j = $h ] || [ $j = $i ]; then : #DATE CORRESPOND PAS
else
# VERIFICATIONS AVANCEES AVEC ACE : CA, CB, CD, CE, CF, CG, CH, CI, CJ
if [ $c = $a ] && [ $c != 0 ] && [ $a != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $e ] && [ $c != 0 ] && [ $e != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $e ] && [ $a != 0 ] && [ $e != 0 ]; then : #DATE CORRESPOND PAS


elif [ $c = $b ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $d ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $f ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $g ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $h ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $i ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $c = $j ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS

elif [ $e = $b ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $d ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $f ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $g ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $h ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $i ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $e = $j ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS

elif [ $a = $b ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $d ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $f ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $g ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $h ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $i ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS
elif [ $a = $j ] && [ $c != 0 ]; then : #DATE CORRESPOND PAS


else #DATE CORRESPOND ! INSCRIPTION
echo "\n $a$b$c$d$e$f$g$h$i$j" >> resulats.log

fi




fi

fi

fi



done

2 réponses

http://pastie.org/9997124

Le lien pastie si ça peut vous permettre de mieux lire
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 4/03/2015 à 15:56
hello
est-un fichier Windows qui contient des ^M ?; voir avec cat -A
pour interpréter le \n, utiliser -e
echo  -e "\n $a$b$c$d$e$f$g$h$i$j" >> resulats.log 
0
Bonjour !

Merci pour ta réponse, quelques précisions :
Résultats.log n'est pas un fichier Windows car je tourne sous Linux, c'est donc juste un fichier texte classique.
Merci pour l'oubli de l'argument -e ! Même si mon programme n'est encore jamais arrivé jusqu'à cette ligne, car le fichier résultat reste vide à l'exécution et le programme tourne en boucle sur les deux erreurs citées dans mon premier post. Il y a certainement une erreur de syntaxe mais je ne la trouve pas...
Quelqu'un aurait une idée ?

D'avance merci !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 4/03/2015 à 16:43
je parle du fichier algo.sh
sans ^M, il tourne, resultats.log se rempllt, avec des ^M j'ai plein d'erreurs
0
C'est étonnant je l'ai fait exclusivement depuis Linux... D'après toi supprimer les ^M suffirait ? Je n'ai pas mon PC sous la main je regarderai ça ce soir.

J'en arrivais de mon côté à la conclusion que j'utilise mal les conditions. Est-ce bien possible de mettre if et then sur une même ligne avec simplement un ";" pour les séparer ? Le contenu de mes then suffit-il ou existe-t-il une fonction nulle sous bash ? C'est ce qui me semblait le plus logique étant donné que les erreurs arrivent aux lignes de mes premiers if (++vérifications); then (vide) else.

J'essaie donc de me renseigner sur ces ^M (j'avoue ne jamais avoir rencontré ce problème) et de régler le soucis plus tard dans la soirée, merci !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 4/03/2015 à 17:05
si le fichier ne vient pas de Windows, ça ne devrait pas, mais vérifier avec cat -A
0
Le fichier ne contient aucun ^M après vérification via la commande cat -A.
Cependant il contient beaucoup de ^I, je ne sais pas si c'est un prooblème ? (Encore une fois je suis débutant...)

J'ai bien corrigé le problème avec l'argument -e oublié, évidemment ça ne solutionne toujours pas mon problème...
0