Résolu script bash avec virgule en entré

  • Auteur de la discussion talla2014
  • Date de début

talla2014

Nouveau membre
Bonjour je suis debutant sous lunix et j'ai fais un script bash sous lunix qui s'éxecute avec des valeurs en entiers mais les valeurs avec virgule me rtournent une reponses d'erreur '' line 38: [: 4.8: integer expression expected''
je ne sais pas quoi faire j 'ai tout essayé mais rien ne marche je ne sais quoi faire je vous transment le script en question; Merci d'avance à tous
C:
#!/bin/bash
NRDtho=13
NRDcra=60
NRDabdo=120
NRDcolo=8
NRDbass=170
echo "Entrez la dose delivré" 
    read Dose
 echo "Entrez le titre de l examen:" 
 read Exam  
 if [ "$Exam" = "thorax" ] ; then
    if [ "$Dose" -le "$NRDtho" ] ; then
       echo " bonne dose pour le thorax"
    else
        echo "mauvaise dose pour thorax"  
     fi
 fi
 if [ "$Exam" = "abdomen" ] ; then	
    if [ "$Dose" -le "$NRDabdo" ] ; then
       echo " bonne dose pour l abdomen"
    else
        echo "mauvaise dose pour l abdomen"  
     fi
  fi
if [ "$Exam" = "crane" ] ; then	
    if [ "$Dose" -le "$NRDcra" ] ; then
       echo " bonne dose pour un crane"
    else
        echo "mauvaise dose pour crane"  
     fi
  fi
 

zeb

Modérateur
Meilleure réponse
Plop,

Débutant hein ? En utilisation du clavier. Attention, les touches U et I sont très proches l'une de l'autre !

----------------------------------------------

Ah, malheureusement, et comme l'indique le message, bash ne comprend que les entiers.
La faute à la commande test (le crochet ouvrant est un alias de la commande test).
Pour t'en convaincre, va lire la man page de tes ($> man test).

----------------------------------------------

Tu es donc débutant. Alors je vais me permettre quelques conseils.
Je t'invite à utiliser des majuscules pour tes variables. Ce n'est pas obligatoire, c'est juste l'usage.
Quand une erreur survient, je te propose d'arrêter le traitement. De préférence avec la fonction exit.
Une succession de if peut être remplacée par un case.
Les messages d'erreur doivent être envoyés sur la sortie d'erreur (stdout - descripteur de fichier n°2).
Les messages de réussite ne devraient pas être. Car le silence est d'or (cf. philosophie d'UNIX). Sauf si on est en mode verbeux.
La virgule est le séparateur en français. Linux a une certaine tendance à n'aimer que la langue de Shakespeare. Utilise un point.
Ou alors transforme cette virgule en point.

C:
#!/bin/bash

NRD_THO=13
NRD_CRA=60
NRD_ABDO=120
NRD_COLO=8
NRD_BASS=170
VERBOSE=""

echo "Entrez la dose delivré" ; read DOSE
# suppression de la partie décimale de DOSE
DOSE=( echo $DOSE | sed "s/\([0-9][0-9]*\)[.,].*/\1/" )

echo "Entrez le titre de l'examen:" ; read EXAM

case $EXAM in
	"thorax")
		if [ $DOSE -gt $NRD_THO ]
		then
			echo "mauvaise dose pour thorax" >&2
			exit 1
		fi
		[ "$VERBOSE" ] && echo "dose pour thorax Ok" >&2
		break;
	"abdomen")
		if [ $DOSE -gt $NRD_ABDO ]
		then 
			echo "mauvaise dose pour abdomen" >&2
			exit 1
		fi
		[ "$VERBOSE" ] && echo "dose pour abdomen Ok" >&2
		break;
	"crane")
		if [ $DOSE -gt $NRD_CRA ]
		then 
			echo "mauvaise dose pour crâne" >&2
			exit 1
		fi
		[ "$VERBOSE" ] && echo "dose pour crâne Ok" >&2
		break;
esac
 

zeb

Modérateur
Si tu as absolument besoin de nombres décimaux, regarde du côté de la commande bc.
Autre solution, se mettre au perl ! ;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 098
Messages
6 717 058
Membres
1 586 285
Dernier membre
LeFront
Partager cette page
Haut