web-dev-qa-db-fra.com

Comment puis-je diviser avec des variables dans un shell Linux?

Lorsque j'exécute les commandes dans mon shell, comme ci-dessous, une erreur expr: non-integer argument est renvoyée. Quelqu'un pourrait-il me l'expliquer?

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

Ces variables sont des variables Shell. Pour les développer en tant que paramètres d'un autre programme ( c'est-à-dire 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'utiliser des caractères alphabétiques ( c'est-à-dire 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
147
paddy

Je crois que cela a déjà été mentionné dans d'autres discussions:

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 en tant que script séparé et rendez-le disponible dans $ PATH afin de l'avoir toujours dans votre shell local:

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

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
19
user1985657

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

Le shell par défaut sur la plupart des distributions Linux est Bash. Dans Bash, les variables doivent utiliser un préfixe de signe dollar pour expansion du paramètre . Par exemple:

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

Bien sûr, Bash a aussi/ opérateurs arithmétiques et une syntaxe spéciale arithmetic expansion , il n’est donc pas nécessaire d’appeler le binaire 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))
15
Todd A. Jacobs

supposons

x=50
y=5

puis 

z=$((x/y))

cela fonctionnera correctement . Mais si vous voulez utiliser/operator dans des déclarations de cas, cela ne pourra pas le résoudre .  enter code here Dans ce cas, utilisez des chaînes simples comme div ou divide ou quelque chose d'autre ..__ Voir le code 

0
Pooja Rajput