Especificación de programación de shell y la tubería (|) y redirección (<,>, >>) en el shell

Escenarios de aplicación del script Shell

Shell Script (Shell Script) es un archivo de programa en el que los comandos que se ejecutarán se guardan en un archivo de texto en orden y se otorgan permisos ejecutables al archivo para facilitar la ejecución única. Principalmente para facilitar que el administrador configure o administre, puede combinar varias declaraciones de control de Shell para completar operaciones más complejas. Se utiliza comúnmente en operaciones repetitivas, procesamiento de transacciones por lotes, operación y mantenimiento automatizados, monitoreo del estado de operación del servicio, ejecución de tareas de tiempo, etc.
En algunas tareas complejas de mantenimiento de Linux, una gran cantidad de operaciones interactivas y de entrada repetitivas no solo requieren mucho tiempo y trabajo, sino que también son propensas a errores. Escribir un programa de script de Shell adecuado puede procesar por lotes y completar automáticamente una serie de tareas de mantenimiento, lo que reduce en gran medida al administrador Carga.
Al igual que el script de publicación del sitio web, iniciamos sesión en el sitio web todos los días y descubriremos que el contenido de cada página no es estático. En circunstancias normales, el sitio web actualizará periódicamente el contenido del sitio web de acuerdo con el código desarrollado por el desarrollador. Esto se denomina sitio web que publica periódicamente nuevas versiones. Sin embargo, para algunos sitios web con un breve intervalo entre actualizaciones, ejecutar manualmente la liberación del comando es una operación repetitiva, que requiere mucho tiempo y es problemática. Para resolver este problema, se puede desarrollar una versión de lanzamiento automático y el script se puede publicar de manera eficiente, precisa y fácil con un solo clic.

Especificación de programación de shell

El script Shell en el sistema Linux es un programa de aplicación especial, que se encuentra entre el kernel del sistema operativo y el usuario. Actúa como un traductor. Es responsable de recibir e interpretar los comandos de operación ingresados ​​por el usuario, y pasar las operaciones que deben realizarse al kernel. Ejecutar y generar el resultado de la ejecución

1. Tipos de programas de interpretación de Shell

Hay muchos tipos de programas intérpretes de shell comunes. Cuando se utilizan diferentes scripts de shell, habrá algunas diferencias en sus instrucciones internas, indicaciones de línea de comandos, etc. A través del archivo / etc / shells, puede comprender los tipos de scripts de Shell compatibles con el sistema actual.
Entre ellos, / bin / bash es el script de Shell predeterminado utilizado por la mayoría de las versiones de Linux. El nombre completo de Bash es Bourne Again Shell, que actualmente es uno de los proyectos de software de código abierto más populares.

[root@localhost ~]# cat /etc/shells    //当前系统所支持的Shell脚本种类
/bin/sh
/bin/bash         //最受欢迎的开源软件项目之一
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh
2. Escriba un script de Shell sencillo
[root@localhost ~]# vi ceshi.sh   //创建编辑一个以.sh结尾的文件
#!/bin/bash
#一个简单的Shell脚本        //“#”用于注释的内容
cd/opt/                                    //切换到opt目录
echo "当前位于哪个目录:"    //在屏幕显示“ ....... ”
pwd                                          //查看当前在那个目录中
echo "查看当前目录:"      
ls -lh                                         //查看当前目录内容 
3. La forma de ejecutar el archivo de script

Primero, agregue permisos de ejecución al script (importante):

[root@localhost ~]# chmod +x ceshi.sh    //给文件添加执行的权限

3.1. Según la ruta del archivo de script (ruta relativa y ruta absoluta)

[root@localhost ~]# ./ceshi.sh    //或  .ceshi.sh 前提是在执行文件的目录下
当前位于哪个目录:
/opt
查看当前目录:
总用量 0
drwxr-xr-x. 2 root root 6 3月  26 2015 rh

3.2, ruta del archivo de script sh

[root@localhost /]# sh /root/ceshi.sh  //执行脚本
当前位于哪个目录:
/opt
查看当前目录:
总用量 0
drwxr-xr-x. 2 root root 6 3月  26 2015 rh

3.3, ruta del archivo de secuencia de comandos de origen

[root@localhost /]# source /root/ceshi.sh   //刷新执行脚本
当前位于哪个目录:
/opt
查看当前目录:
总用量 0
drwxr-xr-x. 2 root root 6 3月  26 2015 rh
[root@localhost opt]# 

