(standard_in) 1: erreur de syntaxe dans le script bash
Je suis en train de générer de la quasi nombres aléatoires pour alimenter une simulation de monte carlo. Je suis en utilisant bash. Il me semble avoir frappé une erreur de syntaxe que j'ai rétréci vers le bas pour être dans ce morceau de code.
randno4=($RANDOM % 100001)
upper_limit4=$(echo "scale=10; 1*75.3689"|bc)
lower_limit4=$(echo "scale=10; 1*75.1689"|bc)
range4=$(echo "scale=10; $upper_limit4-$lower_limit4"|bc)
t_twall=`echo "scale=10; ${lower_limit4}+${range4}*${randno3}/100001" |bc`
echo "$t_twall"
Personne ne sait pourquoi je le ci-dessous de sortie et non une valeur entre 75.3689 et 75.1689 que c'est ce que je voudrais être attend-il?
(standard_in) 1: syntax error
randno4=($RANDOM % 100001)
n'est pas de l'arithmétique de l'évaluation. Qui permettra de créer unrandno4='([0]="25649" [1]="%" [2]="100001")'
tableau. Peut-être que vous avez voulu direrandno4='$(($RANDOM % 100001))'
?- J'ai plusieurs lignes identique à la première ligne en dehors du nom de la variable. Ils semblent être très bien.
- Vous pouvez également utiliser
$randno3
dans let_twall
cession de ligne qui n'est pas défini. - Cette première ligne est fine. Il n'a tout simplement pas faire ce que vous pensez que cela fonctionne. Exécutez cette ligne, puis exécutez
declare -p randno4
. Ensuite, essayezecho "$randno4"
vsecho "${randno4[1]}"
. - Je crois que l'erreur est ici de
bc
en raison de larandno3
faute de frappe. - OK, donc est le point zéro dans le tableau un nombre aléatoire et si oui, est-il entre 0 et 100001? Dans mes sorties, je n'ai pas remarqué de problèmes bien que je suis nouveau à cela et écrire. Je n'ai pas le même numéro que vous pour le zéro de l'élément-je obtenir [0]="22737"
- Le premier élément est l'expansion de
$RANDOM
de sorte qu'il sera... wait for it... aléatoire. Le point est que vous êtes pas appliquer un modulo pour que la valeur de la façon dont vous vous attendiez. Vous créez un tableau avec 3 éléments. La première (indice0
) est une surabondance de nombre aléatoire. La deuxième est%
. Le troisième est100001
. Pour une variable de tableauarr
à l'aide de$arr
est équivalent à${arr[0]}
. Ainsi, lorsque vous utilisez$randno4
vous accédez à${randno4[0]}
qui est la surabondance de nombre aléatoire. - Je ne veux pas tromper vous, mais serait très très très utile pour moi de savoir si oui ou non l'élément zéro est un nombre aléatoire entre 0 et 100001 ou pas. Est-ce le cas? C'est une autre limite par exemple, l'int de limiter ou de la double précision limite? Oublier le reste de la matrice. Je ne veux pas déranger un collègue à propos d'un article universitaire qu'ils ont déjà publié si c'est le cas. Si elle n'est pas alors que je devrais au moins savoir si ils ont trouvé et corrigé le problème.
- La page de manuel de bash explique la gamme de
RANDOM
. Il est décrit comme "un entier aléatoire compris entre 0 et 32767". - Merci à vous qui a été extrêmement utile. Page de manuel de Bash est qu'un site web? Googler il vous donne beaucoup de hits?
- C'était dans un livre? Êtes-vous en mesure de partager ce papier, c'était?
- C'est un papier dans la soumission que je pense est d'utiliser le même code. Je vais voir la personne en question demain. Ne veux pas inutilement la panique n'importe qui, mais doit être vérifié. Je sais que c'est un énorme MATLAB fan et qui auront probablement réécrit ce faire de tous ces trucs en MATLAB (je ne veux pas le faire pour diverses raisons qui sont trop détaillées pour obtenir en maintenant). Ce n'est pas un livre sur l'informatique je m'empresse d'ajouter, nous (comme vous pouvez le dire à partir de mes questions de base) ne sont pas un département d'informatique. Apprécie vraiment votre aide. 🙂
- Le
man
de commande devrait être un peu la première commande Linux vous apprendre. Voici lebash
page de manuel - J'ai donné +1 pour la question (et @Etan), car il m'a aidé à comprendre rapidement où l'étrange message d'erreur venu (ce qui était le résultat de mal écrite regex pour
grep
que les fouilles fois deping
de sortie, conduisant à mal formée d'entrée pourbc
).
Vous devez vous connecter pour publier un commentaire.
La première ligne devrait ressembler à :
(( ))
est bash arithmétique, avec les leaders de la$
, la valeur est substitué :$(( ))
Quand vous avez écrit
vous essayez de nourrir un TABLEAU avec une expression arithmétique avec la mauvaise syntaxe.
Voir http://wiki.bash-hackers.org/syntax/arith_expr
Et enfin, comme Etan Reisner dit, Vous pouvez également utiliser $randno3 dans le t_twall cession de ligne qui n'est pas défini
$randno3
faute de frappe.