Compartir tecnología

[Linux][Shell][variables de Shell] explicados en detalle

2024-07-12

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


1. Variables locales

  • Defina variables de Shell, no es necesario agregar nombres de variables$
  • variable localSólo válido durante la vida útil actual del shell del usuario

2. Definición de variables

  • Requisitos de nombre de variable: Compuesto por letras, números y guiones bajos. Puede comenzar con letras o guiones bajos.
  • Los nombres de las variables distinguen estrictamente entre mayúsculas y minúsculas.

3. Obtenga el valor de la variable

  • apóstrofe: Lo que ves es lo que obtienes, cita fuerte
  • Doble comillas: Muestra todo el contenido entre comillas, identifica símbolos especiales y referencias débiles.
  • Sin comillas: Los símbolos continuos pueden estar sin comillas. Si hay espacios, habrá ambigüedad. Es mejor utilizar comillas dobles.
  • comillas invertidas: Hace referencia al resultado de la ejecución del comando, igual a$()Uso

4.Variables especiales

  • Variables especiales del shell, utilizadas en scripts y funciones para pasar parámetros.

  • Existen las siguientes variables de parámetros posicionales especiales:

    variableefecto
    $0Obtenga el nombre del archivo del script de shell y la ruta del script
    $nObtenga el enésimo parámetro del script de shell. n está entre 1 y 9. Si es mayor que 9, algunos.{},como{$10}
    $#Obtenga el número total de parámetros detrás del script de shell ejecutado
    $*Obtener todos los parámetros del script de shell, sin comillas, es equivalente a$@La función, más las comillas "$*", esRecibe todos los parámetros como una sola cadena
    $@Sin comillas, el efecto es el mismo que el anterior. Con comillas, es.Reciba todos los parámetros como cadenas independientes

5.Variables de estado especiales

  • Método de búsquedaman bash,buscarSpecial Parameters

    variableefecto
    $?Valor de retorno del estado de ejecución del último comando, 0 es correcto, distinto de 0 falla
    $$El número de proceso del script de shell actual.
    $!PID del último proceso en segundo plano
    $_Obtener el último parámetro del último comando

6. Comandos variables integrados en Shell

1.eco

  • parámetro
    • -n: contenido de salida sin saltos de línea
    • -e: Interpretar caracteres de escape
      • n: nueva línea
      • r: Ingresar
      • t:pestaña
      • b:retroceso
      • v: Carácter de tabulación vertical

2.evaluaruar

  • Función:Ejecutar múltiples comandos
  • Ejemploeval ls; cd ~

3.ejecutivo

  • Función: No cree un proceso hijo y ejecute comandos posteriores.execDespués de la ejecución, automáticamente.exit

7. Interceptar cadena

  • gramática

    gramáticaefecto
    #Elimina la coincidencia más corta desde el principio.
    ##Elimina el partido más largo desde el principio.
    %Elimina la coincidencia más corta del final.
    %%Elimina el partido más largo del final.
    #Intercepción de contenido de carácter específico.
    a*cCoincide con una cadena que comienza con a, cualquier número de caracteres en el medio y termina con c
    ${变量}Valor de la variable de retorno
    ${#变量}Devuelve longitud variable, longitud de carácter
    ${变量:start}Devuelve el carácter después del valor de compensación de la variable.
    ${变量:start:length}Extraer caracteres limitados por longitud después del desplazamiento
    ${变量#word}Desde el principio de la variable, elimine la subcadena de palabras coincidentes más corta
    ${变量##word}Desde el principio de la variable, elimine la palabra coincidente más larga.
    ${变量%word}Elimine la subcadena de palabras coincidentes más corta del final de la variable
    ${变量%%word}Elimine la subcadena de palabras coincidentes más larga del final de la variable
    ${变量/pattern/string}Reemplace el primer patrón coincidente con una cuerda
    ${变量//pattern/string}Reemplazar todos los patrones con cuerda
  • Ejemplo de operación: Eliminar nombre de archivo

    # 通过⼦串的替换⽅式
    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. Procesamiento de variables de expansión de shell especial

1. gramática

  • Función: Estas cuatro variables extendidas pertenecen todas al juicio y procesamiento de valores de variables.
  • gramáticaparameter,参数,范围
    • ${parameter:-word}:siparameterEl valor de la variable está vacío, devuelvewordcadena
    • ${parameter:=word}:siparameterEl valor de la variable está vacío, entonceswordReemplaza un valor de variable y devuelve su valor
    • ${parameter:?word}:siparameterEl valor de la variable está vacío,wordcomostderrSalida; de lo contrario, salida del valor de la variable
      • Se utiliza para devolver el mensaje de error cuando se produce un error debido a que la variable está vacía.
    • ${parameter:+word}:siparameterSi el valor de la variable está vacío, no haga nada; de lo contrarioworddevolver

2. Escenarios de aplicación

  • Copia de seguridad de datos, script para eliminar datos caducados
    # 原脚本命令,有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