Expr και calc εντολή: Επίλυση μαθηματικών εκφράσεων στο τερματικό

Είμαι ένας από αυτούς που προγραμματίζουν πάντα σενάρια βίαιο χτύπημα για την επίλυση καθημερινών καταστάσεων (σπάστε τον κωδικό πρόσβασης AP / Router, αυτοματοποιήστε τις διαδικασίες κ.λπ.).

Σε ορισμένες περιπτώσεις έχω δει την ανάγκη να εκχωρήσω την τιμή μιας μαθηματικής έκφρασης σε μια μεταβλητή, ή απλώς να δουλέψω με μαθηματικές εκφράσεις, εκεί βρίσκομαι με το πρόβλημα ότι bash και μαθηματικές εκφράσεις, οι υπολογισμοί δεν είναι πολύ φιλικοί. Συμβαίνει ότι το bash δεν είναι σαν τον πύθωνα, τι μπορούμε να πούμε μεταβλητή = 1 + 5/6 (για παράδειγμα), στο Bash πρέπει να χρησιμοποιήσουμε την εντολή expr o ιχνηλασία

Expr εντολή

Με άλλα λόγια, η εντολή expr μας βοηθά να λύσουμε μαθηματικές εκφράσεις στο τερματικό, με αυτό μπορούμε να υπολογίσουμε τι χρειαζόμαστε. Για παράδειγμα, εάν θέλουμε να εμφανιστεί το αποτέλεσμα 1 + 2 * 8/3, βάζουμε στο τερματικό:

expr 1 + 2 \* 8 / 3

Σημειώστε ότι πριν από τον αστερίσκο * έβαλα την ανάστροφη κάθετο - »\ ... είναι απαραίτητο, γιατί ο expr δεν ερμηνεύει τον αστερίσκο ως σύμβολο πολλαπλασιασμού εκτός εάν το \

Και το αποτέλεσμα θα εμφανιστεί στην οθόνη. Ακολουθεί ένα στιγμιότυπο οθόνης με μερικά παραδείγματα:

screenshot_expr1

Όπως μπορείτε να δείτε στους τελικούς υπολογισμούς (14/4 και 13/4), το 14 διαιρούμενο με το 4 είναι στην πραγματικότητα 3.5 και το 13 διαιρούμενο με το 4 είναι στην πραγματικότητα 3.25, οπότε πώς είναι δυνατόν να μας δείχνει 3 και στις δύο περιπτώσεις; Αυτό που συμβαίνει είναι ότι η εντολή expr δεν μας δείχνει τα δεκαδικά, δηλαδή, αυτό που ακολουθεί μετά το κόμμα, δεν το δείχνει, μας δείχνει μόνο τον ακέραιο.

Σε περίπτωση που θέλουμε να εκχωρήσουμε σε μια μεταβλητή το αποτέλεσμα μιας μαθηματικής έκφρασης (Π.χ .: 10/2), θα ήταν έτσι:

variable=`expr 10 / 2`

Στη συνέχεια το ελέγξουμε με:

echo $variable

Είναι σημαντικό να υπάρχει κενό ανάμεσα σε κάθε χαρακτήρα, δηλαδή ένα διάστημα μεταξύ κάθε αριθμού, κάθε σύμβολο προσθήκης, αφαίρεσης, πολλαπλασιασμού ή διαίρεσης

Υπολογισμός εντολής

Αυτό, σε αντίθεση με το προηγούμενο, είναι ακριβές ως προς τα δεκαδικά, για παράδειγμα:

calc 15 / 4

Θα μας δείξει: 3.75

Ακολουθεί ένα στιγμιότυπο οθόνης με πολλά παραδείγματα:

screenshot_calc

Σε αντίθεση με το expr, όταν χρησιμοποιούμε calc είναι καλύτερο να μην υπάρχει κενό διάστημα μεταξύ κάθε χαρακτήρα, δηλαδή να μην υπάρχουν κενά μεταξύ αριθμών και συμβόλων, όπως βλέπετε στην προηγούμενη εικόνα. Ούτε χρειάζεται να προετοιμάσουν ένα \ πριν από το *

Λοιπόν, αυτό είναι βασικά για το οποίο ήθελα να σας πω.

Ωστόσο, εξακολουθούν να υπάρχουν μερικές άλλες ενδιαφέρουσες συμβουλές για κάθε εντολή (ειδικά calc), σας συνιστούμε να διαβάσετε το εγχειρίδιο:

man calc

man expr

αφορά


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   Έλαβ dijo

    Πολύ χρήσιμο, αν και σίγουρα δεν θα ήταν καλό να χρησιμοποιήσετε το Bash για υπολογισμούς μαθηματικών, τα δεκαδικά ψηφία :)

    1.    Wada dijo

      Κύριε elav έχουμε ακόμα αριθμομηχανή bash - μπορούμε να χρησιμοποιήσουμε το όρισμα -l για να χρησιμοποιήσουμε την τυπική βιβλιοθήκη μαθηματικών
      κάτι τέτοιο

      $ echo "(4/8)+(6/9)" | bc -l
      1.166666666666666666666666

      ha

      1.    Έλαβ dijo

        ????

      2.    eliotime3000 dijo

        Εξοχος. Με αυτόν τον τρόπο, αποφεύγω την ταλαιπωρία της εγκατάστασης του XCalc όταν χρησιμοποιώ καθαρό X11.

      3.    KZKG ^ Γκάρα dijo

        Ω δεν το ήξερα, υπέροχο !!

  2.   clow_eriol dijo

    Ευχαριστώ, είναι αρκετά χρήσιμο 😉

    1.    KZKG ^ Γκάρα dijo

      Ευχαριστώ ^ _ ^

  3.   Νυκτουίντο dijo

    Ευχαριστώ. Ο υπολογιστής συστήματος υπήρξε ανταγωνιστής για βασικές λειτουργίες.

    1.    KZKG ^ Γκάρα dijo

      Σας ευχαριστούμε που μας διαβάσατε 🙂

  4.   Joaquin dijo

    Καλή συμβουλή!

  5.   Πέδρο Λάλα dijo

    Δεν μου γούστο