Technologieaustausch

[Linux][Shell][Shell-Variablen] ausführlich erklärt

2024-07-12

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


1. Lokale Variablen

  • Definieren Sie Shell-Variablen. Variablennamen müssen nicht hinzugefügt werden$
  • lokale VariableNur gültig während der aktuellen Shell-Lebensdauer des Benutzers

2. Variablendefinition

  • Anforderungen an Variablennamen: Besteht aus Buchstaben, Zahlen und Unterstrichen. Es kann mit Buchstaben oder Unterstrichen beginnen.
  • Bei Variablennamen muss die Groß-/Kleinschreibung strikt beachtet werden

3. Ermitteln Sie den Variablenwert

  • Apostroph: Was Sie sehen, ist was Sie bekommen, starkes Zitat
  • Anführungszeichen: Geben Sie den gesamten Inhalt in Anführungszeichen aus, identifizieren Sie Sonderzeichen und schwache Referenzen
  • Keine Anführungszeichen: Fortlaufende Symbole können ohne Anführungszeichen stehen, da es zu Mehrdeutigkeiten kommt.
  • Backtick: Referenziert das Ergebnis der Befehlsausführung, gleich$()Verwendung

4.Spezielle Variablen

  • Spezielle Variablen der Shell, die in Skripten und Funktionen zur Übergabe von Parametern verwendet werden.

  • Es gibt die folgenden speziellen Positionsparametervariablen:

    VariableWirkung
    $0Rufen Sie den Dateinamen und den Skriptpfad des Shell-Skripts ab
    $nRufen Sie den n-ten Parameter des Shell-Skripts ab. n liegt zwischen 1 und 9. Wenn er größer als 9 ist, einige{},wie{$10}
    $#Ermitteln Sie die Gesamtzahl der Parameter hinter dem ausgeführten Shell-Skript
    $*Rufen Sie alle Parameter des Shell-Skripts ohne Anführungszeichen ab, was dem entspricht$@Die Funktion plus die Anführungszeichen „$*“ lautetEmpfängt alle Parameter als einzelne Zeichenfolge
    $@Ohne Anführungszeichen ist der Effekt derselbe wie oben. Mit Anführungszeichen ist er derselbeEmpfangen Sie alle Parameter als unabhängige Zeichenfolgen

5.Spezielle Zustandsvariablen

  • Suchmethodeman bash,suchenSpecial Parameters

    VariableWirkung
    $?Rückgabewert des letzten Befehlsausführungsstatus, 0 ist korrekt, ungleich 0 ist fehlgeschlagen
    $$Die Prozessnummer des aktuellen Shell-Skripts
    $!PID des letzten Hintergrundprozesses
    $_Rufen Sie den letzten Parameter des letzten Befehls ab

6. In die Shell integrierte Variablenbefehle

1. Echo

  • Parameter
    • -n: Inhalte ohne Zeilenumbrüche ausgeben
    • -e: Escape-Zeichen interpretieren
      • n: Neue Zeile
      • r: Eingeben
      • t:Tab
      • b:Rücktaste
      • v: Vertikales Tabulatorzeichen

2.Auswertung

  • Funktion:Mehrere Befehle ausführen
  • Beispieleval ls; cd ~

3.exec

  • Funktion: Erstellen Sie keinen untergeordneten Prozess und führen Sie keine nachfolgenden Befehle aus.execNach der Ausführung automatischexit

7. Zeichenfolge abfangen

  • Grammatik

    GrammatikWirkung
    #Entfernen Sie die kürzeste Übereinstimmung vom Anfang
    ##Entfernen Sie die längste Übereinstimmung vom Anfang
    %Entfernen Sie das kürzeste Streichholz vom Ende
    %%Entfernen Sie die längste Übereinstimmung vom Ende
    #Abfangen bestimmter Zeicheninhalte
    a*cEntspricht einer Zeichenfolge, die mit a beginnt, eine beliebige Anzahl von Zeichen in der Mitte hat und mit c endet
    ${变量}Variablenwert zurückgeben
    ${#变量}Gibt variable Länge und Zeichenlänge zurück
    ${变量:start}Gibt das Zeichen nach dem Variablenoffsetwert zurück
    ${变量:start:length}Extrahieren Sie Zeichen, deren Länge nach dem Offset begrenzt ist
    ${变量#word}Löschen Sie am Anfang der Variablen die kürzeste passende Wortteilzeichenfolge
    ${变量##word}Löschen Sie vom Anfang der Variablen das längste passende Wort
    ${变量%word}Entfernen Sie die kürzeste passende Wortteilzeichenfolge vom Ende der Variablen
    ${变量%%word}Entfernen Sie die längste übereinstimmende Wortteilzeichenfolge vom Ende der Variablen
    ${变量/pattern/string}Ersetzen Sie das erste passende Muster durch eine Zeichenfolge
    ${变量//pattern/string}Ersetzen Sie alle Muster durch eine Zeichenfolge
  • Bedienungsbeispiel: Dateinamen löschen

    # 通过⼦串的替换⽅式
    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. Spezielle Shell-Erweiterungsvariablenverarbeitung

1. Grammatik

  • Funktion: Diese vier erweiterten Variablen gehören alle zur Beurteilung und Verarbeitung von Variablenwerten.
  • Grammatikparameter,参数,范围
    • ${parameter:-word}:WennparameterDer Variablenwert ist leer, RückgabewordZeichenfolge
    • ${parameter:=word}:WennparameterDer Variablenwert ist dann leerwordErsetzt einen Variablenwert und gibt seinen Wert zurück
    • ${parameter:?word}:WennparameterDer Variablenwert ist leer,wordalsstderrAusgabe, andernfalls Variablenwert ausgeben
      • Wird verwendet, um die Fehlermeldung zurückzugeben, wenn ein Fehler auftritt, weil die Variable auf leer gesetzt ist.
    • ${parameter:+word}:WennparameterWenn der Variablenwert leer ist, tun Sie sonst nichtswordzurückkehren

2. Anwendungsszenarien

  • Datensicherung, Skript zum Löschen abgelaufener Daten
    # 原脚本命令,有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