Scripts Bash et en colombie-britannique
Je suis en train d'écrire un script bash et j'ai besoin de faire quelques calcul en virgule flottante. Fondamentalement, je veux faire quelque chose comme ceci:
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
fi
Le problème, je suis en cours d'exécution en est de $? tend à retenir la sortie de l'echo du programme et non de la colombie-britannique appel. Est-il possible que je enregistrer la sortie de la colombie-britannique programme dans une variable?
EDIT:
Merci pour les réponses rapides. Voici une autre façon d'envisager le problème. Dire que j'ai modifié le script un peu de sorte qu'il ressemble à ceci:
#!/bin/bash
NUM=$(echo "scale=25;$1/10" | bc)
if [ $? -ne 0 ]
then
echo bad
exit
fi
echo "$NUM"
Lorsque les entrées de l'utilisateur normal en valeur en virgule flottante, il fonctionne très bien:
bash script.sh 1.0
de sortie:
.1000000000000000000000000
Toutefois, lorsque l'utilisateur entre une valeur incorrecte, le script ne peut pas récupérer:
bash script.sh 1.0a
de sortie:
(standard_in) 1: parse error
Ce que j'essaie de faire est d'obtenir à la sortie gracieusement.
OriginalL'auteur LandonSchropp | 2010-02-25
Vous devez vous connecter pour publier un commentaire.
Je ne vois rien de mal. $NUM est censé tenir votre
bc
résultats de la commandevoir:
sortie
une autre façon est d'utiliser awk
L'autre sens, c'est faire la case "$1" avant de passer à
bc
. par exemplevous n'avez pas à vérifier
$?
debc
plusoui, merci pour la correction.
J'ai précisé mon post ci-dessus. Merci pour l'astuce sur awk. Si je ne peux pas bc de travail, je vais vérifier.
une autre façon est d'assainir votre entrée de 1 $à être un nombre décimal ou un numéro avant de passer à
bc
. voir mon edit.C'est un fendoir vérifier, mais est-il une façon de s'assurer que il n'y a qu'un seul caractère '.' l'heure actuelle? Merci.
OriginalL'auteur ghostdog74
Pour GNU
bc
, une erreur de type "(standard_in) 1: erreur de syntaxe" sera de sortie sur stderr. Vous pouvez capturer dans votre variable et les vérifier.OriginalL'auteur Dennis Williamson
Êtes-vous après le résultat du calcul de la colombie-britannique (où vous stockez dans NUM) ou le statut de retour de l'appel système?
Comme je l'ai dit vous avez le résultat du calcul dans
$NUM
:Test:
OriginalL'auteur stefanB