Προγραμματισμός σε bash - μέρος 2

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

Το αν υπό όρους

Η λειτουργία του If είναι να εφαρμόσει ένα φίλτρο και να εκτελέσει μια λειτουργία ή εργασία για κάθε τύπο φίλτρου που εφαρμόζεται. Η δομή του έχει ως εξής:

Εάν [συνθήκη]; τότε elif εντολές [συνθήκη]? τότε άλλες εντολές? εντολές fi

Ένα παράδειγμα εμφανίζεται δίπλα στον βρόχο For στην αντίστοιχη ενότητα του.

Κύκλοι

1. Ενώ: θα εκτελέσει όλες τις εντολές που καθορίζονται μεταξύ του do και του, αρκεί να ισχύει η συνθήκη. Εάν θέλουμε να μεταβιβάσουμε τους τελεστές σύγκρισης σε αυτήν, η έκφραση πρέπει να είναι σε παρένθεση.

ενώ το CONDITION / COMMAND κάνει εντολές

Παράδειγμα: Πίνακας πολλαπλασιασμού ενός αριθμού

#! / bin / bash X = 1 echo "Εισαγάγετε έναν αριθμό και πατήστε ENTER" διαβάστε M # Ο βρόχος ελέγχει ότι το X είναι μικρότερο ή ίσο με 10 ενώ [$ X –le 10] do #In R αποθηκεύουμε τον πολλαπλασιασμό του X με MR = $ [X * M] # Αυτός ο πολλαπλασιασμός εκτυπώνεται στην ηχώ της οθόνης "$ M * $ X = $ R" #Με αφήσουμε, αυξάνουμε την τιμή του Χ κατά 1 μονάδα αφήστε το X = $ X + 1 να γίνει

2. Για: αποθηκεύει μια λίστα στοιχείων σε μια μεταβλητή, η οποία θα χρησιμοποιηθεί για την εκτέλεση συγκεκριμένων λειτουργιών σε κάθε κύκλο.

για VARIABLE σε ELEMENTS κάνουμε εντολές

Παράδειγμα: πρόγραμμα που αντιγράφει ένα αρχείο από έναν φάκελο στον άλλο, αντικαθιστώντας ένα παλιό αρχείο.

# / bin / bash # Δημιουργούμε καταλόγους προέλευσης και προορισμού ORIGIN = / home / user / Downloads DESTINATION = / home / user / Documents # Τοποθετούμε τον εαυτό μας στην πηγή cd $ ORIGIN # Από όλα τα αρχεία, θέλουμε μόνο αυτό που είναι # καλέστε FILE για FILE στο * do ARCH-DESTINATION = "$ DESTINATION / $ FILE" # -f μας φιλτράρει κανονικά αρχεία, καθώς οι κατάλογοι δεν είναι τίποτα καλό για εμάς. –Δεν φιλτράρει # αρχεία «νεότερα» από αυτά που βρίσκονται στον φάκελο προορισμού εάν [-f $ FILE] && [$ FILE –nt $ ARCH-DESTINATION]; στη συνέχεια ηχώ "Αντιγραφή $ FILE ..." # αντιγράφουμε το αρχείο με cp cp $ FILE $ ARCH-DESTINATION fi fi #We cd για έξοδο από τον πηγαίο φάκελο cd

Ένα άλλο παράδειγμα: σενάριο όπου ο χρήστης πρέπει να μαντέψει έναν τυχαίο αριθμό που δημιουργείται από τον υπολογιστή.

