2017-01-23 4 views
0

Dieses Skript sollte dem Programm Werte über die Befehlszeile geben und die Ausgabe des Terminals in den entsprechenden Dateien speichern. Da ich eine Dezimalpunktnummer nicht als Teil der Bezeichnung der Datei angeben kann, beabsichtige ich, jedes Kappa mit 10000 zu multiplizieren, um sie in Ganzzahlen umzuwandeln und sie als Beschriftungen zu verwenden, aber ich habe es im Code falsch gemacht und tue es nicht weiß, wie man es richtig macht. Wie funktioniert es? Vielen Dank!Kennzeichnung von Textdateien in der Bash-Schleife

#!/bin/bash 

for kappa in $(seq 0.0001 0.000495 0.01); 
    do 
     kappa_10000 = $kappa * 10000; 

     for seed in {1..50}; 
     do 
       ./two_defects $seed $kappa > "equilibration_step_seed${seed}_kappa${kappa_10000}.txt"; 
     done 
    done 
+0

Das erste, was herausspringt, ist Zeile 5, 'kappa_10000 = $ kappa * 10000'. Platziere in Bash keine Leerzeichen um das Gleichheitszeichen. Außerdem rufst du den Mathe-Teil falsch an. 'kappa_10000 = $ ((kappa * 10000))' – Guest

+0

Ein interessantes und umfangreiches Cross-Site-Duplikat [hier] (http://unix.stackexchange.com/questions/40786/how-to-do-integer-float-calculations) -in-Bash-oder-andere-Sprachen-Frameworks). – Aserre

+0

Es ist sehr wichtig, was du über Räume um das Gleichheitszeichen gesagt hast! Das habe ich auch beim Spielen am Terminal bemerkt! Aber Sie können keine Gleitkommaarithmetik in bash ausführen. Danke Gast –

Antwort

2

Bash führt keine Fließkommaberechnung durch, wie von @Inian angegeben. Ein Programm wie bc muss aufgerufen, und sein Ausgang kann direkt in einer Variablen gespeichert werden, wie folgt:

for kappa in $(seq 0.0001 0.000495 0.01) 
do 
    kappa_10000=$(echo "$kappa*10000/1" | bc) 
    echo kappa_10000 
done 

Die Ausgabe im Endgerät

1 
5 
10 
15 
20 
25 
30 
35 
40 
45 
50 
55 
60 
65 
70 
75 
80 
85 
90 
95 
100 

Der /1 Betrieb zu machen, muss hinzugefügt werden, würde das gib eine ganze Zahl aus.

Verwandte Themen