Θεωρία Bash

/ bin / bash

0.ευρετήριο

  1. Πράγματα που λείπουν στους περισσότερους
  2. Δομή ενός σεναρίου
  3. εκτύπωση στην οθόνη
  4. Διαβάστε την ΕΙΣΟΔΟΣ Χρήστη
  5. υπολογισμοί σε bash
  6. Όροι
  7. Βρόχοι
  8. λειτουργίες
  9. πέφτει

1. Πράγματα που λείπουν στους περισσότερους

/bin/bash ή /bin/sh

Ένα από τα πρώτα πράγματα που κάνει το μηχάνημα κατά την εκτέλεση του σεναρίου μας είναι να κοιτάξει με ποιο κέλυφος να το κάνει. Στα περισσότερα τρέχοντα συστήματα linux / Bin / sh είναι ένας σύνδεσμος προς / bin / bash, αλλά αυτό δεν συμβαίνει πάντα, για παράδειγμα σε διανομές που χρησιμοποιούν busybox φέρνουν Sh και συνήθως φέρνουν και αυτά Bash, αλλά αν χρησιμοποιείτε / Bin / sh, δεν θα τρέξει με το Bash. Γι' αυτό συνιστώ να χρησιμοποιείτε πάντα / bin / bash.

Unicode εναντίον ASCII

Έχετε αναρωτηθεί ποτέ γιατί δεν μπορείτε να χρησιμοποιήσετε το "¿" ή το "ñ" στα σενάρια σας; Ή χρησιμοποιήστε τόνους; Μπορεί να γίνει αρκετά ενοχλητικό σε διαδραστικά σενάρια. Αυτό συμβαίνει επειδή η προεπιλεγμένη κωδικοποίηση του Bash είναι ASCII ή το σύνολο αγγλικών χαρακτήρων. Για να το αλλάξουμε, πρέπει απλώς να πούμε στο σενάριό μας ότι θέλουμε να χρησιμοποιήσουμε Unicode. Για αυτό πρέπει να προσθέσετε μια γραμμή ακριβώς μετά τον διερμηνέα εντολών:

# - * - Κωδικοποίηση: UTF-8 - * -

Προσοχή, είναι σημαντικό αυτή η γραμμή να βρίσκεται στην αρχή του σεναρίου.

Κάντε το σενάριο εκτελέσιμο

Είναι αστείο πόσοι άνθρωποι τρέχουν σενάρια με το "$ bashscript.sh" αντί "$ ./script.sh» Άλλωστε, γι' αυτό έχουμε ορίσει έναν διερμηνέα εντολών.

Για να προσθέσετε δικαιώματα εκτέλεσης πρέπει να εκτελέσετε:

sudo +x script.sh
Εάν το σενάριό μας είναι εκτελέσιμο, μπορούμε να το προσθέσουμε στο PATH μας και να το κάνουμε εκτελέσιμο από οποιοδήποτε μέρος/φάκελο στον υπολογιστή μας. Για αυτό πρέπει να προσθέσουμε είτε στο .bashrc του χρήστη μας είτε στο /etc/bashrc τη γραμμή
BIN="φάκελος όπου έχουμε τα σενάρια" PATH="$BIN$PATH"
Είναι μια πολιτική Bash να γράφετε ονόματα μεταβλητών με όλα τα κεφαλαία. Πολλοί άνθρωποι δεν ακολουθούν αυτόν τον κανόνα, αλλά για μεγάλα σενάρια εκτιμάται γιατί τα κάνουν πολύ πιο ευανάγνωστα.

2. Δομή ενός σεναρίου

  1. Κεφαλίδα
  2. Ορισμός καθολικών μεταβλητών
  3. βοήθεια
  4. λειτουργίες
  5. Κύριο σώμα

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

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

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

