toyotaki Δημοσ. 30 Απριλίου 2011 Δημοσ. 30 Απριλίου 2011 Μήπως μπορεί να μου πει κάποιος πώς μπορώ να κάνω σύγκριση δεκαδικών σε 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 που ελέγχει για τους αρνητικούς τότε δεν εμφανίζει τπτ. Ευχαριστώ πολύ
At0m0 Δημοσ. 30 Απριλίου 2011 Δημοσ. 30 Απριλίου 2011 Άν βάλεις τον αριθμό 0.16678168965481141131 τί κάνει;
Aztec Δημοσ. 30 Απριλίου 2011 Δημοσ. 30 Απριλίου 2011 Δοκίμασα και αυτό τον κώδικα, όπου 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 απο τους αριθμούς . Το - θα σου παίξει σωστά , αλλά αν ξεκινάς με + ή . δεν θα σου δίνουν το επιθυμητό αποτέλεσμα
toyotaki Δημοσ. 30 Απριλίου 2011 Μέλος Δημοσ. 30 Απριλίου 2011 Tα -, + και . έχουν μικρότερο ascii number απο τους αριθμούς . Το - θα σου παίξει σωστά , αλλά αν ξεκινάς με + ή . δεν θα σου δίνουν το επιθυμητό αποτέλεσμα Έχεις κάποια λύση να προτείνεις σε αυτό; Δοκίμασα την πρόταση από At0m0 να βάλω 0 πριν το δεκαδικό με την εντολή >sο=${so//./0.} αλλά υπάρχουν και φορές όπου ο αριθμός μου έχει ακέραιο μέρος διάφορο του 0 και αυτό αλλάζει το αποτέλεσμα. Υπάρχει κάτι άλλο που μπορώ να κάνω;
Aztec Δημοσ. 30 Απριλίου 2011 Δημοσ. 30 Απριλίου 2011 Χρειάζεται να χρησιμοποιήσεις το 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
toyotaki Δημοσ. 30 Απριλίου 2011 Μέλος Δημοσ. 30 Απριλίου 2011 Είχα δει το σχόλιο πριν κάνεις 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 μικρές οι διαφορές μας. Ευχαριστώ πολύ για την καθοδήγηση.
At0m0 Δημοσ. 30 Απριλίου 2011 Δημοσ. 30 Απριλίου 2011 Μιας και δεν έχω καμία ιδέα απο bash scripts, αυτό που πρέπει να κάνεις είναι να ελέγχεις τον πρώτο απο αριστερά χαρακτήρα. Αν είναι "." προσθέτεις το "0" άν ΄'οχι προχωράς ώς έχει. Και μιας και αναφέρθηκαν περιπτώσεις με αριθμούς με πρόσημα, άν υπάρχει περίπτωση να σου έρθει ο αριθμός +.95 πάλι πρέπει να κάνεις έλεγχο, αφού αφαιρέσεις το "+"
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.