Script shell (bash)

Fermé
widi70 Messages postés 649 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 22 juillet 2019 - 4 janv. 2007 à 14:58
 amatesuran - 11 janv. 2011 à 21:02
bonjour tout le monde ça serait pour savoir si vous faites du script shell ici car j'ai bcp de difficulte???????????
merci
A voir également:

22 réponses

#!/bin/sh

while [ -z $rep ] || [ $rep != 'O' ]
do
        echo "entrez votre signe d'opération\n+ pour une adition\n- pour une soustraction\n/ pour une division\n* pour une multiplication."
        read signe
        echo  "vous avez choisi $signe.\netes vous d'accord avec ce signe ' $signe ' ?\nO or N."
        read rep
        if [ $rep = N ]; then
                echo "Refaite votre choix"
        elif [ $rep = O ]; then
                echo "Entrez le premier chiffre ou nombre"
        fi
done
while [ -z $rep2 ] || [ $rep2 != 'O' ]
do
        read chiffre1
        echo "$chiffre1 vous convient-il ?\nO or N."
        read rep2
        if [ $rep2 = N ]; then
                echo "Réécriver le premier chiffre."
        elif [ $rep2 = O ]; then
                echo "Entrez le second chiffre ou nombre."
        fi
done
while [ -z $rep3 ] || [ $rep3 != 'O' ]
do
        read chiffre2
        echo "$chiffre2 vous convient-il ?\nO or N."
        read rep3
        if [ $rep3 = N ]; then
                echo "Réécriver le second chiffre."
        elif [ $rep3 = O ]; then
                echo "Calcul en cour."
        fi
done
let "a = $chiffre1"
let "b = $chiffre2"

if [ $signe = / ]; then
        let "c1 = a / b"
        echo "La solution de ce calcul est $c1"
        elif [ $signe = + ]; then
                let "c2 = a + b"
                echo "La solution de ce calcul est $c2"
        elif [ $signe = - ]; then
                let "c3 = a - b"
                echo "La solution de ce calcul est $c3"
elif [ $signe = * ]; then
                let "c4 = a * b"
                echo "La solution de ce calcul est $c4"
        else
        echo " Opération non conforme."
fi



voila ce que j'ai fais j'ai un problème avec la multiplication et je ne vois pas d'erreurs si quelqu'un peux me donner son avis.

merci d'avance
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 417
8 janv. 2011 à 10:12
Salut,

Une bonne habitude à prendre est de toujours quoter ses variables, surtout dans les test avec "[...]".
En gras ce que j'ai corrigé ou ajouté.
Le "set -xv" en début sert à débuguer le script en enlevant le dièse qui commente la ligne.

#!/bin/sh

#set -xv

while [ -z $rep ] || [ $rep != 'O' ]
do
        echo -e "entrez votre signe d'opération\n+ pour une adition\n- pour une soustraction\n/ pour une division\n* pour une multiplication."
        read signe
        echo -e "vous avez choisi $signe.\netes vous d'accord avec ce signe ' $signe ' ?\nO or N."
        read rep
        if [ $rep = N ]; then
                echo "Refaite votre choix"
        elif [ $rep = O ]; then
                echo "Entrez le premier chiffre ou nombre"
        fi
done
while [ -z $rep2 ] || [ $rep2 != 'O' ]
do
        read chiffre1
        echo -e "$chiffre1 vous convient-il ?\nO or N."
        read rep2
        if [ $rep2 = N ]; then
                echo "Réécriver le premier chiffre."
        elif [ $rep2 = O ]; then
                echo "Entrez le second chiffre ou nombre."
        fi
done
while [ -z $rep3 ] || [ $rep3 != 'O' ]
do
        read chiffre2
        echo -e "$chiffre2 vous convient-il ?\nO or N."
        read rep3
        if [ $rep3 = N ]; then
                echo "Réécriver le second chiffre."
        elif [ $rep3 = O ]; then
                echo "Calcul en cour."
        fi
done
let "a = $chiffre1"
let "b = $chiffre2"

if [ "$signe" = '/' ]; then
        let "c1 = a / b"
        echo "La solution de ce calcul est $c1"
        elif [ "$signe" = '+' ]; then
                let "c2 = a + b"
                echo "La solution de ce calcul est $c2"
        elif [ "$signe" = '-' ]; then
                let "c3 = a - b"
                echo "La solution de ce calcul est $c3"
	elif [ "$signe" = '*' ]; then
                let "c4 = a * b"
                echo "La solution de ce calcul est $c4"
        else
        echo " Opération non conforme."
fi

Il serait bon aussi de rajouter des quotes (doubles) aux autres tests.
J'ai rajouté aussi des "-e" à tous les "echo" qui comportent des "\n" pour que ceux-ci soient pris en compte.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
Modifié par lami20j le 8/01/2011 à 10:30
Salut,

