Japprends le script Shell pour un diplôme en informatique que je suis actuellement en train de faire. Jessaye décrire un petit script qui ajoute deux nombres comme indiqué dans lun des tutoriels qui nous ont été donnés.

echo "Enter two numbers" read num1 num2 sum = "expr $num1 + $num2" echo "The sum is = $sum" 

Cependant, quand je lui donne le lautorisation dexécution et exécutez le script, cela me donne cette erreur.

sum: =. No such file or directory. sum: expr $num1 + $num2: No such file or directory 

entrez la description de limage ici

Jai essayé dexécuter ceci sur Ubuntu et Fedora mais la même erreur se produit. Quelquun peut-il me dire ce qui me manque ici?

Commentaires

Réponse

Vous devez dabord vous débarrasser des espaces pour le devoir, par exemple

sum="expr $num1 + $num2" 

alors vous devez changer " en ` ou mieux encore en $():

sum=$(expr "$num1" + "$num2") 

au lieu dutiliser expr vous pouvez également faire le calcul ulation directement dans votre shell:

sum=$((num1 + num2)) 

Commentaires

  • Si la motivation pour utiliser expr au lieu de $((...)) est un désir dêtre portable sur le shell Bourne classique, alors cest ' une bonne idée pour éviter également $(...).
  • @AlanCurry y a-t-il des shells ne prenant pas en charge $()? Autant que je sache, il est requis par posix, par ex. tous les shells compatibles posix doivent prendre en charge $()
  • @UlrichDangel Le shell Bourne dorigine na ' que $(…), mais il est presque éteint (peut-être que quelquun quelque part exécute encore /bin/sh sur Solaris).
  • Le shell C ne fonctionne pas. t prend en charge $(…) –– ou du moins pas toutes les versions.
  • À quoi sert les guillemets doubles autour des variables?

Réponse

Vous avez probablement mal lu les backticks sous forme de guillemets simples dans la ligne:

sum = "expr $num1 + $num2"

Consultez le Wiki de Greg sur lutilisation de $(...) à la place.

Ceci fonctionne comme prévu:

sum=$(expr "$num1" + "$num2")

Notez également quil ny a pas despace autour du signe égal (laffectation des variables).

Réponse

expr est un programme externe utilisé par Bourne shell (cest-à-dire sh). Le Bourne Shell navait à lorigine aucun mécanisme pour effectuer de larithmétique simple. Il utilise expr programme externe à laide du backtick.

Le backtick ( `) est en fait appelée substitution de commandes. La substitution de commandes est le mécanisme par lequel le shell exécute un ensemble donné de commandes, puis substitue leur sortie dans le place des commandes.

sum=`expr $num1 + $num2` 

In bash (bourne again shell) il a la systax suivante, il nutilisera pas le programme extrnal expr.

sum=$((num1+num2)) 

si nous voulons utiliser le programme externe expr. nous avons la systax suivante:

sum=$(expr $num1 + $num2) 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *