Compartilhamento de tecnologia

[Linux][Shell][Variáveis ​​do Shell] explicadas em detalhes

2024-07-12

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


1. Variáveis ​​locais

  • Defina variáveis ​​do Shell, os nomes das variáveis ​​não precisam ser adicionados$
  • variáveis ​​locaisVálido apenas durante o tempo de vida atual do shell do usuário

2. Definição de variável

  • Requisitos de nome de variável: Composto por letras, números e sublinhados. Pode começar com letras ou sublinhados.
  • Os nomes das variáveis ​​são estritamente sensíveis a maiúsculas e minúsculas

3. Obtenha o valor da variável

  • apóstrofo: O que você vê é o que você obtém, citação forte
  • Aspas duplas: Exiba todo o conteúdo entre aspas, identifique símbolos especiais, referências fracas
  • Sem citações: Os símbolos contínuos podem estar sem aspas. Se houver espaços, haverá ambiguidade. É melhor usar aspas duplas.
  • crase: Faz referência ao resultado da execução do comando, igual a$()Uso

4.Variáveis ​​especiais

  • Variáveis ​​especiais do shell, usadas em scripts e funções para passar parâmetros.

  • Existem as seguintes variáveis ​​de parâmetros posicionais especiais:

    variávelefeito
    $0Obtenha o nome do arquivo do script shell e o caminho do script
    $nObtenha o enésimo parâmetro do shell script n está entre 1 e 9. Se for maior que 9, algum.{},como{$10}
    $#Obtenha o número total de parâmetros por trás do script de shell executado
    $*Obtenha todos os parâmetros do shell script, sem aspas, equivale a$@A função, mais as aspas "$*", éRecebe todos os parâmetros como uma única string
    $@Sem aspas, o efeito é o mesmo que acima. Com aspas, é.Receba todos os parâmetros como strings independentes

5. Variáveis ​​de estado especiais

  • Método de pesquisaman bash,procurarSpecial Parameters

    variávelefeito
    $?Valor de retorno do status de execução do último comando, 0 está correto, diferente de 0 falhou
    $$O número do processo do script de shell atual
    $!PID do último processo em segundo plano
    $_Obtenha o último parâmetro do último comando

6. Comandos variáveis ​​integrados do Shell

1. eco

  • parâmetro
    • -n: Conteúdo de saída sem quebras de linha
    • -e: Interpretar caracteres de escape
      • n: nova linha
      • r: Digitar
      • t:aba
      • b:backspace
      • v: Caractere de tabulação vertical

2.avaliação

  • Função:Executa vários comandos
  • Exemploeval ls; cd ~

3.exec

  • Função: não crie um processo filho e execute comandos subsequentes.execApós a execução, automaticamenteexit

7. String de interceptação

  • gramática

    gramáticaefeito
    #Remova a correspondência mais curta desde o início
    ##Remova a partida mais longa desde o início
    %Remova a correspondência mais curta do final
    %%Remova a partida mais longa do final
    #Interceptação de conteúdo de caractere especificado
    a*cCorresponde a uma string começando com a, qualquer número de caracteres no meio e terminando com c
    ${变量}Valor da variável de retorno
    ${#变量}Retornar comprimento variável, comprimento de caracteres
    ${变量:start}Retorna o caractere após o valor de deslocamento da variável
    ${变量:start:length}Extraia caracteres limitados por comprimento após deslocamento
    ${变量#word}Desde o início da variável, exclua a substring da palavra correspondente mais curta
    ${变量##word}Desde o início da variável, exclua a palavra correspondente mais longa
    ${变量%word}Remova a substring da palavra correspondente mais curta do final da variável
    ${变量%%word}Remova a substring da palavra correspondente mais longa do final da variável
    ${变量/pattern/string}Substitua o primeiro padrão correspondente por string
    ${变量//pattern/string}Substitua todos os padrões por string
  • Exemplo de operação: Excluir nome do arquivo

    # 通过⼦串的替换⽅式
    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. Processamento variável de expansão de shell especial

1. Gramática

  • Função: Todas essas quatro variáveis ​​estendidas pertencem ao julgamento e processamento de valores de variáveis.
  • gramáticaparameter,参数,范围
    • ${parameter:-word}:separameterO valor da variável está vazio, retornewordcorda
    • ${parameter:=word}:separameterO valor da variável está vazio, entãowordSubstitui um valor de variável e retorna seu valor
    • ${parameter:?word}:separameterO valor da variável está vazio,wordcomostderrSaída, caso contrário, saída do valor da variável
      • Usado para retornar a mensagem de erro quando ocorre um erro devido à configuração da variável como vazia.
    • ${parameter:+word}:separameterSe o valor da variável estiver vazio, não faça nada, caso contráriowordretornar

2. Cenários de aplicação

  • Backup de dados, script para excluir dados expirados
    # 原脚本命令,有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