J'apprends les scripts Shell pour un diplôme en informatique que je fais actuellement. J'essaie d'écrire un petit script qui ajoute deux nombres comme indiqué dans l'un 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, lorsque je lui donne l'autorisation d'exécution et que j'exécute le script, cela me donne cette erreur.
sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory
J'ai essayé de l'exécuter sur Ubuntu et Fedora mais la même erreur se produit. Quelqu'un peut-il me dire ce qui me manque ici?
shell-script
Isuru
la source
la source
Réponses:
Vous devez d'abord vous débarrasser des espaces pour la mission, par exemple
alors vous devez changer
'
pour un`
ou encore mieux pour$()
:au lieu d'utiliser,
expr
vous pouvez également faire le calcul directement dans votre shell:la source
expr
au lieu de$((...))
est un désir d'être portable sur le shell Bourne classique, alors c'est une bonne idée à éviter$(...)
également.$()
? Pour autant que je sache, il est requis par posix, par exemple tous les shells compatibles posix devraient prendre en charge$()
$(…)
, mais il est sur le point de disparaître (peut-être que quelqu'un quelque part tourne toujours/bin/sh
sur Solaris).$(…)
–– ou du moins, pas toutes les versions.Vous avez probablement mal lu les backticks sous forme de guillemets simples dans la ligne:
Voir le wiki de Greg sur l'utilisation à la
$(...)
place.Cela fonctionne comme prévu:
Notez également qu'il n'y a pas d'espace autour du signe égal (l'affectation des variables).
la source
expr
est un programme externe utilisé par Bourne shell (ie sh). Le shell Bourne n'avait à l'origine aucun mécanisme pour effectuer une arithmétique simple. Il utiliseexpr
un programme externe à l'aide de backtick.Le backtick ( ` ) est en fait appelé 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 à la place des commandes.
En bash (bourne encore shell) il a le systax suivant, il n'utilisera pas de programme extrnal
expr
.si nous voulons utiliser le programme externe
expr
. nous avons le systax suivant:la source
Si vous utilisez bash, vous pouvez simplement faire quelque chose comme ceci:
la source
la source
la source
Vous pouvez utiliser un seul backtick (la `clé)
la source
$( ... )
place dans les coquilles. De plus, le problème est que OP utilise des espaces là où ils ne devraient pas.la source
la source