Κοινή χρήση τεχνολογίας

[Linux][Shell][Μεταβλητές Shell] εξηγείται λεπτομερώς

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina


1. Τοπικές μεταβλητές

  • Ορίστε μεταβλητές Shell, δεν χρειάζεται να προστεθούν ονόματα μεταβλητών$
  • τοπική μεταβλητήΙσχύει μόνο κατά την τρέχουσα διάρκεια ζωής του κελύφους του χρήστη

2. Ορισμός μεταβλητής

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

3. Λάβετε την τιμή της μεταβλητής

  • απόστροφος: Αυτό που βλέπετε είναι αυτό που παίρνετε, ισχυρό απόσπασμα
  • Διπλά εισαγωγικά: Εξαγωγή όλου του περιεχομένου σε εισαγωγικά, αναγνώριση ειδικών συμβόλων, αδύναμων παραπομπών
  • Χωρίς εισαγωγικά: Τα συνεχή σύμβολα μπορούν να είναι χωρίς εισαγωγικά, θα υπάρχει ασάφεια.
  • οπισθοδρόμηση: Αναφέρει το αποτέλεσμα εκτέλεσης εντολής, ίσο με$()Χρήση

4.Ειδικές μεταβλητές

  • Ειδικές μεταβλητές του κελύφους, που χρησιμοποιούνται σε σενάρια και συναρτήσεις για τη μετάδοση παραμέτρων.

  • Υπάρχουν οι ακόλουθες ειδικές μεταβλητές παραμέτρων θέσης:

    μεταβλητόςαποτέλεσμα
    $0Λάβετε το όνομα του αρχείου σεναρίου του κελύφους και τη διαδρομή του σεναρίου
    $nΛάβετε την nη παράμετρο του κελύφους n είναι μεταξύ 1 και 9. Εάν είναι μεγαλύτερη από 9, μερικά{},αρέσει{$10}
    $#Λάβετε τον συνολικό αριθμό παραμέτρων πίσω από το εκτελεσμένο σενάριο φλοιού
    $*Λάβετε όλες τις παραμέτρους του σεναρίου φλοιού, χωρίς εισαγωγικά, ισοδυναμεί με$@Η συνάρτηση, συν τα εισαγωγικά "$*", είναιΛαμβάνει όλες τις παραμέτρους ως μία συμβολοσειρά
    $@Χωρίς εισαγωγικά, το αποτέλεσμα είναι το ίδιο με τα εισαγωγικάΛάβετε όλες τις παραμέτρους ως ανεξάρτητες συμβολοσειρές

5.Μεταβλητές ειδικής κατάστασης

  • Μέθοδος αναζήτησηςman bash,ΑναζήτησηSpecial Parameters

    μεταβλητόςαποτέλεσμα
    $?Επιστρεφόμενη τιμή της τελευταίας κατάστασης εκτέλεσης εντολής, το 0 είναι σωστό, το μη-0 απέτυχε
    $$Ο αριθμός διεργασίας του τρέχοντος σεναρίου φλοιού
    $!PID της τελευταίας διαδικασίας παρασκηνίου
    $_Λάβετε την τελευταία παράμετρο της τελευταίας εντολής

6. Ενσωματωμένες εντολές μεταβλητών φλοιού

1.ηχώ

  • παράμετρος
    • -n: Εξαγωγή περιεχομένου χωρίς αλλαγές γραμμής
    • -e: Ερμηνεύστε χαρακτήρες διαφυγής
      • n: νέα γραμμή
      • r: Εισαγω
      • t:αυτί
      • b:backspace
      • v: Χαρακτήρας κάθετης καρτέλας

2.αξιολογώ

  • Λειτουργία:Εκτέλεση πολλαπλών εντολών
  • Παράδειγμαeval ls; cd ~

3.exec

  • Λειτουργία: Μην δημιουργείτε θυγατρική διεργασία και μην εκτελείτε επόμενες εντολές.execΜετά την εκτέλεση, αυτόματαexit

