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
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
- Connexes: unix.stackexchange.com/questions/40786/…
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)