# / bin / bash # Ένας τυχαίος αριθμός δημιουργείται από 1 έως 10, αποθηκεύεται # σε RANDOM RANDOM = $ [$ RANDOM% 10 + 1] ενώ [1] κάνει echo –n "Enter a number:" read NUM # Συγκρίνετε εάν ο αριθμός που έχει επιλέξει ο χρήστης είναι # ίσος με το RANDOM. Θυμηθείτε να χρησιμοποιήσετε το $ για να αξιολογήσετε τις # τιμές των μεταβλητών και όχι τα ονόματά τους εάν ["$ NUM –eq" $ RANDOM "]; μετά ηχώ "Το πήρατε σωστά!" Το #break επιτρέπει τον τερματισμό του βρόχου ενώ το διάλειμμα # Εάν ο αριθμός είναι μικρότερος από το RANDOM elif ["$ NUM –gt" $ RANDOM "]; μετά ηχώ "Είναι λιγότερο" "Αν όχι, είναι μεγαλύτερο από το RANDOM αλλιώς η ηχώ" ΕΙΝΑΙ μεγαλύτερη "ολοκληρώθηκε

3. Μέχρι: αρκετά παρόμοια στη δομή με το While, εκτός του ότι ο κώδικας εκτελείται πάντα, ενώ η αξιολόγηση της συνθήκης είναι αρνητική, δηλαδή, το πρόγραμμα συνεχίζει να εκτελεί "έως ότου εμφανιστεί η συνθήκη"

μέχρι να γίνει εντολή CONDITION / COMMAND

Παράδειγμα: εκτυπώστε τους αριθμούς 10-20 σε φθίνουσα σειρά

#! / bin / bash CONT = 20 # Όσο ο μετρητής είναι μικρότερος από 10 (-lt, "lower #than") ο κώδικας εκτελείται έως [$ CONT -lt 10]; do echo "COUNTER $ CONT" #A CONT αφαιρείται από μια μονάδα αφήστε CONT- = 1 ολοκληρωθεί

4. Επιλέξτε: αυτός ο τελευταίος κύκλος είναι μια ειδική περίπτωση, δεδομένου ότι χρησιμοποιείται γενικά για γρήγορη δημιουργία μενού. Λειτουργεί παρόμοια με το βρόχο For.

επιλέξτε VARIABLE στη λίστα των εντολών που έχουν γίνει

Παράδειγμα: δώστε στον χρήστη τη δυνατότητα να συνεχίσει ή να τερματίσει το σενάριο.

#! / bin / bash #item είναι μια μεταβλητή που ανταποκρίνεται σε αυτό που επιλέγει ο # χρήστης, Συνέχεια και Τέλος είναι οι # επιλογές που έχει στη διάθεσή του, αν και μπορούν να προστεθούν και άλλες επιλογές τερματίστε το πρόγραμμα, και μετά με διάλειμμα βγαίνουμε από τον κύκλο. αν [$ item = "Finish"]; μετά το σπάσιμο
Ευχαριστώ Juan Carlos Ortiz!

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

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

*

