Terminal Friday: Bash [Επέκταση κλειδιού]

Πρώτα απ 'όλα θα ήθελα να ζητήσω συγνώμη, καθώς την περασμένη Παρασκευή δεν μπόρεσα να γράψω την ανάρτηση, οπότε σήμερα θα προσθέσω ένα επιπλέον για να καλύψω τη χαμένη μέρα. 🙂

Επέκταση στήριξης

Στα ισπανικά, η επέκταση των κλειδιών μου φαίνεται να είναι μια λειτουργία εμπνευσμένη από C Κέλυφος, αυτό δημιουργεί συνδυασμούς μεταξύ των χαρακτήρων που έχουν εισαχθεί μέσα στα άγκιστρα, η σειρά που χρησιμοποιεί είναι από αριστερά προς τα δεξιά. Δεν είναι καθόλου περίπλοκο, αλλά είναι μια επιλογή που θα είναι πολύ χρήσιμη στις περιηγήσεις μας στο GNU / Linux.

Παράδειγμα:

$ echo a {1,2,3} a1 a2 a3

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

$ echo {a, b, c} abc

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

$ mkdir ~ / Jobs / {ένα, δύο, τρία, τέσσερα, πέντε}

Αυτό δημιουργεί πέντε φακέλους στον φάκελο εργασίας, είναι σαν να εισάγετε μία εντολή τη φορά. Δημιουργία των 5 καταλόγων.

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

$ echo {1..5} #Correct 1 2 3 4 5 $ echo {a..f} #Correct abcdf $ echo {a..5} #Incorrect {a..5} # Νομίζω ότι δεν θα πάρω ποτέ χρησιμοποιείται σε αυτό το μπλε χρώμα με γράμμα

Μπορούμε να εξοικονομήσουμε χρόνο δημιουργώντας έναν κύκλο for

# Αντί να γράφετε $ για ((i = 1; i <= 5; i ++)); Κάντε echo "Ο αριθμός μου $ i"; ολοκληρώθηκε Ο αριθμός μου 1 Ο αριθμός μου 2 Ο αριθμός μου 3 Ο αριθμός μου 4 Ο αριθμός μου 5 # Αποθηκεύστε τον κωδικό χρησιμοποιώντας επέκταση στήριξης. $ για i σε {1..5}; do echo "Ο αριθμός μου $ i; ολοκληρώθηκε Ο αριθμός μου 1 Ο αριθμός μου 2 Ο αριθμός μου 3 Ο αριθμός μου 4 Ο αριθμός μου 5 # Φυσικά ισχύει για χρήση, αν και η έξοδος είναι διαφορετική. $ echo" Ο αριθμός μου "{1..5} Ο αριθμός μου 1 Ο αριθμός μου 2 Ο αριθμός μου 3 Ο αριθμός μου 4 Ο αριθμός μου 5

Νομίζω ότι η ιδέα είναι ξεκάθαρη, χαχα τώρα θα σχολιάσω μόνο ότι είναι συνδυασμένη και ένθετη. Τι εννοώ με αυτό;
Με δυνατότητα συνδυασμού που μπορούμε να ενώσουμε ένα ή περισσότερα κλειδιά

$ echo {a..c} {1..3} a1 a2 a3 b1 b2 b3 c1 c2 c3

Με την ένθεση, όπως θα μπορούσαν να φανταστούν πολλοί, μπορείτε να χρησιμοποιήσετε πλήκτρα επέκτασης εντός των κλειδιών επέκτασης

$ echo {a, c {1..3}, d} a c1 c2 c3 d

Και τέλος από Bash Nothing είναι δυνατή η αύξηση των τιμών.

$ echo {0..20..2} 0 2 4 6 8 10 12 14 16 18 20

Αυτό είναι όλο για σήμερα, οπότε ευχαριστώ που με διαβάσατε άνθρωποι 🙂

Εξτρα