4. En el entorno Shell: canalización (|) y redirección (<,>, >>)

Debido a la particularidad del procesamiento por lotes de scripts de shell, la mayoría de sus operaciones están en segundo plano y no requieren la intervención del usuario. Por lo tanto, aprender a extraer y filtrar la información de ejecución se vuelve muy importante.

4.1. Aplicación del símbolo de tubería (|)

La operación de canalización proporciona un mecanismo para el trabajo colaborativo entre diferentes comandos. El resultado de salida del comando del lado izquierdo del símbolo de canalización "|" se utilizará como entrada (objeto de procesamiento) del comando de la derecha. Se pueden utilizar varios comandos en la misma línea tubería.

cmd1  命令1 |  cmd2  命令2  [... | cmdn 命令 n]   //管道符号的使用格式。22

En las aplicaciones de script de shell, las operaciones de canalización se utilizan generalmente para filtrar la información clave necesaria. Por ejemplo, cuando usa el comando grep para marcar / bin / bash como el nombre de usuario del sistema del Shell, se generará la línea completa que cumpla con las condiciones. Sobre esta base, puede combinar la operación de canalización con el comando awk para un mayor filtrado, y solo generar el nombre de usuario y el Shell de inicio de sesión.

[root@localhost opt]# grep "/bin/bash$" /etc/passwd    //过滤文件中以/bin/bash结尾的行
root:x:0:0:root:/root:/bin/bash
[root@localhost opt]# grep "/bin/bash$" /etc/passwd | awk -F: '{print $1,$7}'      
        //过滤该行以冒号分割的第一位与第七位
root /bin/bash
[root@localhost opt]# free -m    //查看内存使用使用情况
total 内存总数:7806M
used 已经使用的内存数: 463M
free 空闲的内存数: 6760M
shared 当前已经废弃不用,总是10M
buffers Buffer 缓存内存数: 582M
cached Page 缓存内存数:582M
available     实际可用的内存数:7055M
              total        used        free      shared  buff/cache   available
Mem:           7806         463        6760          10         582        7055
Swap:          8063           0        8063
[root@localhost opt]# free -m |grep "Mem:" |awk '{print $4}'    //过滤内存空闲的内存数
6760
4.2. Aplicación de los símbolos de redirección (<,>, >>)

El sistema Linux utiliza archivos para describir varios hardware, equipos y otros recursos, como el disco duro y la partición, el CD-ROM y otros archivos de dispositivos aprendidos anteriormente. El proceso de procesamiento de información del usuario a través del sistema operativo incluye los siguientes tipos de archivos de dispositivos interactivos.

  • Entrada estándar (STDIN): el dispositivo predeterminado es el teclado y el número de archivo es 0. El comando leerá los datos de entrada necesarios durante la ejecución desde el archivo de entrada estándar.

  • Salida estándar (STDOUT): el dispositivo predeterminado es una pantalla y el número de archivo es 1. El comando envía el resultado de salida después de la ejecución al archivo de salida estándar.

  • Error estándar (STDERR): el dispositivo predeterminado es la pantalla y el número de archivo es 2. El comando envía varios mensajes de error durante la ejecución al archivo de error estándar.

    La entrada estándar, la salida estándar y el error estándar usan el teclado y la pantalla como dispositivos asociados de forma predeterminada para interactuar con el sistema operativo para completar las operaciones de entrada y salida más básicas, es decir, recibir varias cadenas de comandos e información de control auxiliar ingresada por el usuario desde el teclado. Y envíe el resultado del comando a la pantalla; si la ejecución del comando comete un error, el mensaje de error volverá a aparecer en la pantalla.

    En el mantenimiento real del sistema Linux, puede cambiar la dirección del contenido de entrada y salida sin utilizar los dispositivos de entrada y salida estándar predeterminados (teclado y monitor) .Esta operación se denomina redirección.

(1) Salida de redireccionamiento

Redirigir la salida se refiere a guardar el resultado de salida normal del comando en un archivo especificado en lugar de mostrarlo directamente en la pantalla del monitor. La salida redirigida usa los símbolos de operación ">" o ">>" para sobrescribir o agregar archivos, respectivamente.

