Script shell (bash)

bonjour tout le monde ça serait pour savoir si vous faites du script shell ici car j'ai bcp de difficulte???????????
merci
Configuration: Windows XP
Internet Explorer 6.0

22 réponses

Résumé de la discussion

Question initiale porte sur le script shell et les difficultés liées à la création d'un script qui effectue des opérations arithmétiques sur deux entiers. Plusieurs solutions émergent, incluant l'emploi d'un menu opéré par case et read, l'utilisation de bc pour les divisions réelles, et des variantes avec expr ou $((...)) pour les calculs entiers. Des échanges concernent aussi la gestion d'erreurs telle la division par zéro, l'affichage des résultats et une comparaison entre expr, let et les formes arithmétiques modernes comme $((...)) ou les variantes anciennes. En complément, certains échanges évoquent des scripts utilitaires affichant le répertoire courant ou présentant des démonstrations d'affichage des résultats lors de l'exécution.

Bobot (l’IA à votre service)
  1. Modérateur
    Re,

    1)ecrire un programme shell nommé "operation". Ce programme utilise deux arguments (on suppose que les deux arguments sont des entiers et le deuxième argument est nul). Le programme doit calculer et afficher la somme, la difference, la division, la multiplication et le reste de la division.
    #!/bin/sh
    
    n1=$1
    n2=$2
    
    echo "Entrez l'opération à effectuer :"
    read op
    
    case $op in
    '+')
       echo $(($1 + $2))
       ;;
    '-')
       echo $(($1 - $2))
       ;;
    '*')
       echo $(($1 * $2))
       ;;
    '/')
       echo "scale=2;$1/$2" | bc
       ;;
    *)
       echo "Opération inconnue"
       ;;
    esac
    
    7
    1. Modérateur
      Re,

      4: Pour cette exercice il faut donnner le texte de commande:

      nom de la commande: cmd2
      arguments: aucun
      effet: La commande doit editer le message suivant: "Mon repertoire courant est: ...."


      Dans un terminal tape
      echo -e '#!/bin/sh\n\necho "Mon répertoire courant est : $(pwd)"' > cmd2
      ensuite pour exécution
      chmod +x cmd2 && ./cmd2
      3
      1. Modérateur
        Re,

        ben a vrai dire je comprend pas trop la elle sont ou les commande ?
        parce que par exemple pour le a) fallait utiliser la commande expr


        Pourtant tu as dit dans le message 12
        ok bon ça y est j'ai trouver
        pour expr c'est
        $ a=`expr 3 + 4`
        $ echo $a
        7
        #!/bin/sh
        
        n1=$1
        n2=$2
        
        echo -e "Opérations \n"
        echo "+ addittion"
        echo "- soustraction"
        echo "* multiplication"
        echo "/ division entière"
        echo "% modulo - calculer le reste"
        echo -e "\nEntrez l'opération à effectuer sur $1 et $2\n"
        
        read op
        
        case $op in
        '+')
           expr $1 + $2
           ;;
        '-')
           expr $1 - $2
           ;;
        '*')
           expr $1 '*' $2
           ;;
        '/')
           if  [ "$2" = "0" ] 
           then
              echo "Division avec zéro"
              exit
           else
              expr $1 / $2 
           fi
           ;;
        '%')
           if  [ "$2" = "0" ] 
           then
              echo "Division avec zéro"
              exit
           else
              expr $1 % $2
           fi
           ;;
        *)
           echo "Opération inconnue"
           ;;
        esac
        3
        1. Modérateur
          Salut,

          ça serait pour savoir si vous faites du script shell ici car j'ai bcp de difficulte???????????

          Si tu parles de la cuisine shell, alors donne ta recette.
          Tu trouveras sûrement un shell cook :-))
          1
          1. y'aurais possibilité que tu m 'explique un peu???
            Merci
            1
            1. ok merci bien et sinon pour ma question <12> (le texte des commandes)
              je pourrais avoir une tite aide aussi SVP
              juste un exemple et apres je vous montre ce que j'ai fait
              1
              1. Modérateur
                et pour toutes les commandes que j'ai citer dans <12> ça marche comme ça???

                Pas tout à fait. Voilà avec declare
                #!/bin/sh
                
                declare -i res
                n1=$1
                n2=$2
                
                echo -e "Opérations \n"
                echo "+ addittion"
                echo "- soustraction"
                echo "* multiplication"
                echo "/ division entière"
                echo "% modulo - calculer le reste"
                echo -e "\nEntrez l'opération à effectuer sur $1 et $2\n"
                
                read op
                
                case $op in
                '+')
                   res=$1+$2
                   echo $1 + $2 = $res
                   ;;
                '-')
                   res=$1-$2
                   echo $1 - $2 = $res
                   ;;
                '*')
                   res=$1'*'$2
                   echo $1 '*' $2 = $res
                   ;;
                '/')
                   if  [ "$2" = "0" ] 
                   then
                      echo "Division avec zéro"
                      exit
                   else
                      res=$1/$2 
                      echo $1 / $2 = $res
                   fi
                   ;;
                '%')
                   if  [ "$2" = "0" ] 
                   then
                      echo "Division avec zéro"
                      exit
                   else
                      res=$1%$2
                      echo $1 % $2 = $res
                   fi
                   ;;
                *)
                   echo "Opération inconnue"
                   ;;
                esac
                1
                1. Modérateur
                  et avec let
                  #!/bin/sh
                  
                  n1=$1
                  n2=$2
                  
                  echo -e "Opérations \n"
                  echo "+ addittion"
                  echo "- soustraction"
                  echo "* multiplication"
                  echo "/ division entière"
                  echo "% modulo - calculer le reste"
                  echo -e "\nEntrez l'opération à effectuer sur $1 et $2\n"
                  
                  read op
                  
                  case $op in
                  '+')
                     let res=$1+$2
                     echo $1 + $2 = $res
                     ;;
                  '-')
                     let res=$1-$2
                     echo $1 - $2 = $res
                     ;;
                  '*')
                     let res=$1'*'$2
                     echo $1 '*' $2 = $res
                     ;;
                  '/')
                     if  [ "$2" = "0" ] 
                     then
                        echo "Division avec zéro"
                        exit
                     else
                        let res=$1/$2 
                        echo $1 / $2 = $res
                     fi
                     ;;
                  '%')
                     if  [ "$2" = "0" ] 
                     then
                        echo "Division avec zéro"
                        exit
                     else
                        let res=$1%$2
                        echo $1 % $2 = $res
                     fi
                     ;;
                  *)
                     echo "Opération inconnue"
                     ;;
                  esac
                  
                  1
                  1. Modérateur
                    et avec $((....))?? Tu ne lit pas mes messages.

                    et

                    Pour $[..] dit à ton prof que c'est la forme ancienne de $((..)) donc ça ne vaut pas la peine de gaspiller des neurones et de l'encre avec ça :-))

                    echo "$1 / $2 = $(echo "scale=2;$1/$2" | bc)" je fais la division en réel

                    tu peux remplacer avec

                    echo "$1 / $2 = $(($1/$2))"
                    1
                    1. Salut,

                      ah mais certainement,tu trouveras certainement des liens...
                      Sous quel os les désires-tu?
                      0
                      1. ben voila, Je ne comprend rien et j'ai des partiels lundi (de plus j'ai ete bcp absente en cours dc je n'ai pas tout ((a cause d'un accident))).
                        donc voici quelques enonce et j'aurais besoin que vous me donniez le shell (SVP)

                        1: a) sous le repertoire courant, afficher la liste de tous les sous repertoires.
                        b) sous le repertoire courant, afficher la liste de tous les sous repertoires de chaque sous repertoire.

                        2: a)sous le repertoire courant, dupliquer les fichier ordinaire osus un repertoire dont le nom est donné en argument. Traiter tous les cas d'erreur.
                        b)Meme chose que a) mais on s'interresse à tous les fichier dont la taille ne depasse pas 50octets.
                        c)meme chose mais fichier executable.

                        3: a)Ecrire une fonction dt voici la specification:
                        nom de fct°: EntierValide
                        parametre: EstEntier
                        effet: l'entier 0 est retourné si le parametre "EstEntier" designe un entier, sinon l'entier 1 est retourné.
                        b)Ecrire une commande shell avec deux arguments. Si les deux arguments designent deux entiers alors il faut calculer et afficher les resultat des cinq operation suivant: +,-,*,/ et le reste de la division. Traiter tous les cas d'arreur.

                        4: Pour cette exercice il faut donnner le texte de commande:

                        nom de la commande: cmd2
                        arguments: aucun
                        effet: La commande doit editer le message suivant: "Mon repertoire courant est: ...."

                        Je vous remerci d'avance de vos reponse, si vous pouvez me donner qq explications à cote se serait super .

                        MERCI
                        0
                        1. pk -e ça sert a koi
                          0
                          1. Modérateur
                            Salut,

                            man echo (extrait) :
                            OPTIONS
                                   -n     Ne pas effectuer le saut de ligne final.
                            
                                   -e     Interpréter les séquences de caractères précédées d'un backslash
                                          '\' suivantes :
                                          \a     alerte (sonnerie)
                                          \b     retour en arrière d'un caractère
                                          \c     supprimer le saut de ligne final
                                          \f     saut de page
                                          \n     saut de ligne
                                          \r     retour chariot
                                          \t     tabulation horizontale
                                          \v     tabulation verticale
                                          \\     backslash
                                          \nnn   le caractère de code ASCII nnn (en octal)
                            
                                   -E     Désactiver les interprétations des séquences spéciales.
                            
                            ;-))

                            PS. Évite le style SMS s'il te plaît, merci ;-)
                            0
                          2. ah ok merci (et desolé pour le style sms!!!)
                            alors tu pourrais m'expliquer les commande
                            expr, declare, let, $((...)) et $[...]

                            a quoi elle servent et comment on les utilise STP
                            Merci
                            0
                          3. @widi70Bonjour,

                            $((...)) sert a l'évaluation d'expression arithmétiques (en gros ça calcule)

                            let a=1+1 est la meme chose que a=$((1+1))

                            apres je connais $0, $1, $2 ,$n pour récupérer le n-ieme arguement
                            $# pour le nombre d'arguments
                            0
                          4. @widi70merci beaucoup et pour expr et decare tu sait?

                            mais par exemple si on me demande donner le texte du programme qui utilise la commande let ou $((...)) je doit ecrire quoi??
                            merci
                            0
                          5. @widi70ok bon ça y est j'ai trouver
                            pour expr c'est
                            $ a=`expr 3 + 4`
                            $ echo $a
                            7

                            et declare c'est:
                            Les fonctions peuvent s'exporter par la commande declare -fx fonction

                            mais maintenant ce que je comprend c'est quand on me demande de :

                            1)ecrire un programme shell nommé "operation". Ce programme utilise deux arguments (on suppose que les deux arguments sont des entiers et le deuxième argument est nul). Le programme doit calculer et afficher la somme, la difference, la division, la multiplication et le reste de la division.

                            a) Donner le texte du programme qui utilise la commande expr.
                            b)Donner le texte du programme qui utilise la commande declare.
                            c)Donner le texte du programme qui utilise la commande let.
                            d)Donner le texte du programme qui utilise la commande $((...)) ou $[...].

                            SVP donner moi juste un exemple et je ferai les autres
                            Je vous en supplie mes partiel sont lundi et il faut que j'assure
                            SVP SVP SVP SVP
                            0
                        2. Modérateur
                          Salut,

                          Accepte les notations avec . ou ,

                          10.23
                          10,23
                          #!/bin/sh
                          
                          echo "Entre un numéro réel : "
                          read var
                          
                          if [ "$(echo $var | grep -Eo '^[0-9]+[.,][0-9]+$')" ]
                          then
                            echo  "$var est un nombre réel"
                          fi

                          0
                          1. Modérateur
                            Re,

                            accepte toujours le . et la ,
                            ainsi que la notation scientifique avec E et e
                            10.23
                            10,23
                            10.23e+24
                            10.23E+24
                            10.23e-24
                            10.23E-24
                            #!/bin/sh
                            
                            echo "Entre un numéro réel : "
                            read var
                            
                            if [ "$(echo $var | grep -Eo '^[+-]?[0-9]+[.,][0-9]+([Ee]([+-]?[0-9]+))?$')" ]
                            then
                              echo  "$var est un nombre réel"
                            fi
                            0
                            1. Modérateur
                              Pour exécuter
                              operation.sh N1 N2
                              N1 et N2 sont des nombres entiers

                              Ou encore
                              #!/bin/sh
                              
                              n1=$1
                              n2=$2
                              
                              echo -e "Opérations \n"
                              echo "+ addittion"
                              echo "- soustraction"
                              echo "* multiplication"
                              echo "/ division"
                              echo "% modulo - calculer le reste"
                              echo -e "\nEntrez l'opération à effectuer sur $1 et $2\n"
                              
                              read op
                              
                              case $op in
                              '+')
                                 echo "$1 + $2 = $(($1 + $2))"
                                 ;;
                              '-')
                                 echo "$1 - $2 = $(($1 - $2))"
                                 ;;
                              '*')
                                 echo "$1 * $2 = $(($1 * $2))"
                                 ;;
                              '/')
                                 if  [ "$2" = "0" ] 
                                 then
                                    echo "Division avec zéro"
                                    exit
                                 else
                                    echo "$1 / $2 = $(echo "scale=2;$1/$2" | bc)"
                                 fi
                                 ;;
                              '%')
                                 if  [ "$2" = "0" ] 
                                 then
                                    echo "Division avec zéro"
                                    exit
                                 else
                                    echo "$1 % $2 = $(($1%$2))"
                                 fi
                                 ;;
                              *)
                                 echo "Opération inconnue"
                                 ;;
                              esac
                              0
                              1. ben a vrai dire je comprend pas trop la elle sont ou les commande ?
                                parce que par exemple pour le a) fallait utiliser la commande expr
                                0
                                1. ah ok merci bcp
                                  et pour toutes les commandes que j'ai citer dans <12> ça marche comme ça???

                                  merci
                                  0
                                  1. ok merci bcp
                                    et avec $((....)) ou $[...] ??
                                    0
                                    1. ok merci bcp de ton aide
                                      bon week end
                                      0
                                      • 1
                                      • 2