Πώς να δημιουργήσετε έναν τοπικό κάδο

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

Η επίτευξη αυτού είναι σχετικά εύκολη, το πρώτο πράγμα που πρέπει να γίνει είναι να δημιουργήσετε έναν κατάλογο όπου θα αποθηκεύσουμε τα σενάρια.

mkdir ~ / .bin # Σε αυτό το παράδειγμα θα είναι κρυφό

Τώρα έχουμε τον φάκελό μας για να αποθηκεύσουμε τα σενάρια, αλλά δεν θα λειτουργήσει μέχρι να προσθέσουμε τη διαδρομή του νέου .bin στο $ PATH
Γι 'αυτό το αρχείο επεξεργάζεται bash_profile, και προστίθεται η γραμμή.

εξαγωγή PATH = $ PATH: ~ / .bin

Και το voila που είναι αρκετό για να δημιουργήσει έναν τοπικό κάδο, φυσικά θα ζητήσει δικαιώματα root εάν είναι απαραίτητο για ένα παράδειγμα που γράφουμε ένα γρήγορο σενάριο.

#! / bin / bash echo "Γεια $ 1, πώς είσαι;"

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

$ hello wada # Αυτό θα δείξει το μήνυμα Γεια σας, πώς είσαι;

Έτσι με αυτό το γρήγορο τέχνασμα μπορείτε να εκτελέσετε τα σενάρια σας πιο γρήγορα

Αυτό είναι όλο για τους ανθρώπους που είναι καλά 🙂
PS Συγγνώμη για λάθη αν υπάρχουν, τα μάτια μου κλείνουν ήδη χαχαχα 😀


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

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

*

