Comment puis-je faire de la division avec des variables dans un shell Linux?

Lorsque je lance des commandes dans mon shell comme ci-dessous, il renvoie une erreur expr: non-integer argument . Quelqu’un pourrait-il me l’expliquer?

 $ x=20 $ y=5 $ expr x / y expr: non-integer argument 

Ces variables sont des variables shell. Pour les développer en tant que parameters vers un autre programme ( ie expr ), vous devez utiliser le préfixe $ :

 expr $x / $y 

La raison pour laquelle il s’est plaint est qu’il pensait que vous essayiez d’opérer sur des caractères alphabétiques ( c. -à- d. Non-entier)

Si vous utilisez le shell Bash, vous pouvez obtenir le même résultat en utilisant la syntaxe d’expression:

 echo $((x / y)) 

Ou:

 z=$((x / y)) echo $z 

Je crois que c’était déjà mentionné dans d’autres fils:

 calc(){ awk "BEGIN { print "$*" }"; } 

alors vous pouvez simplement taper:

 calc 7.5/3.2 2.34375 

Dans votre cas ce sera:

 x=20; y=3; calc $x/$y 

ou si vous préférez, ajoutez ceci comme script séparé et rendez-le disponible dans $ PATH afin de toujours l’avoir dans votre shell local:

 #!/bin/bash calc(){ awk "BEGIN { print $* }"; } 

Pourquoi ne pas utiliser let; Je trouve cela beaucoup plus facile. Voici un exemple que vous pourriez trouver utile:

 start=`date +%s` # ... do something that takes a while ... sleep 71 end=`date +%s` let deltatime=end-start let hours=deltatime/3600 let minutes=(deltatime/60)%60 let seconds=deltatime%60 printf "Time spent: %d:%02d:%02d\n" $hours $minutes $seconds 

Référencement des variables Bash nécessite une extension de paramètre

Le shell par défaut sur la plupart des dissortingbutions Linux est Bash. Dans Bash, les variables doivent utiliser un préfixe de signe dollar pour l’ extension des parameters . Par exemple:

 x=20 y=5 expr $x / $y 

Bien sûr, Bash a aussi des opérateurs arithmétiques et une syntaxe d’expansion arithmétique spéciale, il n’est donc pas nécessaire d’appeler le binary expr en tant que processus séparé. Vous pouvez laisser le shell faire tout le travail comme ceci:

 x=20; y=5 echo $((x / y)) 

Vous pouvez utiliser la substitution de commandes comme suit:

 z="$(expr $x / $y)" echo "$z" 

Assurez-vous que les espaces mentionnés ci-dessus