*

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

  1.   Μεσαίο δύσκολο dijo

    Νομίζω κάτι τέτοιο: tar -cf - Κατάλογος | (cd / other / κατάλογος; tar -xvf -)

    Τότε θα μοιάζει με / άλλο / κατάλογο / Κατάλογος
    Με αυτόν τον τρόπο συμπίεσα έναν κατάλογο και τον αποσυμπιέζεις σε άλλο μέρος….

  2.   Miguel Angel dijo

    Γεια σας, καλό μάθημα, μαθαίνω για το θέμα και όλα είναι καλά, μόνο που δεν μπόρεσα να κάνω ένα πρόγραμμα που με βοηθά, δείτε αν μπορείτε να με βοηθήσετε παρακαλώ.

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

    Μέχρι στιγμής έχω τα εξής:

    ενώ διαβάζετε τη γραμμή
    do
    echo -e "γραμμή $"
    εύρεση / home / myuser / dof "$ line" -exec readlink -f {};
    ολοκληρώθηκε <testlist.txt Μέχρι στιγμής έχω διαβάσει το αρχείο, κάθε γραμμή που έχει, αλλά δεν μπορώ να το αναζητήσω και να εξαγάγω τις πληροφορίες, αν μπορείτε να με βοηθήσετε, ευχαριστώ. Στην υγειά σας

  3.   Pamela galaviz dijo

    Ευχαριστώ πολύ για τη συμβολή 🙂

  4.   Μάριο Χαβιέ dijo

    γεια ... Ελπίζω να βοηθήσετε στην επόμενη πρακτική ... Αποσυμπιέστε το αρχείο σε tgz στον καθορισμένο κατάλογο, εκτός από τον καθορισμό χρήστη και ομάδας για όλους τους υπάρχοντες καταλόγους και αρχεία και εκχωρήστε δικαιώματα σε αρχεία και καταλόγους
    σημείωση: αρχεία έτοιμα για ανάγνωση και γραφή
    άδεια εκτέλεσης καταλόγων

  5.   Juank dijo

    Το ARCH-DESTINATION είναι μια μεταβλητή στην οποία θέλουμε να αποθηκεύσουμε τη διαδρομή του αρχείου προορισμού, εκτός από την απόλυση. Στη συνέχεια, σε αυτήν τη μεταβλητή υποδεικνύουμε τη μεταβλητή DESTINATION, η οποία περιέχει παραπάνω τη διαδρομή προς το φάκελο Documents και προσθέτουμε τη "μεταβλητή" FILE, η οποία περιέχει το όνομα του αρχείου. Εάν το αρχείο ήταν, για παράδειγμα, list.doc, η μεταβλητή ARCH-DESTINATION θα είναι ίση με το /home/Usuario/Documentos/listado.doc

  6.   Ας χρησιμοποιήσουμε το Linux dijo

    Είναι το προηγούμενο άρθρο. Μπορείτε να έχετε πρόσβαση στο http://usemoslinux.blogspot.com

    Αγκαλιάζω! Παύλος.

  7.   Ειλικρινής dijo

    Καλημέρα φίλε σας ευχαριστώ, το ιστολόγιό σας είναι πολύ καλό, αλλά δεν μπορώ να λάβω το πρώτο μέρος του Προγραμματισμού στο Bash, όπου το παίρνω ευχαριστώ, χαιρετισμούς

  8.   Σάιτο Μόρντραγκ dijo

    Δύο εξαιρετικά μέρη, ειλικρινά συγχαρητήρια.

    Απλά υπέροχο.

  9.   Fredy dijo

    Bien

  10.   Hugo dijo

    Γεια σας, κάνω ένα πρόγραμμα με CASE, τι θέλω να κάνει και δεν ξέρω πώς, για παράδειγμα:

    echo Επιλέγει μια επιλογή:
    ηχώ
    echo 1. επιλογή 1
    echo 2. επιλογή 2
    echo 3. επιλογή 3
    echo 4. επιλογή 4
    echo 5. Έξοδος
    διαβάστε το var
    υπόθεση "$ var" σε
    1)
    echo "Επιλέξατε την επιλογή 1"
    ;;
    2)
    echo "Επιλέξατε την επιλογή 2"
    ;;
    3)
    πέταξε έξω "….."
    ;;
    4)
    πέταξε έξω "…."
    ;;
    5)
    πέταξε έξω "…"

    ;;
    *)
    ηχώ "λάθος επιλογή"
    ;;
    ότι Γ

    εντάξει αυτό που δεν ξέρω πώς να το κάνω είναι ότι όταν επιλέγω την επιλογή 4 που πρόκειται να φύγω, ρωτήστε αν θέλω πραγματικά να φύγω και δώστε μου 2 επιλογές Y & N

    και το άλλο είναι ότι όταν επιλέγετε κάτι διαφορετικό από τους αριθμούς 1..5 μην με ψηφίζετε από το σενάριο….

    Θα μπορούσατε να με βοηθήσετε ευχαριστώ.

  11.   ΔΑΠΑΜΑ 21 dijo

    Γεια, Άρχισα να γράφω script πριν από 1 μήνα και χάρη στις αναρτήσεις σας. Θα έκανα περίπου 15-20. Σας ευχαριστώ πολύ εκ των προτέρων. Αλλά τώρα ο δάσκαλός μας μας έδωσε μια δουλειά της οποίας έχω σταματήσει. Δεδομένου ότι ο δάσκαλος ρωτά:
    περνώντας έναν κατάλογο, αντιγράψτε στο σπίτι σας όλα τα αρχεία που βρίσκονται σε αυτόν τον κατάλογο αλφαβητικά και τα ονομάζοντάς τα file1 file2 κλπ ... κλπ ...
    Τώρα είμαι τη στιγμή εύρεσης ή εντοπισμού, ήθελα να χρησιμοποιήσω το εύρημα, αλλά όταν του έδωσα τον κωδικό σφάλματος καθώς το έβαλα μέσω του dev null, τα δικαιώματα αρνήθηκαν και μετά κάνω λάθος και βάζω το locate που είμαι εδώ:
    εντοπίστε $ 1 | grep "/ $ {1} \ $"
    αλλά φυσικά με αυτό βγαίνουν όλοι ...
    Σας ευχαριστώ πολύ αν το διαβάσετε.
    Εάν μπορείς να με βοηθήσεις θα ήταν μεγάλη χάρη.

  12.   luis dijo

    Θα ήθελα να με βοηθήσεις με αυτό.
    1.-Πληκτρολογήστε έναν ολόκληρο αριθμό στο πληκτρολόγιο και εμφανίστε δύο φορές και τριπλασιάστε αυτόν τον αριθμό στην οθόνη. 2.- Κάντε ένα πρόγραμμα για να αποφασίσετε εάν ένας αριθμός που πληκτρολογείται από το πληκτρολόγιο διαιρείται με 3 ή όχι.
    3.- Δημιουργήστε ένα πρόγραμμα για να βρείτε το άθροισμα: ???????? + ???????? + ???????? + ???????? + ⋯; ???????
    4.- Κάντε ένα πρόγραμμα για να βρείτε το άθροισμα 1 + 3 + 5 + 7 + 9 · · · + (2n + 1).
    5. - Δημιουργήστε ένα πρόγραμμα που εκτυπώνει τη λέξη Linux στην οθόνη 10 φορές
    6. - Δημιουργήστε ένα πρόγραμμα που εκτυπώνει τη λέξη Linux στην οθόνη τον αριθμό των φορών που υποδεικνύει ένας χρήστης.
    7.-Εισαγάγετε ένα ποσό σε ώρες και μετατρέψτε το σε λεπτά και δευτερόλεπτα.
    8.-Υπολογίστε την περιοχή ενός τριγώνου
    9.-Πληκτρολογήστε έναν αριθμό στο πληκτρολόγιο και, στη συνέχεια, αν πληκτρολογήσετε 2 θα πρέπει να είναι τετράγωνο, 3 κύβους, 4 έως το τέταρτο και ούτω καθεξής έως και 6.
    10-Υπολογίστε τη σύνταξη που πρέπει να πληρώσει ένας μαθητής, πρέπει να εισαχθεί ο κωδικός ειδικότητας και οι καθυστερημένες ημέρες:
    ΚΩΔΙΚΑΣ
    ΕΙΔΙΚΟΤΗΤΑ
    ΠΟΣΟ
    ΔΙΑΡΚΕΙΑ ανά ημέρα
    1
    ΧΡΗΣΗ ΥΠΟΛΟΓΙΣΤΗ
    160
    1
    2
    ΘΗΛΑΣΜΟΣ
    150
    1.5
    3
    ΓΡΑΜΜΑΤΕΙΑ
    140
    2
    4
    ΤΟΥΡΙΣΜΟΣ
    180
    2.5
    5
    ΛΟΓΙΣΤΙΚΗ
    160
    1
    Πρέπει να δείξετε την ειδικότητα που μελετάτε, το κόστος της σύνταξης, την προεπιλογή και το συνολικό ποσό που πρέπει να πληρώσετε.

  13.   Charly dijo

    Γεια σας, μπορεί κάποιος να με βοηθήσει;
    Χρειάζομαι «Αίτηση τριών λέξεων με πληκτρολόγιο και εμφάνιση τους με αλφαβητική σειρά από A έως z»
    Σε γλώσσα Bash ή sh για το LINUX porfaborrrr