Especificaciones y variables de programación de scripts de shell (las reglas que los scripts de shell deben conocer)

Especificaciones y variables de programación de scripts de shell


Shell es un programa de aplicación especial, se encuentra entre el kernel del sistema operativo y el usuario, actuando como un "intérprete de comandos", responsable de recibir e interpretar las instrucciones de operación (comandos) ingresados ​​por el usuario, y pasar las operaciones que deben ser ejecutado Proporciona la ejecución del kernel y muestra el resultado de la ejecución. Bash (/ bin / bash) es el shell predeterminado utilizado por la mayoría de las versiones de Linux.

1. Descripción general del script de shell

1. El concepto de script Shell

1) Guarde el orden de los comandos que se ejecutarán en un archivo de texto
2) Otorgue permiso para ejecutar el archivo ejecutable
3) Combine varias declaraciones de control de Shell para completar operaciones más complejas

2. Escenarios de aplicación de scripts de Shell

1) Operaciones repetitivas
2) Procesamiento de transacciones por lotes
3) Operación y mantenimiento automatizados
4) Monitoreo del estado de ejecución del servicio
5) Ejecución de la tarea de sincronización

3. El papel de Shell

1) Shell es el tubo de interpretación de comandos, el "traductor" entre el usuario y el kernel, responsable de interpretar la entrada de la línea de comandos por parte del usuario.

Inserte la descripción de la imagen aquí

2) Shell de inicio de sesión de usuario

  • Programa ShellI utilizado por defecto después de iniciar sesión, generalmente / bin / bash
  • Las instrucciones internas y el entorno operativo de diferentes Shells serán diferentes
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
....

Inserte la descripción de la imagen aquí

Dos, escribe un script de shell

1. Escriba el código de la secuencia de comandos

● Con el editor de texto vim,
un comando de Linux por línea, escrito en orden de ejecución.

[root@localhost ~]#vim first.sh #编辑脚本文件,以.sh结尾是方便识别出这是个shell脚本文件
cd /boot/ #切换到根目录
pwd  #查看当前所在目录
ls -lh vml* #以长格式更人性化的方式显示以vml开头的文件

Inserte la descripción de la imagen aquí

El archivo de script first.sh anterior incluye tres comandos: cd / boot /, pwd, ls -lh vml *. Después de ejecutar este archivo de secuencia de comandos, el resultado de salida es en realidad el resultado de ejecutar estos tres comandos en secuencia, realizando así el "procesamiento por lotes".

2. Otorgar permisos ejecutables

● Hacer que la secuencia de comandos sea ejecutable.

[root@localhost~]#chmod +x first.sh

Inserte la descripción de la imagen aquí

3. Ejecute el archivo de secuencia de comandos

1) Método 1: El comando para especificar la ruta requiere que el archivo tenga permiso x. (Ruta absoluta y ruta relativa)

chmod + x /root/first.sh

Especifique la ruta absoluta: /root/first.sh

Inserte la descripción de la imagen aquí

Especifique la ruta relativa: ./first.sh

Inserte la descripción de la imagen aquí

2) Método 2: especifique Shell para interpretar el script y el archivo no requiere permiso x.

ruta del script sh: sh first.sh o sh /root/first.sh

Ruta relativa (debe estar en el directorio donde se encuentra el script), este script se creó originalmente en el directorio de inicio (~ directorio), el directorio de inicio de root es root.

Inserte la descripción de la imagen aquí

Ruta absoluta (especifique la ruta específica del archivo directamente)

Inserte la descripción de la imagen aquí

3) Método tres: ruta de secuencia de comandos de origen o ruta de secuencia de comandos (no se requiere permiso x)

. first.sh o source first.sh (igual que el anterior para los requisitos de ruta)

Inserte la descripción de la imagen aquí

Este método de ejecución cambiará automáticamente al directorio de inicio. Esto se debe a que source y. Lee la configuración del script directamente en el proceso actual, ¡y no iniciará un nuevo proceso!
La fuente ejecutará el contenido del script directamente en el proceso principal (debido a que no abre un nuevo proceso, se puede decir que agrega directamente el contenido de ejecución del script al proceso actual). Entonces, después de su fuente, las variables configuradas en el interior se agregarán al entorno actual, ¡y puede llamar a las variables en el script en el shell!
Y ./first.sh y sh first.sh
son un nuevo proceso de subshell para ejecutar este script en el proceso actual. Cuando el script finaliza, las variables establecidas en sh y el subproceso se destruyen juntos. (El subshell hereda las variables de entorno del shell del proceso padre, y las variables se destruirán cuando finalice el subshell. Si se utiliza la exportación, las variables del subshell se pueden retroalimentar al shell del nivel padre).

4. Composición de guiones más completa

  • Declaración de guión
  • Información de anotación
  • Declaración ejecutable
[root@localhost~]#vim /first.sh
#!/bin/bash 
#This is my first Shell-Script. 
cd /boot
echo "当前的目录位于∶" 
pwd
echo "其中以vml开头的文件包括∶"   #输出友好提示信息
ls -Ih vml*

Inserte la descripción de la imagen aquí