La solution de zipe31 est correcte.
Toutefois, lorsqu'on fait une opération de division je pense qu'il est souhaitable de faire un test pour la division avec zéro

A remplacer

if [ "$signe" = '/' ]; then 
        let "c1 = a / b" 
        echo "La solution de ce calcul est $c1"


avec

if [ "$signe" = '/' ]; then 
  if  [ "$b" = "0" ] 
    then 
      echo "Division avec zéro" 
      exit 
    else 
      let "c1 = a / b" 
      echo "La solution de ce calcul est $c1" 
    fi




En revanche pour toi, je te suggère que lorsqu'il y a plusieurs imbrications de if, c'est plus pratique d'utiliser
case $variable in 
'cas1') 
  #..instructions 
  ;; 
'cas2') 
  #...instructions 
  ;; 



  *)  
  #....instuctions 
;; 
esac

Ce qui donne
#!/bin/sh 

while [ -z $rep ] || [ $rep != 'O' ] 
do 
        echo -e "entrez votre signe d'opération\n+ pour une adition\n- pour une soustraction\n/ pour une division\n* pour une multiplication." 
        read signe 
        echo -e "vous avez choisi $signe.\netes vous d'accord avec ce signe ' $signe ' ?\nO or N." 
        read rep 
        if [ $rep = N ]; then 
                echo "Refaite votre choix" 
        elif [ $rep = O ]; then 
                echo "Entrez le premier chiffre ou nombre" 
        fi 
done 
while [ -z $rep2 ] || [ $rep2 != 'O' ] 
do 
        read chiffre1 
        echo -e "$chiffre1 vous convient-il ?\nO or N." 
        read rep2 
        if [ $rep2 = N ]; then 
                echo "Réécriver le premier chiffre." 
        elif [ $rep2 = O ]; then 
                echo "Entrez le second chiffre ou nombre." 
        fi 
done 
while [ -z $rep3 ] || [ $rep3 != 'O' ] 
do 
        read chiffre2 
        echo -e "$chiffre2 vous convient-il ?\nO or N." 
        read rep3 
        if [ $rep3 = N ]; then 
                echo "Réécriver le second chiffre." 
        elif [ $rep3 = O ]; then 
                echo "Calcul en cours." 
        fi 
done 
a=$chiffre1 
b=$chiffre2 
case $signe in 
'/') 
  if  [ "$b" = "0" ]  
    then 
      echo "Division avec zéro" 
      exit 
    else 
    let c1=$a/$b 
    echo "La solution de ce calcul est $c1" 
  fi 
  ;; 
'+') 
  let c2=$a+$b 
  echo "La solution de ce calcul est $c2" 
  ;; 
'-') 
  let c3=$a-$b 
  echo "La solution de ce calcul est $c3" 
  ;; 
'*') 
  let c4=$a'*'$b 
  echo "La solution de ce calcul est $c4" 
  ;; 
*) 
  echo " Opération non conforme." 
  ;; 
esac 
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 janv. 2011 à 10:40
Re,

Pour aller plus loin, je crois que tu dois refaire ton algorithme

lami20j@debian-acer:~$ ./operation.sh
entrez votre signe d'opération
+ pour une adition
- pour une soustraction
/ pour une division
* pour une multiplication.
$
vous avez choisi $.
etes vous d'accord avec ce signe ' $ ' ?
O or N.
O (ici j'ai fait l'erreur volontaire, c'est un peu embêtant de taper tout le reste pour avoir le message 'Opération non conforme' )
Entrez le premier chiffre ou nombre
8
8 vous convient-il ?
O or N.
O 
Entrez le second chiffre ou nombre.
2
2 vous convient-il ?
O or N.
O
Calcul en cours.
 Opération non conforme.



Volontairement j'ai testé l'opérateur $ qui n'est pas conforme et aussi j'ai choisi O (l'utilisateur peut toujours faire une erreur ;-)
Je ne vois pas l'intérêt de continuer à demander les chiffres ou nombres puisque de toute façon l'opérateur n'est pas bon.

Une idée sera que après la saisie de l'opérateur tu fais le test pour savoir s'il faut continuer ou pas, et ensuite offrir la possibilité d'utilisateur de changer d'opérateur ou pas.
0
merci pour toutes ces info :) je sais ou revenir pour de l'aide merci bien :)
0
Bonjour,


Je voudrais savoir comment on peux utiliser les variables réels dans script?
Par exemple mon code

#!/bin/csh

set x=4
while ($x < 6)

#echo '$i' >> data

@ x = ($x + 1)
end



Je voudrais varier x [4:6] avec delta_x=0.01.

Je vous remercie beaucoup de me répondre

Hao
-1