¡Una visita obligada para obtener una explicación detallada de las variables de especificación de programación de shell! ! ! (Símbolo de tubería y redirección, tipo de variable de shell)

Explicación detallada de las variables de especificación de programación de shell de Linux (especificación de programación de shell, la forma de ejecutar scripts, símbolos de canalización y redirección, tipos de variables de shell)

Prefacio

  Shell es un programa escrito en lenguaje C, que es un puente para que los usuarios usen Linux. Shell es tanto un lenguaje de comandos como un lenguaje de programación.
  La ejecución de comandos de Linux debe depender del intérprete de comandos de Shell. Shell es en realidad un programa especial que se ejecuta en el sistema operativo Linux. Está ubicado entre el kernel del sistema operativo y el usuario. Es responsable de recibir e interpretar los comandos ingresados ​​por el usuario, y pasar las operaciones que deben realizarse al kernel del sistema para su ejecución. Actuando como un "traductor" entre el núcleo y el núcleo. Cuando un usuario inicia sesión en un sistema Linux, se carga automáticamente un programa Shell para proporcionar al usuario un sistema operativo que puede ingresar comandos.

Uno: descripción general del script de Shell

1.1: El concepto de scripts de shell

  • Guarde los comandos que se ejecutarán en un archivo de texto en orden
  • Otorgue el permiso ejecutable del archivo para una operación fácil + un permiso de ejecución x
  • Se puede combinar con varias declaraciones de control de shell para completar operaciones más complejas

1.2: Escenarios de aplicación de scripts de shell

  • Operación repetitiva
  • Procesamiento de transacciones por lotes
  • Gestión automatizada de operación y mantenimiento
  • Supervisión del estado de funcionamiento del servidor
  • Ejecución de tareas programadas
  • ……
    El papel del shell ----- Intérprete de comandos, "traductor"Inserte la descripción de la imagen aquí

1.3: Shell de inicio de sesión del usuario

  • Programa de shell utilizado por defecto después de iniciar sesión, generalmente / bin / bash
  • Los comandos internos y el entorno operativo de diferentes shells serán diferentes
[root@server1 ~]# cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin
/bin/tcsh
/bin/csh

1.31: escriba comando-muestra el tipo de comando especificado