En el archivo de script first.sh anterior, la primera línea "#! / Bin / bash" es una declaración de script especial, que indica que las declaraciones después de esta línea son interpretadas y ejecutadas por el programa / bin / bash; otras declaraciones que comienzan con " # "Indica información de comentario; el comando echo se utiliza para generar cadenas para facilitar la lectura de la información de salida del script. Por ejemplo, si se ejecuta el script reescrito first.sh, el resultado de salida es el siguiente.

Inserte la descripción de la imagen aquí

Cuarto, redireccionamiento y operación de canalización

1. Equipo de hardware interactivo

  • Entrada estándar: recibe datos de entrada del usuario desde el dispositivo
  • Salida estándar: salida de datos al usuario a través del dispositivo.
  • Error estándar: informa la información del error de ejecución a través de este dispositivo
Tipos de Archivo de dispositivo Número de descripción de archivo Dispositivo por defecto
Entrada estándar / dev / stdin 0 teclado
Salida estándar / dev / stdout 1 monitor
Salida de error estándar / dev / stderr 2 monitor

2. Operación de redireccionamiento

Tipos de Operador usar
Redirigir entrada < Leer datos del archivo especificado
Redirigir salida > Guarde el resultado de salida estándar en el archivo especificado y sobrescriba el contenido original
Redirigir salida >> Agregue el resultado de salida estándar al final del archivo especificado sin sobrescribir el contenido original
Salida de error estándar 2> Guarde la información del error en el archivo especificado y sobrescriba el contenido original
Salida de error estándar 2 >> Agrega el mensaje de error al final del archivo especificado sin sobrescribir el contenido original
Salida mixta &> Guarde la salida estándar y el error estándar en el mismo archivo
Salida mixta 2> y 1 Redirigir la salida de error estándar a la salida estándar

Por ejemplo:

vim passwd.txt
222222
echo "123456" > passwd.txt
echo "123456" >> passwd.txt

Utilice> para enviar el contenido al archivo, que sobrescribirá directamente el contenido del archivo.

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Use >> para indicar agregar al archivo, comenzará una nueva línea

Inserte la descripción de la imagen aquí

setenforce 0
echo "123456" > passwd.txt
passwd --stdin zs < passwd.txt

Inserte la descripción de la imagen aquí

Obtenga la contraseña del archivo pass.txt. Tenga en cuenta que SELinux afectará la ejecución del comando. Si la ejecución falla, puede intentar cerrarlo y volver a intentarlo.

3. Símbolo de funcionamiento de la tubería "|"

El resultado de salida del comando de la izquierda se usa como entrada (objeto de procesamiento) del comando de la derecha. Se pueden usar múltiples conductos en la misma línea de comando.

Por ejemplo:

ps aux | wc -l #显示所有进程数

Inserte la descripción de la imagen aquí

echo "abc123" | passwd --stdin zs #更改用户zs的密码为abc123

Inserte la descripción de la imagen aquí

Cinco, el rol y el tipo de variables de Shell

Las variables son valores que cambiarán y los que no cambiarán son constantes.

1. El papel de las variables

Se utiliza para almacenar parámetros (valores) específicos
que el sistema y los usuarios necesitan usar. Nombre de la variable: use un nombre fijo, preestablecido por el sistema o definido por el usuario.
Valor de la variable: puede cambiar según la configuración del usuario y los cambios en el entorno del sistema

2. Tipos de variables

Variables personalizadas: definidas, modificadas y utilizadas por el usuario.
Variables especiales: variables de entorno, variables de solo lectura, variables de ubicación, variables predefinidas

3. Variables personalizadas

Definir una nueva variable

变量名=变量值    #变量名以字母或下划线开头,区分大小写,建议全大写

Ver el valor de una variable

echo $变量名 #查看当前变量的值

Nota: no puede haber espacios en ambos lados de "=" al asignar un valor

Por ejemplo:

Inserte la descripción de la imagen aquí

4. Utilice comillas al asignar valores

Comillas dobles: permite citar otros valores de variable a través del símbolo $

Comillas simples: está prohibido citar otros valores de variables, y $ se trata como un carácter normal.

Comando invertido: reemplazo de comando, extrae la salida después de que se ejecuta el comando, `` tiene el mismo efecto que $ (...)

Inserte la descripción de la imagen aquí

5. Ingrese contenido desde el teclado para asignar valores a las variables

El comando de lectura obtiene la entrada

read -p 提示信息 变量名
echo $变量名

Inserte la descripción de la imagen aquí

También se puede utilizar en scripts para recopilar información.

Por ejemplo:

Inserte la descripción de la imagen aquí

Después de otorgar el permiso de ejecución del script, el resultado de la ejecución es el siguiente

Inserte la descripción de la imagen aquí

6. El alcance de la variable

1) De forma predeterminada, las variables recién definidas solo son válidas en el entorno Shell actual, por lo que se denominan variables locales. Al ingresar a una subrutina o un nuevo entorno de sub-Shell, las variables locales ya no se pueden usar.

2) Las variables especificadas se pueden exportar como variables globales a través de la exportación de comandos internos, de modo que las variables definidas por el usuario puedan seguir utilizándose en todos los entornos sub-Shell.

  • Establezca la expresión de alcance de la variable:
