Προς το περιεχόμενο

Σύγκριση δεκαδικών bash shell script


toyotaki

Προτεινόμενες αναρτήσεις

Δημοσ.

Μήπως μπορεί να μου πει κάποιος πώς μπορώ να κάνω σύγκριση δεκαδικών σε bash shell script;

Δοκίμασα τον παρακάτω κώδικα όπου so είναι δεκαδικός

>if [ $so -ge 0 ]
then
       echo 'possitive'
fi
if [ $so -eq 0 ]
then
       echo 'neutral'
fi
if [ $so -le 0 ]
then
      echo 'negative'
fi

όμως βγάζει σφάλμα "integer expression expected" και από όσο έψαξα αυτό συμβαίνει επειδή κάνει έλεγχο μόνο σε ακέραιους.

 

Δοκίμασα και αυτό τον κώδικα, όπου so δεκαδικός

>if [ $so \> 0 ]
then
       echo 'possitive'
fi
if [ $so == 0 ]
then
       echo 'neutral'
fi
if [ $so \< 0 ]
then
       echo 'negative'
fi

όμως πάντα εκτυπώνει "negative" παρόλο που μπορεί να είναι θετική η τιμή της so.

πχ για την τιμή .16678168965481141131 εμφανίζει negative

και αν βάλω σε σχόλιο την if που ελέγχει για τους αρνητικούς τότε δεν εμφανίζει τπτ.

 

Ευχαριστώ πολύ

Δημοσ.

 

Δοκίμασα και αυτό τον κώδικα, όπου so δεκαδικός

>if [ $so \> 0 ]
then
       echo 'possitive'
fi
if [ $so == 0 ]
then
       echo 'neutral'
fi
if [ $so \< 0 ]
then
       echo 'negative'
fi

όμως πάντα εκτυπώνει "negative" παρόλο που μπορεί να είναι θετική η τιμή της so.

πχ για την τιμή .16678168965481141131 εμφανίζει negative

και αν βάλω σε σχόλιο την if που ελέγχει για τους αρνητικούς τότε δεν εμφανίζει τπτ.

 

Ευχαριστώ πολύ

 

Tα -, + και . έχουν μικρότερο ascii number απο τους αριθμούς . Το - θα σου παίξει σωστά , αλλά αν ξεκινάς με + ή . δεν θα σου δίνουν το επιθυμητό αποτέλεσμα

Δημοσ.

Tα -, + και . έχουν μικρότερο ascii number απο τους αριθμούς . Το - θα σου παίξει σωστά , αλλά αν ξεκινάς με + ή . δεν θα σου δίνουν το επιθυμητό αποτέλεσμα

Έχεις κάποια λύση να προτείνεις σε αυτό;

 

Δοκίμασα την πρόταση από At0m0 να βάλω 0 πριν το δεκαδικό με την εντολή

>sο=${so//./0.}

αλλά υπάρχουν και φορές όπου ο αριθμός μου έχει ακέραιο μέρος διάφορο του 0 και αυτό αλλάζει το αποτέλεσμα.

Υπάρχει κάτι άλλο που μπορώ να κάνω;

Δημοσ.

Χρειάζεται να χρησιμοποιήσεις το bc. Τσέκαρε μία αυτό . Γενικότερα δώσε στην κονσόλα

 

echo "0.3 > 0.4" | bc

 

και προσάρμοσε το script σου με αυτή την μέθοδο για τα comparison

 

Αν δεν έχεις το bc εγκατέστησε το απο το repository

 

Τέλος έφτιαξα κάτι που μπορείς να το δοκιμάσεις

 

 

>if [ $(echo "$so > 0"| bc) -eq  1 ]
then
   	echo 'possitive'
fi
if [ $(echo "$so == 0"| bc) -eq  1 ]
then
   	echo 'neutral'
fi
if [ $(echo "$so < 0"| bc) -eq  1 ]
then
   	echo 'negative'
fi

Δημοσ.

Είχα δει το σχόλιο πριν κάνεις edit τον κώδικα.

Το έκανα να δουλέψει με αυτό τον κώδικα:

>if [ `echo "$so > 0" | bc` == 1 ]
then
       echo 'possitive'
fi
if  [ `echo "$so == 0" | bc` == 1 ]
then
       echo 'neutral'
fi
if  [ `echo "$so < 0" | bc` == 1 ]
then
       echo 'negative'
fi

 

μικρές οι διαφορές μας.

Ευχαριστώ πολύ για την καθοδήγηση.

Δημοσ.

Μιας και δεν έχω καμία ιδέα απο bash scripts, αυτό που πρέπει να κάνεις είναι να ελέγχεις τον πρώτο απο αριστερά χαρακτήρα.

Αν είναι "." προσθέτεις το "0" άν ΄'οχι προχωράς ώς έχει.

Και μιας και αναφέρθηκαν περιπτώσεις με αριθμούς με πρόσημα, άν υπάρχει περίπτωση να σου έρθει ο αριθμός +.95 πάλι πρέπει να κάνεις έλεγχο, αφού αφαιρέσεις το "+"

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...