function help(){ echo """Το κείμενο βοήθειας είναι καλά μορφοποιημένο.""" έξοδος εάν [[ -z $1 || $1 == "-h" || $1 == "--help" ]]; στη συνέχεια βοηθήστε fi

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

Η συνθήκη υποδεικνύει την εμφάνιση βοήθειας στην οθόνη και την έξοδο εάν το σενάριο εκτελείται χωρίς παραμέτρους ή εάν υποδεικνύεται -h/–help. Αν προσέξετε, αυτή είναι η τυπική συμπεριφορά των περισσότερων προγραμμάτων linux.

Η χρήση των 3 εισαγωγικών με ηχώ σάς επιτρέπει να χρησιμοποιείτε αλλαγές γραμμής χωρίς να βγείτε από το μήνυμα που θα εμφανιστεί με ηχώ. Για μηνύματα πολλαπλών γραμμών είναι πολύ πιο βολικό να χρησιμοποιείτε ηχώ μόνο μία φορά.

3. Εκτύπωση στην οθόνη

Υπάρχουν 2 κύριες εντολές για εκτύπωση στην οθόνη στο bash: "ηχώ"Υ"Printf«. Και τα δύο είναι εξίσου γρήγορα, και τα δύο είναι μέρος του bash. Η κύρια διαφορά για έναν αρχάριο είναι ότι η ηχώ προσθέτει μια νέα γραμμή στο τέλος, ενώ "Printf" δεν.

Το Echo είναι πολύ καλό και είναι αυτό που χρησιμοποιούν οι περισσότεροι, ωστόσο όταν διαβάζετε το INPUT του χρήστη ή όταν θέλετε να εκτυπώσετε μεταβλητές που λαμβάνονται από αρχεία με επεξεργασία κειμένου, μπορεί να συμβούν περίεργα πράγματα. Συνήθως διορθώνονται εύκολα, τόσο εύκολα όσο η αλλαγή διπλών εισαγωγικών σε μεμονωμένα εισαγωγικά ή το αντίστροφο ή η αφαίρεση μεταβλητών παραπομπών από εισαγωγικά. «Echo» Κάνει επίσης περίεργα πράγματα ανάλογα με το πώς έχει μεταγλωττιστεί, αν χρησιμοποιούμε πάντα Ubuntu ή πάντα Fedora, δεν μας επηρεάζει, αλλά αν αλλάξουμε τη διανομή επηρεάζει.

Γι' αυτό χρησιμοποιώ "Printf«, που δεν μου προκαλεί πονοκεφάλους και συμπεριφέρεται περισσότερο σαν «Printf» του Γ ή του «αποτύπωμα» από την Python, αυτό είναι πολύ σημαντικό εάν θέλετε ποτέ να μεταφέρετε το σενάριό σας σε άλλη γλώσσα προγραμματισμού.

Για μια πιο εκτενή συζήτηση μπορείτε να επισκεφτείτε αυτή η ερώτηση Unix & Linux στο Stack Exchange.

4. Διαβάστε την ΕΙΣΟΔΟΣ χρήστη

Όλα όσα γράφουμε μετά το όνομα του σεναρίου μας και πριν πατήσουμε το πλήκτρο ENTER αποθηκεύονται αυτόματα σε ειδικές μεταβλητές. Αυτές οι μεταβλητές είναι του τύπου $X όπου το X είναι ένας αριθμός.

«$0» υποδεικνύει το όνομα του σεναρίου μας και από το «$1» στο άπειρο όλα όσα έχουμε γράψει μετά είναι μεταβλητά. Για παράδειγμα:

cat << EOF >> test.sh #!/bin/bash # -*- ΚΩΔΙΚΟΠΟΙΗΣΗ: UTF-8 -*- printf "\$0 = $0\n" printf "\$1 = $1\n" printf "\$2 = $2\n" EOF chmod +x script.sh ./script.sh my file.txt

Δημιουργούμε ένα δοκιμαστικό σενάριο, το κάνουμε εκτελέσιμο και το τρέχουμε με 2 παραμέτρους. Λαμβάνουμε την έξοδο οθόνης του:

$0 = ./script.sh $1 = $2 μου = file.txt

Χρησιμοποιώντας εισαγωγικά θα μπορούσαμε να περάσουμε το "my file.txt" στο "$1".

Μπορούμε επίσης να διαβάσουμε την ΕΙΣΟΔΟ ενός χρήστη με την εντολή "read", υποδεικνύοντας απευθείας τη μεταβλητή όπου θέλουμε να αποθηκεύσουμε την παράμετρο. Για παράδειγμα:

printf "Πώς σε λένε;\n" διάβασε NAME printf "Γεια σου, $NAME.\n"
Να είστε προσεκτικοί με την ανάθεση μεταβλητών. Το "$VAR = περιεχόμενο" θα δημιουργήσει ένα σφάλμα, δεν μπορούν να μείνουν κενά μεταξύ του ίσου, του ονόματος της μεταβλητής και του περιεχομένου. Η σωστή χρήση είναι "VAR=content"

5. Υπολογισμοί στο Bash

Για αυτό μπορούμε να χρησιμοποιήσουμεexpr«, αρκεί να μην χρειάζεται να κάνουμε πολύπλοκους υπολογισμούς. Δύο πράγματα πρέπει να επισημανθούν, το πρώτο είναι ότι «expr» δέχεται μόνο ακέραιους αριθμούς, το δεύτερο είναι ότι η διαίρεση επιστρέφει το ακέραιο αποτέλεσμα, για να δούμε τα υπόλοιπα μπορούμε να χρησιμοποιήσουμε «%".

Κανονικά θα θέλουμε να αντιστοιχίσουμε το αποτέλεσμα του expr σε μια μεταβλητή. Μπορούμε να το κάνουμε αυτό με δύο τρόπους:

VAR2=`expr $VAR1 / 10` VAR2=$(expr $VAR1 / 100)

Μπορεί επίσης να αγνοηθείexpr» χρησιμοποιώντας διπλή παρένθεση:

VAR2=$(($VAR1 / 100))
Για μια περαιτέρω εξήγηση του "expr» ή μια εναλλακτική που χρησιμοποιεί ακέραιους αριθμούς, μπορείτε να δείτε αυτό το λήμμα από τον KZKG^gaara.

6. Προϋποθέσεις

Έχει ήδη γραφτεί εκτενώς γι' αυτόif","αλλιώς","Elif» και προϋποθέσεις. Μπορείτε να διαβάσετε σχετικά στο:

Θέλω απλώς να επισημάνω τη διαφορά μεταξύ της χρήσης απλών αγκύλων, "[]«, και διπλές αγκύλες, «[[ ]]«, για τις συνθήκες. Με διπλές αγκύλες μπορούμε να χρησιμοποιήσουμε πρόσθετες προϋποθέσεις:

  • «&&» για και
  • «||» για ή

Χρησιμοποιώ "&&"Υ"||» με απλές αγκύλες, κάθε τμήμα πρέπει να χωρίζεται μεταξύ χωριστών αγκύλων. Το παράδειγμα που χρησιμοποιείται για το τμήμα του σεναρίου που ελέγχει εάν πρέπει να εκτελεστεί η βοήθεια θα είναι:

αν [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--βοήθεια" ]]; μετά βοηθήστε fi

Μας γλιτώνει επίσης από το να χρειάζεται να τυλίξουμε ονόματα μεταβλητών σε εισαγωγικά για να αποτρέψουμε σφάλματα. Για παράδειγμα:

εάν [ $1 = 1 ]; τότε printf "Η παράμετρος είναι ίση με 1."; fi εάν [ "$1" = 1 ]; τότε printf "Η παράμετρος είναι ίση με 1."; fi εάν [[ $1 = 1 ]]; τότε printf "Η παράμετρος είναι ίση με 1."; fi

Εάν το script.sh εκτελείται χωρίς παραμέτρους, η πρώτη περίπτωση θα δώσει ένα σφάλμα:

bash: [:=: αναμενόμενος μοναδικός τελεστής
Στο Bash τα "=" και "==" ερμηνεύονται και τα δύο με τον ίδιο τρόπο. Αυτό δεν συμβαίνει σε άλλες γλώσσες προγραμματισμού όπου το "=" χρησιμοποιείται μόνο για την εκχώρηση μεταβλητών.

Αυτό για το οποίο δεν έχει συζητηθεί είναι "περίπτωση«, που χρησιμοποιείται για την απλοποίηση»if«. Ας ξεκινήσουμε από την αρχή, όταν δεν έχουμε «if» θα εκτελεστεί όλος ο κώδικας. Αν προσθέσουμε μια συνθήκη «if» θα έχουμε δύο περιπτώσεις, μία στην οποία το μπλοκ κώδικα που βρίσκεται μέσα στο «if» και η άλλη περίπτωση όπου το εν λόγω μπλοκ δεν εκτελείται.

Αν προσθέσουμε ένα "αλλιώς», θα έχουμε και δύο περιπτώσεις, αλλά αυτές οι δύο περιπτώσεις είναι διαφορετικές από τις προηγούμενες. Γιατί τώρα θα υπάρχουν δύο μπλοκ κώδικα υπό όρους, το Α και το Β, και ένα μπλοκ C, που είναι το υπόλοιπο πρόγραμμα. Θα εκτελεστεί το Α ή το Β και το Γ. Στην προηγούμενη περίπτωση ήταν Α και Γ ή μόνο Γ.

Για να αποφύγετε τις συνθήκες γραφής «αν / αλλιώς" στα πλαίσια "αλλιώς» και για να απλοποιηθεί η ανάγνωση του κώδικα, δημιουργήθηκε «Elif«. Όταν έχουμε πολλές συνθήκες που εξαρτώνται από την προηγούμενη, για παράδειγμα εύρος αριθμών ή τύπος:

VAR1=$1 εάν [[ $VAR1 = 1 ]]; στη συνέχεια printf "1\n" elif [[ $VAR1 = 2 ]]; στη συνέχεια printf "2\n" elif [[ $VAR1 = 3 ]]; μετά printf "3\n" αλλιώς printf "none\n" fi

Στην περίπτωση του τελευταίουElif» θα διαβαστούν πολλές προϋποθέσεις. Σε περίπτωση που αυτή η διαδικασία επιταχύνεται:

VAR1=$1 περίπτωση $VAR σε 1) printf "1\n" ;; 2) printf "2\n" ;; 3|4) printf "3 ή 4, εξαρτάται\n" ;; *) printf "none\n" ;; ότι C