格式1:export 变量名
格式2:export 变量名=变量值

Puede usar el comando pstree para ver el entorno de Shell, ingresar el comando bash para ingresar al entorno de sub-Shell, presionar la combinación de teclas Ctrl + D o ingresar el comando de salida para salir del entorno de sub-Shell.

Inserte la descripción de la imagen aquí

Ingrese bash para ingresar al entorno sub-bash (también llamado entorno sub-Shell), que es equivalente a abrir un subproceso.

Inserte la descripción de la imagen aquí

Después de asignar un valor a PRODUCTO en el entorno bash padre actual, entré al subambiente y descubrí que el valor de la variable PRODUCTO no se podía ver en el subambiente porque PRODUCTO no es una variable de entorno global, y el PRODUCTO en el no se ha asignado el subambiente. Después de generar PRODUCT como una variable de entorno global, aún puede ver el valor de la variable de entorno principal PRODUCT incluso si ingresa al entorno de Shell secundario.

Inserte la descripción de la imagen aquí

7. Operación de variables enteras

  • Expresión de operación
格式:expr 变量1 运算符 变量2 [运算符 变量3]
  • Operadores comunes

Suma +, resta -, multiplicación \ *, división /, toma el% restante.

Expresiones aritméticas de uso común:

a=`expr 11 \* 2`
echo $((10 / (1+1)))
echo $[10 / (1+1)]
let i=12*4

i++ 相当于 i=$[$i+1]
i-- 相当于 i=$[$i-1]
i+=2 相当于 i=$[$i+2]

Inserte la descripción de la imagen aquí

Seis variables de shell especiales

1. Variables ambientales

Creado de antemano por el sistema para configurar el entorno de trabajo del usuario.
Archivos de configuración: / etc / profile (globalmente efectivo), ~ / .bash_profile (entorno de usuario actual)

2. Variables de entorno comunes

PWD 、 RUTA
USUARIO 、 SHELL 、 INICIO

Utilice el comando env para ver las variables de entorno en el entorno de trabajo actual. La
variable USER representa el nombre de usuario, HOME representa el directorio de inicio del usuario, LANG representa el idioma y el juego de caracteres, PWD representa el directorio de trabajo actual y la variable PATH representa la búsqueda predeterminada de programas ejecutables. ruta

3.PATH (variable de entorno de ruta)

echo $PATH					#查看当前搜索路径
PATH="$PATH:/root"			#将/root目录添加到搜索路径
export PATH="$PATH:/root"	#输出为全局环境变量
first.sh

Inserte la descripción de la imagen aquí

El cambio al entorno de sub-Shell sigue siendo ejecutable y otros directorios siguen siendo ejecutables

Inserte la descripción de la imagen aquí

4. Variables de solo lectura

Se utiliza cuando no se permite modificar el valor de la variable.

readonly 命令设置只读变量
readonly PRODUCT				#设置为只读变量
echo $PRODUCT
PRODUCT=Python			        #只读变量不可以被重新赋值
unset PRODUCT					#只读变量不可以被删除,unset 命令用于删除变量,但无法删除只读变量,只能重启系统解决

Inserte la descripción de la imagen aquí

5. Variables de ubicación

Ejecute el script sh xxx.sh 1 2 3 4 5 6 7 8 9 10… n

$ n: n es un número, $ 0 representa el comando en sí, 1 ~ 9 representan del primero al noveno parámetro, los parámetros por encima de diez deben expresarse entre llaves, por ejemplo, el décimo parámetro es $ {10}

Inserte la descripción de la imagen aquí

6. Variables predefinidas

$*、$@:表示命令或脚本要处理的参数。
  $*:把所有参数看成以空格分隔的一个字符串整体,代表"$1 $2 $3 $4"。
  $@:把各个参数加上双引号分隔成n份的参数列表,每个参数是独立  的,代表"$1" "$2" "$3" "$4"。

$0:表示当前执行的脚本或命令的名称。
$#:表示命令或脚本要处理的参数的个数。	
$?:表示前一条命令或脚本执行后的返回状态码,返回值为0表示执行正确,返回任何非0值均表示执行出现异常。
也常被用于Shell脚本中return退出函数并返回的退出值。
[root@localhost ~]#echo `date +%F` #查看完整日期,按照年-月-日的格式输出
2020-12-20
[root@localhost ~]#vim mybak.sh #编辑脚本
#!/bin/bash            #表示此行以后的语句通过/bin/bash程序来解释执行
time=backup-`date +%F`.tar.gz #把变量值backup-`date+%F`.tar.gz赋值给变量time
tar zcf $time $* &> /dev/null	#/dev/null表示的是一个黑洞文件,通常用于丢弃不需要的数据输出。
echo "已执行 $0 脚本,"
echo "共完成 $# 个对象的备份"
echo "具体内容包括: $*"

[root@localhost ~]#chmod +x mybak.sh #赋予执行权限
[root@localhost ~]#./mybak.sh /etc/passwd /etc/shadow

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_35456705/article/details/111873256
Recomendado
Clasificación