*

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

  1.   κυνηγός dijo

    Είμαι στο ζήτημα του bash εδώ και πολύ καιρό και δεν κατάλαβα τις επεκτάσεις τιμονιού, ευχαριστώ.

    Στο κόλπο της διαδρομής, η Fedora από προεπιλογή κάνει κάτι τέτοιο, αλλά στο "~ / .local / bin", δείτε ένα απόσπασμα του bash_profile που έφερα στην Jessie.

    PATH = $ PATH: $ HOME / .local / bin: $ HOME / bin
    εξαγωγή PATH

    1.    Ρικάρντο dijo

      Έχω κάποιες ανησυχίες:
      1. Πώς μπορώ να του δώσω δύο διαστήματα με επέκταση κατά πόντους; ηλικίες {1..24,55..90} και ότι επεκτείνω τις ηλικίες από 1 έως 24 και συνεχίζω με 55 έως XNUMX. όπως το έκανα δεν λειτούργησε. Γιατί;

      2. Εάν θέλω η πρώτη τιμή να είναι μηδενική και να συνεχίσω με την αρίθμηση:
      βάζω: http://manga.favorito /εικόνα http://manga.favorito/imagen1
      Δοκίμασα τον ακόλουθο τρόπο, αλλά το wget δεν κατάφερε: http://manga.favorito/imagen{, 1..42} Σύμφωνα με εμένα, θα έπρεπε να αφήσω το όνομα χωρίς αριθμό και να συνεχίσω με την αρίθμηση από το 1 έως το 42, αλλά δεν ήταν έτσι. Γιατί;

    2.    Wada dijo

      Έχετε δίκιο κάποια διανομές έχουν ή είχαν .bin, αλλά είναι έτσι ώστε όλοι να μπορούν να καταλάβουν και να δουν ότι είναι δυνατό να το κάνετε σε οποιαδήποτε διανομή: D, Ευχαριστώ που σταματήσατε.

  2.   διαδήλωση dijo

    Πολύ καλό πολύ καλό για αυτές τις συνεισφορές της γνώσης στον κόσμο του linux και την ασφάλειά του, κάποια Παρασκευή ελπίζω ότι θα μπορούσα να διαβάσω πώς να μορφοποιήσω ένα pendrive σε ένα τερματικό και να γράψω ένα DVD / CD iso εικόνας οποιουδήποτε δωρεάν συστήματος σε ένα τερματικό.

    1.    Wada dijo

      Ευχαριστώ για τα λόγια σου αδερφέ 😀 Υπόσχομαι ότι την επόμενη Παρασκευή θα κάνω αυτό το post. Και πρέπει να κάνω ένα για να προσαρμόσω τον Vim χαχαχα, αλλά δεν ήθελα να πιστεύουν ότι θα κάλυπτε μόνο τον Vim.

  3.   edoardo_ή dijo

    Εξαιρετικό άρθρο τερματικού, το καλύτερο που έχω διαβάσει εδώ και πολύ καιρό, μετρώντας πολλά ιστολόγια που δημοσιεύουν μαθήματα αυτού του στυλ. Ευχαριστώ πολύ!!

    1.    Wada dijo

      Ευχαριστώ πολύ will Θα προσπαθήσω να συνεχίσω.

  4.   juanli dijo

    Εξαιρετική συμβουλή του τοπικού κάδου!
    Χαιρετισμούς!

    1.    Wada dijo

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

  5.   Γκίσκαρντ dijo

    Πολύ καλά! Δεν υπάρχει ιδέα για αυτό. Ευχαριστώ 🙂

    1.    Wada dijo

      Είστε ευπρόσδεκτοι αδερφέ σας ευχαριστώ που αφιερώσατε χρόνο για να το διαβάσετε 😀

  6.   Ρικάρντο dijo

    Έχω κάποιες ανησυχίες:
    1. Πώς μπορώ να του δώσω δύο διαστήματα με επέκταση κατά πόντους; ηλικίες {1..24,55..90} και ότι επεκτείνω τις ηλικίες από 1 έως 24 και συνεχίζω με 55 έως XNUMX. όπως το έκανα δεν λειτούργησε. Γιατί;

    2. Εάν θέλω η πρώτη τιμή να είναι μηδενική και να συνεχίσω με την αρίθμηση:
    βάζω: http://manga.favorito/imagen http://manga.favorito/imagen1

    Δοκίμασα τον ακόλουθο τρόπο, αλλά το wget δεν κατάφερε: http://manga.favorito/imagen{, 1..42} Σύμφωνα με εμένα, θα έπρεπε να αφήσω το όνομα χωρίς αριθμό και να συνεχίσω με την αρίθμηση από το 1 έως το 42, αλλά δεν ήταν έτσι. Γιατί;
    * Συγγνώμη, αλλά έβαλα την πρώτη ανάρτηση ως απάντηση και ήταν λάθος σε ορισμένα σημεία

    1.    Wada dijo

      1.- Η λογική σας είναι λανθασμένη, πρέπει να το φωλιάσετε, χαχαχα δοκιμάστε $ echo {{1..24},{55..90}}

      2.- Όπως και το προηγούμενο ... $ echo "URL"{,{1..42}}

      Μην ανησυχείς, αδερφέ, είμαστε εδώ για να βοηθήσουμε ο ένας τον άλλον 🙂

  7.   jvk85321 dijo

    Για να αντικαταστήσετε το for με ηχώ θα μοιάζει με αυτό

    echo "Ο αριθμός μου" {1..5} $ '\ n' | sed -e: a -e '$! N; s / \ n / \ n /; ta' | sed -e: a -e '$! N; s / 5 \ n / 5 /; ta'

    αλλά προτιμώ το printf

    printf "I, I% d \ n" {1..5}

    και χρησιμοποιήστε την ίδια ιδέα της επέκτασης των κλειδιών

    atte
    jvk85321

    1.    jvk85321 dijo

      Πώς τοποθετείτε τα κουτιά τερματικού ;;;;

      atte
      jvk85321

  8.   jvk85321 dijo

    Έλεγχος εάν η ετικέτα κώδικα λειτουργεί
    hehe

    Για να αντικαταστήσετε το for με ηχώ θα μοιάζει με αυτό

    echo “Mi numero “{1..5}$’\n’ | sed -e :a -e ‘$!N;s/\n /\n/;ta’ | sed -e :a -e ‘$!N;s/5\n/5/;ta’

    pero prefiero printf

    printf “Mi numero %d\n” {1..5}

    και χρησιμοποιήστε την ίδια ιδέα της επέκτασης των κλειδιών

    atte
    jvk85321

    1.    jvk85321 dijo

      Έχω μείνει με κάποια σφάλματα, αλλά λειτούργησε

      Είμαι ζωντανός maluco

      Συγγνώμη για την ενόχληση

      atte
      jvk85321

      1.    Wada dijo

        Χαχαχα απάντησες στον εαυτό σου, αλλά αν είναι ανάμεσα σε ετικέτες χωρίς κενά ...

        Και για την αντικατάσταση του δεν είναι απαραίτητο να κάνουμε τόσα πολλά σωστά χαχαχαχαχα με:
        echo -e "Mi numero "{1..5}"\n\b"

        Για να είμαι ειλικρινής το printf είναι ο καλύτερος τρόπος εκτύπωσης κειμένου σε σενάρια, είναι πιο φορητός αλλά παραδοσιακά χρησιμοποιεί την ηχώ.

      2.    Wada dijo

        Παίρνω τους χώρους! ΧΑ χα χα χα χα

        ας δούμε τώρα 😀

      3.    Wada dijo

        Γαμώτο είναι "λιγότερο από" κώδικα "μεγαλύτερο από" "λιγότερο από" / κωδικό "μεγαλύτερο από" χαχαχαχα

      4.    jvk85321 dijo

        Το πρόβλημα ότι το echo -e δεν είναι τυπικό, επομένως δεν λειτουργεί σε όλα τα συστήματα.

        Επίσης βγαίνει ακατάστατο
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5

        jvk@jvktos:~$
        Και με αυτό
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Νομίζω ότι το δεύτερο παρουσιάζει καλύτερα το αποτέλεσμα, χαχα

        atte
        jvk85321

      5.    jvk85321 dijo

        Αυτές οι ετικέτες είναι bummer, hehehe, ας δούμε αν λειτουργούν τώρα
        jvk@jvktos:~$ echo -e "Mi numero "{1..5}"\n\b"
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Και με αυτό
        jvk@jvktos:~$ echo "Mi numero "{1..5}$'\n' | sed -e :a -e '$!N;s/\n /\n/;ta' | sed -e :a -e '$!N;s/5\n/5/;ta'
        Mi numero 1
        Mi numero 2
        Mi numero 3
        Mi numero 4
        Mi numero 5
        jvk@jvktos:~$

        Νομίζω ότι το δεύτερο παρουσιάζει καλύτερα το αποτέλεσμα, χαχα
        atte
        jvk85321

      6.    jvk85321 dijo

        Τέλος πάντων, αφήστε τα κενά μεταξύ των γραμμών, γι 'αυτό μισώ html, χαχαχαχα

  9.   Joaquin dijo

    Εξοχος! Χτυπάω τα πόδια σου χαχα

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

    1.    Wada dijo

      Ευχαριστώ για τον περασμένο αδελφό, χαίρομαι που ήταν χρήσιμο

      1.    Joaquin dijo

        Είστε ευπρόσδεκτοι, γι 'αυτό είμαστε εδώ, για να μοιραστείτε και να συνεισφέρετε ιδέες. Δεν ξέρω πώς να προγραμματίσω, απλά έκανα μερικά πράγματα στο Bash και δημοσίευσα σε δύο δημοσιεύσεις κάποια σενάρια που έκανα. Νομίζω ότι γνωρίζοντας αυτό μπορεί να γίνει πιο κατανοητός ο κώδικας.