Θα διαβαστεί μια μεταβλητή, σε αυτήν την περίπτωση VAR1, και θα ελεγχθεί εάν είναι ισοδύναμη με κάποια από τις περιπτώσεις, εάν όχι, θα εκτελεστεί η προεπιλεγμένη περίπτωση "*". Τα διπλά ερωτηματικά ισοδυναμούν με "σπάσει«, υποδεικνύουν σε «περίπτωση» αυτό πρέπει να τελειώσει.

«Περίπτωση» μπορεί επίσης να χρησιμοποιηθεί ως ακολουθία «if«, για αυτό πρέπει να χρησιμοποιήσετε «;;» (συνέχεια) αντί για «;;» (αναβάλλω).

7. Βρόχοι

Υπάρχουν πολύ λίγοι βρόχοι που είναι γνωστοί σε οποιαδήποτε γλώσσα προγραμματισμού. Στο Bash είναι "ενώ","μέχρι"Υ"for«. Έχει ήδη γραφτεί στο blog σχετικά με αυτά:

Υπάρχουν δύο τύποι βρόχων «for«, όσοι είναι του τύπου «$ για VAR σε FOODS» και τι είναι ο τύπος C «$ για ((I=0; I<=10; I++))«. Ο δεύτερος τύπος βρόχων «for» είναι πολύ χρήσιμα, έχει 3 μέρη στην αρχή του βρόχου:

  • Δήλωση και αρχικοποίηση μεταβλητών (Σε αυτή την περίπτωση μια βοηθητική μεταβλητή «I=0»).
  • Συνθήκη εκτέλεσης (έως ότου το I είναι μικρότερο ή ίσο με 10).
  • Βοηθητική μεταβλητή αύξηση