Si el archivo de destino para la salida redirigida no existe, el archivo se creará y el resultado de salida del comando anterior se guardará en el archivo; si el archivo de destino ya existe, el resultado de salida se sobrescribirá o se agregará al archivo. Por ejemplo, si desea guardar la información del tipo de CPU (uname -p) del host actual en el archivo kernel.txt en lugar de mostrarlo directamente en la pantalla, puede realizar las siguientes operaciones.

[root@localhost ~]# uname -p > kernel.txt
[root@localhost ~]# cat kernel.txt
x86_64

Cuando necesite mantener el contenido original del archivo de destino, debe usar el símbolo de operación ">" en su lugar para agregar el contenido en lugar de sobrescribirlo. Por ejemplo, realice las siguientes operaciones para agregar la información de la versión del kernel al archivo kernel.txt.

[root@localhost ~]# uname -r >> kernel.txt    
[root@localhost ~]# cat kernel.txt
x86_64
3.10.0-514.el7.x86_64
(2) Redirigir entrada

Redirigir la entrada se refiere a cambiar la forma de recibir la entrada en un comando desde el teclado predeterminado a un archivo especificado en lugar de esperar la entrada del teclado. La entrada de redireccionamiento usa el operador "<".

Al redirigir la entrada, algunas operaciones interactivas se pueden completar leyendo archivos. Por ejemplo, al usar el comando passwd para establecer una contraseña para un usuario, debe ingresar la cadena de contraseña dos veces cada vez que se le solicite, lo cual es muy engorroso. Si cambia a redireccionar la entrada, puede omitir el proceso interactivo y completar automáticamente la configuración de la contraseña (combinado con el comando passwd Opción "–Stdin" para identificar la entrada estándar).

[root@localhost ~]# vim pass.txt	//添加初始密码串内容"123456" 123456
[root@localhost ~]# passwd --stdin jerry < pass.txt
//从pass.txt 文件中取密码,需要注意 SELinux 会影响此命令执行,若执行失败可尝试关闭 SELinux 
Changing password for user jerry.
passwd: all authentication tokens updated successfully.

Las instrucciones de comando no interactivas se pueden utilizar de manera más conveniente en los scripts de Shell, lo que reduce en gran medida la interrupción del programa y mejora la eficiencia de la ejecución del script.

(3), redirección incorrecta

La redirección de errores se refiere a guardar la información de error (como opciones o errores de parámetros, etc.) que ocurren durante la ejecución de un comando en un archivo específico en lugar de mostrarlo directamente en la pantalla. La redirección de errores usa el operador "2>", donde "2" se refiere al número del archivo de error (cuando se usa la salida estándar y la redirección de entrada estándar, el número 1, 0 se omite).

En aplicaciones reales, la redirección de errores se puede utilizar para recopilar información de error sobre la ejecución del programa y proporcionar una base para la resolución de problemas; para los scripts de shell, también puede redirigir información de error insignificante al archivo vacío / dev / null para mantener la salida del script Sucinto. Por ejemplo, puede realizar las siguientes operaciones para guardar la información de error que se produce durante la copia de seguridad utilizando el comando tar en el archivo error.log.

[root@localhost ~]# tar jcf /nonedir/etc.tgz /etc/ 2> error.log
[root@localhost ~]# cat error.log
tar: Removing leading `/' from member namestar (child): /nonedir/etc.tgz: Cannot open
: No such file or directory
tar (child): Error is not recoverable: exiting now

Cuando use el operador "2>", el contenido del archivo de destino se sobrescribirá como el operador ">". Si desea agregar contenido en lugar de sobrescribir el archivo, debe usar el operador "2 >>" en su lugar.

Cuando el resultado de la salida del comando puede incluir información de salida estándar (ejecución normal) e información de salida de error, puede usar el operador ">" "2>" para guardar los dos tipos de información de salida en archivos diferentes, o usar " El operador &> "guarda dos tipos de información de salida en el mismo archivo. Por ejemplo, en un script automatizado que compila el paquete de código fuente, si desea ignorar la información del proceso de operación como make y make install, puede dirigirlo al archivo vacío / dev / null.

[root@localhost ~]# vim httpd_install.sh
#!/bin/bash
# 自动编译安装httpd 服务器的脚本
cd /usr/src/httpd-2.4.25/
./configure --prefix=/usr/local/httpd --enable-so &> /dev/null make &> /dev/null
make install &> /dev/null
…… //省略部分内容
[root@localhost ~]# chmod +x httpd_install.sh

Supongo que te gusta

Origin blog.csdn.net/wulimingde/article/details/107919456
Recomendado
Clasificación