Condivisione della tecnologia

[Linux] [Shell] [Variabili di Shell] spiegati in dettaglio

2024-07-12

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


1. Variabili locali

  • Definisci le variabili Shell, non è necessario aggiungere i nomi delle variabili$
  • variabile localeValido solo durante la durata attuale della shell dell'utente

2. Definizione delle variabili

  • Requisiti di nome variabile: composto da lettere, numeri e trattini bassi. Può iniziare con lettere o trattini bassi.
  • I nomi delle variabili fanno rigorosamente distinzione tra maiuscole e minuscole

3. Ottieni il valore della variabile

  • apostrofo: Quello che vedi è quello che ottieni, citazione forte
  • Virgolette: visualizza tutto il contenuto tra virgolette, identifica simboli speciali, riferimenti deboli
  • Nessuna virgoletta: I simboli continui possono essere senza virgolette. Se ci sono spazi, ci sarà ambiguità. È meglio usare le virgolette doppie.
  • apice inverso: Fa riferimento al risultato dell'esecuzione del comando, uguale a$()Utilizzo

4.Variabili speciali

  • Variabili speciali della shell, utilizzate negli script e nelle funzioni per passare parametri.

  • Sono disponibili le seguenti variabili parametriche posizionali speciali:

    variabileeffetto
    $0Ottieni il nome del file dello script della shell e il percorso dello script
    $nOttieni l'ennesimo parametro dello script di shell n è compreso tra 1 e 9. Se è maggiore di 9, alcuni{},Piace{$10}
    $#Ottieni il numero totale di parametri dietro lo script di shell eseguito
    $*Ottieni tutti i parametri dello script di shell, senza virgolette, a cui equivale$@La funzione, più le virgolette "$*", èRiceve tutti i parametri come un'unica stringa
    $@Senza virgolette, l'effetto è lo stesso di sopra. Con le virgolette, lo èRicevi tutti i parametri come stringhe indipendenti

5.Variabili di stato speciali

  • Metodo di ricercaman bash,ricercaSpecial Parameters

    variabileeffetto
    $?Valore restituito dello stato di esecuzione dell'ultimo comando, 0 è corretto, diverso da 0 non è riuscito
    $$Il numero di processo dello script di shell corrente
    $!PID dell'ultimo processo in background
    $_Ottieni l'ultimo parametro dell'ultimo comando

6. Comandi variabili incorporati nella shell

1.eco

  • parametro
    • -n: visualizza il contenuto senza interruzioni di riga
    • -e: interpreta i caratteri di escape
      • n: nuova linea
      • r: Accedere
      • t:scheda
      • b:backspace
      • v: carattere di tabulazione verticale

2.valutazione

  • Funzione:Esegue più comandi
  • Esempioeval ls; cd ~

3.eseguire

  • Funzione: non creare un processo figlio ed eseguire comandi successivi.execDopo l'esecuzione, automaticamenteexit

7. Intercetta la stringa

  • grammatica

    grammaticaeffetto
    #Rimuovi la corrispondenza più breve dall'inizio
    ##Rimuovi la corrispondenza più lunga dall'inizio
    %Rimuovi la corrispondenza più breve dalla fine
    %%Rimuovi la corrispondenza più lunga dalla fine
    #Intercettazione del contenuto del carattere specificato
    a*cCorrisponde a una stringa che inizia con a, con un numero qualsiasi di caratteri al centro e termina con c
    ${变量}Restituisce il valore della variabile
    ${#变量}Restituisce lunghezza variabile, lunghezza del carattere
    ${变量:start}Restituisce il carattere dopo il valore di offset della variabile
    ${变量:start:length}Estrai i caratteri limitati dalla lunghezza dopo l'offset
    ${变量#word}Dall'inizio della variabile, elimina la sottostringa di parole corrispondente più breve
    ${变量##word}Dall'inizio della variabile, elimina la parola corrispondente più lunga
    ${变量%word}Rimuovi la sottostringa di parole corrispondente più breve dalla fine della variabile
    ${变量%%word}Rimuovi la sottostringa di parole corrispondente più lunga dalla fine della variabile
    ${变量/pattern/string}Sostituisci il primo modello corrispondente con una stringa
    ${变量//pattern/string}Sostituisci tutti i modelli con la stringa
  • Esempio di operazione: Elimina il nome del file

    # 通过⼦串的替换⽅式
    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. Elaborazione speciale delle variabili di espansione della shell

1. Grammatica

  • Funzione: Queste quattro variabili estese appartengono tutte al giudizio e all'elaborazione dei valori delle variabili.
  • grammaticaparameter,参数,范围
    • ${parameter:-word}:SeparameterIl valore della variabile è vuoto, returnwordcorda
    • ${parameter:=word}:SeparameterIl valore della variabile è quindi vuotowordSostituisce un valore variabile e ne restituisce il valore
    • ${parameter:?word}:SeparameterIl valore della variabile è vuoto,wordCOMEstderrUscita, altrimenti valore della variabile di uscita
      • Utilizzato per restituire il messaggio di errore quando si verifica un errore dovuto all'impostazione della variabile su vuota.
    • ${parameter:+word}:SeparameterSe il valore della variabile è vuoto, non fare nulla, altrimentiwordritorno

2. Scenari applicativi

  • Backup dei dati, script per eliminare i dati scaduti
    # 原脚本命令,有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