Κατά τη γνώμη μου είναι ο πιο ισχυρός βρόχος από όλους. Ένα παράδειγμα, το οποίο εκτυπώνει όλους τους αριθμούς από το 0 έως το 10, συμπεριλαμβανομένων:

#!/bin/bash για ((I=0; I<=10; I++)); ολοκληρώστε την εκτύπωση "$I\n".

8. Λειτουργίες

Υπάρχουν κάποια πράγματα που ο Bash δεν μας επιτρέπει να κάνουμε, σωστά; Με την πρώτη ματιά, οι συναρτήσεις bash σας εμποδίζουν να κάνετε 3 πράγματα: να δηλώσετε τοπικές μεταβλητές στις συναρτήσεις, να μεταβιβάσετε παραμέτρους στις συναρτήσεις και να επιστρέψετε παραμέτρους. Όλα έχουν λύση.

Μην κάνετε τίποτα όπως:

#!/bin/bash VAR=1 printc "$VAR\n" συνάρτηση hello() { VAR=2 printf "$VAR\n" } hello printf "$VAR\n"

Αυτό εκτυπώνει την οθόνη 1, 2 και 2.

Για να δηλώσετε τοπικές μεταβλητές, προσθέστε "τοπικός» όταν δηλώνει:

#!/bin/bash VAR=1 printf "$VAR1\n" συνάρτηση foo() { local VAR1=2 printf "$VAR1\n" } printf "$VAR1\n" foo printf "$VAR1\n"