[root@shuai opt]# type cd
cd 是 shell 内嵌
[root@shuai opt]# type mkdir
mkdir 是 /usr/bin/mkdir
[root@shuai opt]# type bash
bash 是 /usr/bin/bash
[root@shuai opt]# type which
which 是 `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' 的别名

1.4: Escribiendo el primer script de shell

1.41: Escribir código de script

  • Usar el editor de texto vi
  • Un comando de Linux por línea, escrito en orden de ejecución
  • El sufijo del script es .sh
vim cendy.sh
#!/bin/bash           #shell脚本固定格式
cd /boot              #切换到boot目录
pwd                   #查看当前所在位置
ls -lh vml*           #看vml开头所有文件
:wq                   #ESC切换到命令模式  保存退出
[root@server1 test]# ls -lh
总用量 4.0K
-rwxr-xr-x. 1 root root 38 9月  18 14:10 cendy.sh

1.4.2 Otorgar permisos ejecutables

[root@server1 test]# chmod +x cendy.sh

1.5: Ejecutar archivo de script

  • Método 1: ruta del archivo de secuencia de comandos (ruta absoluta y ruta relativa)
[root@server1 test]# ls -lh
总用量 8.0K
-rwxr-xr-x. 1 root root 38 9月  18 14:10 cendy.sh
-rw-r--r--. 1 root root 25 9月  18 14:25 jerry         #无执行权限
[root@server1 test]# ./jerry.sh
-bash: ./jerry.sh: 权限不够 
[root@server1 test]# ./cendy.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M 8月  26 17:42 vmlinuz-0-rescue-34c5caefc7194359afe5202e8cdfd9fe
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64
  • Método 2: ruta del archivo de script sh
[root@server1 test]# sh jerry.sh 
/boot
-rwxr-xr-x. 1 root root 5.7M 8月  26 17:42 vmlinuz-0-rescue-34c5caefc7194359afe5202e8cdfd9fe
-rwxr-xr-x. 1 root root 5.7M 8月  23 2017 vmlinuz-3.10.0-693.el7.x86_64

Dos: redirección y operación de canalización

2.1: Dispositivo de hardware interactivo 0 1 2

  • Entrada estándar: acepta 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 Descripción del archivo Dispositivo por defecto
Entrada estándar / dev / stdin 0 teclado
Salida estándar / dev / stdout 1 monitor
Salida de error estándar / dev / stder 2 monitor

2.2: Operación de redireccionamiento

Tipos de Operador utilizar
Redirigir entrada < Leer datos del archivo especificado en lugar de ingresar desde el teclado
Redirigir salida > Guarde el resultado de salida en el archivo especificado (sobrescriba el contenido original)
Redirigir salida >> Agrega el resultado de salida al archivo especificado
Salida de error estándar 2 > Guarde la información del error en el archivo especificado (sobrescriba el contenido original)
Salida de error estándar 2 >> Agrega la información del error al archivo especificado
Salida mixta y > Guarde el contenido de la salida estándar y el error estándar en el mismo archivo

2.3: Símbolo de operación de la tubería "|"

  • Muestra el resultado del comando de la izquierda como destino de procesamiento del comando de la derecha
[root@server1 test]# grep "bash$" /etc/passwd        #查看以bash结尾的登录账号
root:x:0:0:root:/root:/bin/bash
amandabackup:x:33:6:Amanda user:/var/lib/amanda:/bin/bash
qy:x:1000:1000:qyf:/home/qyf:/bin/bash
#以冒号分隔,输出第1,7个字段    ##如果不写-F 就是指标符号跟空格
[root@server1 test]# grep "bash$" /etc/passwd | awk -F: '{print $1.$7}'
root/bin/bash
amandabackup/bin/bash
qyf/bin/bash

Awk es un tipo de expresión regular

大部分情况下  
grep:过滤关键字  grep egrep 
sed 老二 按行读取
awk 老三 按列读取数据
sed: 按行读取
awk:按列读取数据
$1,$7:位置变量
[root@shuai opt]# df -Th
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        50G  5.0G   46G   10% /
devtmpfs                devtmpfs  3.6G     0  3.6G    0% /dev
tmpfs                   tmpfs     3.6G     0  3.6G    0% /dev/shm
tmpfs                   tmpfs     3.6G   13M  3.6G    1% /run
tmpfs                   tmpfs     3.6G     0  3.6G    0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  179M  836M   18% /boot
/dev/mapper/centos-home xfs       242G   33M  242G    1% /home
tmpfs                   tmpfs     726M  4.0K  726M    1% /run/user/42
tmpfs                   tmpfs     726M   48K  726M    1% /run/user/0
/dev/sr0                iso9660   4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

####提取第一个跟第六个
[root@shuai opt]# df -Th | awk '{print $1,$6}'
文件系统 已用%
/dev/mapper/centos-root 10%
devtmpfs 0%
tmpfs 0%
tmpfs 1%
tmpfs 0%
/dev/sda1 18%
/dev/mapper/centos-home 1%
tmpfs 1%
tmpfs 1%
/dev/sr0 100%
##过滤以/结尾 第一列跟第六列
[root@shuai opt]# df -Th | grep "/$" | awk '{print $1,$6}'
/dev/mapper/centos-root 10%

Tres: explicación detallada de las variables del script de shell

3.1: El rol y el tipo de variables: Las variables son el tipo de programación más común

Una forma de acceder temporalmente a los datos en la memoria

3.11: El papel de las variables

Para proporcionar parámetros específicos para una gestión flexible del sistema limux, tiene dos significados.
Nombre de la variable: utilice 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

3.12: Tipos de variables

Variables personalizadas: definidas, modificadas y utilizadas por el usuario.
Variables de entorno: mantenidas por el sistema y utilizadas para configurar el entorno de trabajo.
Variables de ubicación: pasan parámetros al programa de script a través de la línea de comandos.
Variables predefinidas: un tipo de variable incorporada en Bash que no se puede modificar directamente

3.2: Variables personalizadas

3.21: Definir una nueva variable y ver el valor de la variable

Definir una nueva variable-variable personalizada = echo el
nombre de la variable comienza con subtítulos o subrayado, distingue entre mayúsculas y minúsculas, se recomienda todo en mayúsculas.
Formato de variable nombre de variable = valor de
variable Ver valor de variable
echo $ nombre de variable

3.22: Reglas de nomenclatura de variables

命名只能使用英文字母,数字和下划线,首个字符不能用数字开头’
中间不能有空格,可以用下挂线—
不能使用标点符号
不能使用bash的关键字【可用help命令查看保留关键字】

VFDA = 2
edad = 90 整型## aquí = se llama símbolo de asignación
nombre = 'baisn'
puntaje de cadena = 88.8 [coma flotante de precisión simple 4 bytes] shuai = 8.88 [coma flotante de precisión doble 8 bytes]

[root@server1 test]# dd=20
[root@server1 test]# $dd=20
bash: 20=20: 未找到命令...
[root@server1 test]# echo $dd 20
20 20
[root@server1 test]# echo $dd 
20
[root@server1 test]# name=dd
[root@server1 test]# echo $name
cc
[root@server1 test]# echo $name dd
cc dd

3.23: Cancelar la variable desarmada

[root@server1 test]# name=aa
[root@server1 test]# echo $name 
aa
[root@server1 test]# unset name    #取消变量
[root@server1 test]# echo $name 

#输出为空

3.24: Use comillas al asignar valores

  • Las comillas dobles
    permiten hacer referencia a otros valores de variable mediante símbolos, es decir, en el caso de representar una cadena, si hay un símbolo para hacer referencia a otros valores de variable, es decir, en el caso de representar una cadena, si hay un símbolo para hacer referencia a otros valores de variable, es decir, puede representar En el caso de una cadena, también puede representar un escalar si existe
  • apóstrofe

Está prohibido citar otros valores de variable. Es un carácter normal, que se considera una cadena, y los símbolos de variable no se reconocen. Backtick: sustitución de comando, extrae el resultado de salida después de ejecutar el comando. Variable = backtick es equivalente a variable = ()

[root@server1 test]# siri=10
[root@server1 test]# echo $siri 
10
[root@server1 test]# siri2="50 $siri"
[root@server1 test]# echo $siri2
50 10
[root@server1 test]# siri=`ps aux | wc -l`
[root@server1 test]# echo $siri
204
[root@server1 test]# siri='ps aux | wc -l'
[root@server1 test]# echo $siri
ps aux | wc -l

3.25: Ingrese contenido desde el teclado para asignar lectura

[root@server1 test]# vim weather.txt
#!/bin/bash
read -p "请输入今天的天气:" weather
echo "今天天气是: $weather"
#命令模式  :wq 保存退出
[root@server1 test]# chmod +x weather.txt 
[root@server1 test]# ./weather.txt 

3.26: Establecer el alcance de la variable La configuración de exportación está disponible globalmente

  1. Formato 1: exportar nombre de variable
  2. Formato 2: exportar nombre de variable = valor de variable
  3. Los dos formatos se pueden mezclar.
    Exportar puede definir la variable como una variable global. En este caso, la variable se puede utilizar ya sea cambiando el entorno bash o cambiando de usuario.
[root@server1 test]# tom=shu
[root@server1 test]# echo $tom 
shu
[root@server1 test]# bash           #设置bash环境
[root@server1 test]# echo $tom
#输出为空
[root@server1 test]# exit           #退出bash环境
exit
[root@server1 test]# echo $tom 
shu
[root@server1 test]# export tom     #设置为全局变量
[root@server1 test]# bash
[root@server1 test]# echo $tom      #引用全局变量
shu

3.27: Operación expr de variables enteras

expr variable 1 operador variable 2 [operador variable 3] .. . . . .
Operadores comunes

  1. Operación de adición: +
  2. Operación de resta: -
  3. Operación de multiplicación: * La multiplicación debe sumar \, porque en el lenguaje shell, * representa un símbolo comodín
  4. Operación de división: /
  5. Operación de módulo (resto):%
[root@server1 test]# expr 1 + 2
3
[root@server1 test]# expr 5 -  2
3
[root@server1 test]# expr 5 \*  2
10
[root@server1 test]# expr 2 / 2
1
[root@server1 test]# expr 5 %  2
1
[root@server1 test]# vim test1.sh
#!/bin/bash
read -p "第一天学习了几个小时:" time1
read -p "第二天学习了几个小时:" time2
time=`expr $time1 + $time2`
echo "两天学习时间总和为$time " 
[root@server1 test]# chmod +x test1.sh 
[root@server1 test]# ./test1.sh 
第一天学习了几个小时:12
第二天学习了几个小时:12
两天学习时间总和为24  

Cuatro: Variables de shell especiales

4.1 Variables ambientales

  • Creado de antemano por el sistema para configurar el entorno de trabajo del usuario
  • Archivos de configuración: / etc / profile, ~ / .bash_prolile

4.2 Variables de entorno comunes

  • PWD \ 、 RUTA
  • USUARIO 、 SHELL 、 INICIO
[root@server1 test]# echo $PATH 
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@server1 test]# echo $PWD 
/root/test
[root@server1 test]# vim test2.sh
[root@server1 test]# sh test2.sh 40 20
第一个值 40
第二个值 20
减运算结果为20

4.3: Variables predefinidas

  1. $ #: El número de variables de posición en la línea de comando
  2. $ *: el contenido de todas las variables de ubicación
  3. $ ?: El estado devuelto después de que se ejecute el último comando. Cuando el valor del estado de retorno es 0, significa normal, y un valor distinto de cero significa ejecución anormal o error.
  4. $ 0: proceso / programa actualmente en ejecución
  5. Script de análisis
[root@server1 test]# vim test3.sh
#!/bin/bash
t=b-`date +%s`.tgz                  #设置变量名称,+%s表示从1970年至今的秒数
tar zcvf $t $* &> /dev/null       #压缩到 /dev/null    
echo "已执行$0个脚本"
echo "共完成$#个对象的备份"
echo "具体内容包括:$*"
[root@server1 test]# chmod +x test3.sh 
[root@server1 test]# ./test3.sh /etc/passwd /etc/shadow
已执行./test3.sh个脚本
共完成2个对象的备份
具体内容包括:/etc/passwd /etc/shadow
#/dev/null:黑洞
%Y表示年
%m表示月
%d表示日
%H表示小时
%M表示分钟
%S表示秒
%s表示从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数,相当于time函数
%w表示一周中的第几天。

[root@server1 test]# date
2020年 09月 20日 星期日 22:04:22 CST
[root@server1 test]# date +%Y%D$%H:%M
202009/20/20$22:03
[root@server1 test]# date +%s      #从1970年1月1日到现在的秒数
1600610688

Supongo que te gusta

Origin blog.csdn.net/qyf158236/article/details/108663831
Recomendado
Clasificación