7. Συμβολοσειρά τομής

  • γραμματική

    γραμματικήαποτέλεσμα
    #Αφαιρέστε το συντομότερο ταίρι από την αρχή
    ##Αφαιρέστε το μεγαλύτερο ταίρι από την αρχή
    %Αφαιρέστε το συντομότερο ταίρι από το τέλος
    %%Αφαιρέστε το μεγαλύτερο ταίρι από το τέλος
    #Υποκλοπή συγκεκριμένου περιεχομένου χαρακτήρων
    a*cΤαιριάζει με μια συμβολοσειρά που ξεκινά με a, οποιονδήποτε αριθμό χαρακτήρων στη μέση και τελειώνει με c
    ${变量}Επιστροφή τιμής μεταβλητής
    ${#变量}Επιστροφή μεταβλητού μήκους, μήκους χαρακτήρων
    ${变量:start}Επιστρέφει τον χαρακτήρα μετά την τιμή μετατόπισης της μεταβλητής
    ${变量:start:length}Εξαγωγή χαρακτήρων περιορισμένου μήκους μετά τη μετατόπιση
    ${变量#word}Από την αρχή της μεταβλητής, διαγράψτε τη συντομότερη αντίστοιχη υποσυμβολοσειρά λέξης
    ${变量##word}Από την αρχή της μεταβλητής, διαγράψτε τη μεγαλύτερη αντίστοιχη λέξη
    ${变量%word}Αφαιρέστε τη συντομότερη αντίστοιχη υποσυμβολοσειρά λέξης από το τέλος της μεταβλητής
    ${变量%%word}Αφαιρέστε τη μεγαλύτερη υποσυμβολοσειρά λέξης που ταιριάζει από το τέλος της μεταβλητής
    ${变量/pattern/string}Αντικαταστήστε το πρώτο μοτίβο που ταιριάζει με κορδόνι
    ${变量//pattern/string}Αντικαταστήστε όλα τα μοτίβα με κορδόνι
  • Παράδειγμα λειτουργίας: Διαγραφή ονόματος αρχείου

    # 通过⼦串的替换⽅式
    snowk@SnowKYP# f=stu_102999_1_finished.jpg
    
    # 变量的⼦串功能,去掉后缀
    snowk@SnowKYP# echo ${f//_finished/}
    stu_102999_1.jpg
    
    # 利⽤变量的反引⽤替换⽂件名
    snowk@SnowKYP# mv $f `echo ${f//_finished/}`
    
    # 剩下的⽂件,利⽤循环操作
    # 找出剩下所有需要替换的jpg⽂件
    snowk@SnowKYP# ls *fin*.jpg
    stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg
    stu_102999_5_finished.jpg
    
    # 写shell循环代码,循环操作
    # 去掉所有jpg⽂件的_finished后缀
    snowk@SnowKYP# for file in `ls *fin*.jpg`;do mv $file `echo ${file//_finished/}`;done
    
    snowk@SnowKYP# ls *.jpg
    stu_102999_1.jpg stu_102999_2.jpg stu_102999_3.jpg stu_102999_4.jpg stu_102999_5.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

8. Ειδική επεξεργασία μεταβλητής επέκτασης κελύφους

1. Γραμματική

  • Λειτουργία: Αυτές οι τέσσερις εκτεταμένες μεταβλητές ανήκουν όλες στην κρίση και την επεξεργασία των τιμών των μεταβλητών.
  • γραμματικήparameter,参数,范围
    • ${parameter:-word}:ανparameterΗ τιμή της μεταβλητής είναι κενή, επιστροφήwordσειρά
    • ${parameter:=word}:ανparameterΗ τιμή της μεταβλητής είναι κενή, λοιπόνwordΑντικαθιστά μια τιμή μεταβλητής και επιστρέφει την τιμή της
    • ${parameter:?word}:ανparameterΗ τιμή της μεταβλητής είναι κενή,wordόπως καιstderrΈξοδος, αλλιώς τιμή μεταβλητής εξόδου
      • Χρησιμοποιείται για την επιστροφή του μηνύματος σφάλματος όταν παρουσιάζεται σφάλμα λόγω της ρύθμισης της μεταβλητής σε άδεια.
    • ${parameter:+word}:ανparameterΕάν η τιμή της μεταβλητής είναι κενή, μην κάνετε τίποτα, διαφορετικάwordΕΠΙΣΤΡΟΦΗ

2. Σενάρια εφαρμογής

  • Αντίγραφο ασφαλείας δεδομένων, σενάριο για διαγραφή δεδομένων που έχουν λήξει
    # 原脚本命令,有bug,有歧义
    find ${file_path} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    # 修正后的脚本命令
    # 如果有bug起义,就在当前目录搜索并执行删除
    find ${file_path:=/tmp} -name '*.tar.gz' -type f -mtime +7 | xargs rm -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6