Αυτό εκτυπώνεται στην οθόνη 1, 1, 2, 1.

Πώς μεταβιβάζετε τις παραμέτρους σε μια συνάρτηση;

#!/bin/bash # -*- ΚΩΔΙΚΟΠΟΙΗΣΗ: UTF-8 -*- function hello() { printf "Hello $1\n" }

printf "Πώς σε λένε;\n"
readVAR1
γεια σας $VAR1

Πώς επιστρέφονται οι παράμετροι;

#!/bin/bash # -*- ΚΩΔΙΚΟΠΟΙΗΣΗ: UTF-8 -*- function hello() { printf "Hello hello" } printf "What's your name?\n" read VAR1 VAR1=$(hello) # HERE IS printf "$VAR1 $VAR2\n"

Όπως μπορείτε να δείτε, αυτό έχει δύο μειονεκτήματα, μπορεί να επιστρέψει μόνο μία παράμετρο, η οποία μπορεί να είναι διάνυσμα 😀 , και αν θέλετε να επιστρέψετε μια παράμετρο, δεν μπορεί πλέον να εκτυπωθεί στην οθόνη από αυτήν τη συνάρτηση.

Μπορείτε να βρείτε περισσότερα πράγματα σχετικά με τις λειτουργίες στη διεύθυνση [url=https://blog.desdelinux.net/programando-en-bash-parte-3/]αυτό το άρθρο από το Usemoslinux[/url].

9. Getops

Ένα από τα τελευταία πράγματα του Bash που πρέπει να γνωρίζετε για τη δημιουργία πολύπλοκων σεναρίων είναι "αποσπάσματα«. Χρησιμοποιείται για να περάσει επιλογές στο σενάριο ανεξάρτητα από τη σειρά. Το μόνο αλίευμα είναι ότι επηρεάζει μόνο σύντομες επιλογές:

#!/bin/bash # -*- ΚΩΔΙΚΟΠΟΙΗΣΗ: UTF-8 -*- VARC=0 function help() { printf "Help message\n" exit } if [[ -z $1 ]]; στη συνέχεια help fi ενώ getopts :ha:b:c OPT; do case $OPT in h) help ;; :) βοήθεια ;; α) VARA=$OPTARG ;; β) VARB=$OPTARG ;; γ) VARC=1 ;; \?) βοήθεια ;; esac done # Κύριο μπλοκ σεναρίου που # κάνει πράγματα με VARA, VARB και VARC

«παίρνει» διαβάζει τις επιλογές μία προς μία, γι' αυτό χρειάζεται βρόχος.

Υπάρχουν 2 τύποι επιλογών που μπορούν να περάσουν χρησιμοποιώντας το "παίρνει":

  • Οι παράμετροι που ονομάζονται σημαίες, σε αυτήν την περίπτωση -c ή -h. Καθορίζονται με το γράμμα που θέλουμε να χρησιμοποιήσουμε. Είναι σαν μεταβλητές boolean, "αληθής» (είναι) ή «ψευδής(Δεν είναι εδώ).
  • Παράμετροι με συσχετισμένα ορίσματα, -a οτιδήποτε, -b οτιδήποτε. Καθορίζονται με το γράμμα που θέλουμε με άνω και κάτω τελεία. Το όρισμα αποθηκεύεται στο OPTARG (αυτό το όνομα είναι αμετάβλητο).
Οι αρχικές διπλές κουκκίδες είναι για να μην εμφανίζονται σφάλματα.

Τι κάνει αυτό το σενάριο;

Εμφανίζει το μήνυμα βοήθειας όταν δεν μεταβιβάζεται καμία επιλογή, όταν μεταβιβάζεται η παράμετρος "-h", όταν μεταβιβάζεται μια μη έγκυρη παράμετρος (για παράδειγμα "-x", αυτό γίνεται από το "\?") ή όταν μια έγκυρη παράμετρος χωρίς όρισμα (":"). Σε όλες τις άλλες περιπτώσεις αποθηκεύει την παρουσία του "-c" ως 1 στο VARC και τις τιμές που περνούν με "-a" και "-b" σε VARA και VARB.


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

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

*

*

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

  1.   Έλαβ dijo

    ΕΝΤΕΧΝΟΣ. Δεν θα πω περισσότερα U_U

  2.   Miguel dijo

    Γεια σας πολύ καλό άρθρο.
    Γεια σου έβαλες να δώσεις δικαιώματα sudo +x αντί για chmod +x

    1.    Αυτεπαγωγής dijo

      $ sudo chmod +x script.sh
      (Για να είμαστε πιο ακριβείς, χεχε)

      Ω συγχαρητήρια και ευχαριστώ!

  3.   πυρκαγιά dijo

    Πολύ καλή ανάρτηση, πραγματικά σας συγχαίρω, συνεχίστε έτσι, με εκτίμηση

  4.   Γκουστάβο dijo

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

    σενάριο sh -x

    αφορά

  5.   DAGO dijo

    ΤΕΜΑΧΙΟ του φροντιστηρίου. Εξαιρετικό και πολύ καλά εξηγημένο.
    Σας ευχαριστώ.

  6.   Γαβριήλ dijo

    Εξαιρετική ανάρτηση για το θέμα 😉

  7.   Μάριο Γκιγιέρμο Ζαβάλα Σίλβα dijo

    Πολύ ενδιαφέρον και πολύ σημαντικό ευχαριστώ για τις πληροφορίες….
    ΣΤΗΝ ΥΓΕΙΑ ΣΑΣ !!!

  8.   Όχι από το Μπρούκλιν dijo

    Σας ευχαριστώ όλους για τα συγχαρητήριά σας, όσον αφορά την εντολή Miguel, δεν θα μου επιτρέψει να τροποποιήσω την καταχώριση μόλις δημοσιευτεί. Ο Έλαβ θα πρέπει να το κάνει φαντάζομαι.

  9.   Adrian dijo

    Πολύ καλά!

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

    Ωστόσο, βρήκα μερικές λεπτομέρειες που νομίζω ότι πρέπει να διορθωθούν.

    Πρώτον: στην ενότητα «2. ΔΟΜΗ ΣΕΝΑΡΙΟΥ» η συνάρτηση δεν είναι κλειστή, κάτι που θα προκαλέσει προβλήματα κατά την εκτέλεσή της σε ένα σενάριο.
    Η λύση θα ήταν να προσθέσετε ένα στήριγμα κλεισίματος αμέσως μετά την εντολή "έξοδος".

    Δεύτερον: στην ενότητα «4. READ USER INPUT" δηλώνετε ότι οι παράμετροι που μπορεί να εισαγάγει ο χρήστης κυμαίνονται από $0 έως άπειρο, ωστόσο το "bash" θα ερμηνεύσει μόνο $0 έως $9, αφού τα 10 $ θα ήταν ίσα με $1 + 0.
    Για να λύσετε αυτό το πρόβλημα, θα μπορούσατε είτε να χρησιμοποιήσετε την εντολή "shift" για να λάβετε τις ακόλουθες μεταβλητές. Ή, περικλείστε τη μεταβλητή σε άγκιστρα "${10}", έτσι ώστε το bash να παίρνει τις τιμές μαζί, όχι ως $1 + 0.

    Χωρίς άλλη καθυστέρηση, χαιρετισμούς!

    1.    Όχι από το Μπρούκλιν dijo

      Ευχαριστώ για το σχόλιο σου. Μου έλειψε τελείως να εξηγήσω τη σωστή χρήση του exit, τόσο στο σενάριο όσο και στις λειτουργίες. Όσον αφορά τα ${10}, δεν έχω φτάσει ποτέ σε τόσα πολλά, οπότε δεν έχω αντιμετωπίσει αυτό το πρόβλημα, είναι ωραίο να γνωρίζω ότι υπάρχει μια λύση γι' αυτό (έχει ήδη διαγράψει το νέο πράγμα που μάθαμε σήμερα 😀 ).

  10.   Χανιό dijo

    Ευχαριστώ πολύ για το άρθρο! Κάποια από αυτά που αναφέρεις έπρεπε να τα διευκρινίσω. Για παράδειγμα, getops.
    Στο κομμάτι των εξόδων στην οθόνη, δεν αναφέρατε τη γάτα που αναφέρατε αργότερα...
    γάτα <
    ***************************************
    *ΑΥΤΟ ΤΟ ΣΧΗΜΑ ΕΙΝΑΙ ΠΟΛΥ ΕΚΦΡΑΣΤΙΚΟ*
    ***************************************
    EOF

    Στο παράδειγμά σου:
    κατ << ΕΟΦ >> τεστ.σ
    Υπάρχουν δύο πράγματα που πρέπει να αναφέρουμε... >> είναι 'append', δηλαδή, αν επαναλάβετε την ίδια εντολή, θα έχετε ολόκληρο το σενάριο δύο φορές... Θα πρέπει να χρησιμοποιήσετε μόνο ένα...
    cat << ΕΟΦ > σενάριο.σ
    Ναι, θα πρέπει να λέγεται και script.sh
    Τότε μέσα
    αν [ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--βοήθεια" ]]; έπειτα
    βοήθεια
    fi

    Νομίζω ότι πρέπει να γραφτεί...
    αν [[ -z "$1" ] || [ "$1" == "-h" ] || [ "$1" == "--βοήθεια" ]]; έπειτα
    ...

    Υπάρχουν πολλά περισσότερα να ανακαλύψετε από το BASH.
    Θα μπορούσατε να το ονομάσετε «ΒΑΣΙΚΑ»; 🙂
    Για παράδειγμα, η παράμετρος 'δοκιμαστές' αρέσει -z για να γνωρίζει αν είναι άδεια ή -f για να γνωρίζει αν υπάρχει ως αρχείο.

    Και πάλι, ευχαριστώ για την προσπάθειά σας.
    alberto

  11.   clow_eriol dijo

    Ένα πολύ καλό σενάριο bash!

  12.   ocz dijo

    -- Κωδικοποίηση: UTF-8 --

    Είναι η πρώτη φορά που βλέπω μια τέτοια γραμμή για να ορίσω την κωδικοποίηση χαρακτήρων σε ένα σενάριο bash. Μου φαίνεται περισσότερο Python παρά Bash. Είναι πραγματικά απαραίτητο; Έχω ψάξει για κάποια αναφορά στο Google, αλλά δεν μπορώ να βρω τίποτα, έχετε κάποιο σύνδεσμο που να μιλάει για αυτό το θέμα; Συγκεκριμένα για την καταλληλότητα αυτής της γραμμής.

    Κατά τη γνώμη μου, για να γράψετε σενάρια Bash χρησιμοποιώντας UTF-8, χρειάζεται απλώς να αποθηκεύσετε το αρχείο κειμένου ως τέτοιο (χωρίς BOM) και να ορίσετε σωστά ορισμένες μεταβλητές περιβάλλοντος (LANG και LC_*).
    Τότε, προφανώς, είναι απαραίτητο οι εκτελούμενες εντολές να προετοιμαστούν για κωδικοποιήσεις διαφορετικές από το ASCII. Για παράδειγμα, αν θέλουμε να κάνουμε εναλλαγή σε κεφαλαία, αυτό δεν φαίνεται να λειτουργεί:
    «ηχώ áéíóú | tr az AZ»
    o:
    «ηχώ áéíóú | tr [:lower:] [:upper:]”
    και είναι καλύτερο να χρησιμοποιήσετε:
    «ηχώ áéíóú | awk "{ print toupper($0) }"".

    1.    Όχι από το Μπρούκλιν dijo

      Το θέμα για το «κωδικοποίησης» έχει αναφερθεί στο παρελθόν σε αυτό το ιστολόγιο:

      Bash: πώς να κάνετε ένα εκτελέσιμο σενάριο
      Σενάριο βοηθητικού προγράμματος μετά την εγκατάσταση

    2.    γαϊδουροκομοτου dijo

      Κάποιος να με διορθώσει, αλλά αυτή η γραμμή κωδικοποίησης (# -- Κωδικοποίηση: UTF-8 --) ΔΕΝ έχει να κάνει με το bash ή το κέλυφος: είναι μια γραμμή σχολίων (αρχίζει με #) και χρησιμοποιείται για να πούμε στον EDITOR ότι χρησιμοποιούμε για να γράψουμε το σενάριο (vim, emacs…) την κωδικοποίηση του αρχείου.

      Στην πραγματικότητα, το bash δεν βλέπει αυτήν τη γραμμή, επειδή είναι μια γραμμή σχολίων.

  13.   Jorge-1987 dijo

    Εξαιρετικό σεμινάριο, καθώς ένας Sysadmin είναι απαραίτητο να γνωρίζει πώς να κάνει Script στο Bash, σας βοηθά για τα πάντα.

    Πολύ αλλά πολύ καλό!

    Χαιρετισμούς!

  14.   Εντουάρντο Κουόμο dijo

    Σε περίπτωση που είναι χρήσιμο σε κάποιον, ακολουθούν διάφορες χρήσεις και παραδείγματα για να δημιουργήσετε τα δικά σας Σενάρια: https://github.com/reduardo7/hsabx

  15.   Μαύρο Λίτο dijo

    Πολύ καλά. Νέα πράγματα να προσθέσω στα σενάρια μου. Το encode και το printf δεν το είχαν.
    Ευχαριστώ!!!

  16.   xxxtonixxx dijo

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