[Linux] Fundamentos de Shell - Funciones básicas de Bash

Artículos anteriores
【Linux】Colección de comandos comunes
【Linux】editor de texto Vim
【Linux】gestión de paquetes
【Linux】gestión de usuarios y grupos de usuarios
【Linux】gestión de permisos
【Linux】gestión del sistema de archivos

que es una concha

  • Shell es un intérprete de comandos que proporciona a los usuarios un programa de nivel de sistema de interfaz que envía solicitudes al kernel de Linux para ejecutar programas.Los usuarios pueden usar Shell para iniciar, suspender, detener e incluso escribir algunos programas.

    Como se muestra en la figura a continuación, la capa inferior es el hardware, y luego el kernel administra el hardware, pero el kernel no reconoce el programa de aplicación externo, y el programa debe "traducirse" a un binario reconocido por el kernel, que requiere un dispositivo de interpretación de comandos de shell para completarse.

inserte la descripción de la imagen aquí

  • Shell es un lenguaje de programación muy poderoso, fácil de escribir, fácil de depurar y flexible. Shell es un lenguaje de secuencias de comandos que se interpreta y ejecuta, y los comandos del sistema Linux se pueden invocar directamente en Shell.

Conchas compatibles con Linux

Verifique la ruta /etc/shells para ver los shells admitidos.

inserte la descripción de la imagen aquí

Estos shells se pueden cambiar entre ellos, siempre que ingrese el nombre en la línea de comando para cambiar, cambie la entrada a sh e ingrese exit para salir.

inserte la descripción de la imagen aquí

Cómo se ejecutan los scripts de Shell

comando de salida de eco

echo [选项][输出内容]
选项:
	-e:	支持反斜线控制的字符转换

Por ejemplo, si quiero generar hola mundo, puedo ingresar:

echo hello world

inserte la descripción de la imagen aquí

La conversión de caracteres controlada por barra invertida tiene el siguiente formato:

personajes de control efecto
\\ producción\
\a sonido de advertencia de salida
\B Tecla de retroceso, también conocida como la tecla de borrar a la izquierda
\C Cancele la nueva línea al final de la línea de salida, igual que la opción "-n"
\mi Tecla de escape
\F alimentación de formulario
\norte nueva línea
\r ingresar
\t Carácter de tabulación, la tecla Tabulador
\v pestaña vertical
\0nnn Caracteres de salida de acuerdo con la tabla de códigos octales ASCII. donde 0 es el dígito cero y nnn es un número octal de tres dígitos
\xhh Caracteres de salida de acuerdo con la tabla de códigos hexadecimales ASCII. donde hh es un número hexadecimal de dos

Aquí hay unos ejemplos:

  1. \b eliminar el carácter de la izquierda

inserte la descripción de la imagen aquí

  1. \ttab, \nnueva línea

inserte la descripción de la imagen aquí

  1. \x caracteres de salida según el código ASCII hexadecimal

Mirando hacia arriba en la tabla, podemos ver que el código ASCII de hexadecimal 61 es a, y así sucesivamente.

inserte la descripción de la imagen aquí

  1. Hacer salida con un color específico

\e[1 es para abrir la salida de color, \e[0m significa finalizar la salida de color, de los cuales 31m representan el rojo. el color se puede reemplazar con cualquier contenido.

inserte la descripción de la imagen aquí

otros colores:

30m=黑色	31m=红色	32m=绿色	33m=黄色
34m=蓝色	35m=洋红	36m=青色	37m=白色

primer guion

Crear guión

vim hello.sh

Agregue la siguiente línea al comienzo del script, tenga en cuenta que esto no es un comentario, es nominal, nominalmente lo que escribo a continuación es un script de shell, a excepción de esta oración, otras palabras que comienzan con # son comentarios.

#!/bin/Bash

Luego solo escriba algo de contenido, guarde y salga.

inserte la descripción de la imagen aquí

ejecutar secuencia de comandos

Hay dos métodos (el primero es más común):

  • Otorgue permiso de ejecución para ejecutar con ruta relativa o ruta absoluta.
chmod 755 hello.sh
#用绝对路径执行,注意这个sh文件夹是我自己创建的,用于储存脚本文件
/root/sh/hello.sh
#用相对路径执行,前提是已经在sh文件夹下
./hello.sh
  • Ejecute texto a través de la llamada Bash sin agregar permiso de ejecución.
bash hello.sh

Nota : cuando el script de shell en Windows se ejecuta en Linux, ¡recuerde realizar la conversión de formato! , con el siguiente comando:

dos2unix [要转换的文件] #Windows->Linux
unix2dos [要转换的文件] #Linux->Windows

Funciones básicas de Bash

Historial de comandos y finalización de comandos

comando de historia

history
选项:
	-c:		清空历史命令
	-w:		把缓存中的历史命令写入历史命令保存文件~/.bash_history

Tenga en cuenta que el comando ingresado en el estado de inicio de sesión actual no se guardará en el archivo ~/.bash_history, y se guardará después de salir. Si desea guardarlo de inmediato, puede ejecutar el siguiente comando.

 history -w [历史命令保存文件]

De forma predeterminada, se guardan 1000 comandos históricos, que se pueden modificar en el archivo de configuración de variables de entorno /etc/profile.

vim /etc/profile

inserte la descripción de la imagen aquí

Invocación de comandos históricos

  • Utilice las flechas hacia arriba y hacia abajo para recuperar los comandos de historial anteriores.
  • Use "!n" para repetir el comando de historial n.
  • Use "!!" para repetir el comando anterior.
  • Use "! subcadena" para repetir el último comando que comienza con esta cadena.

Finalización de comandos y archivos

Al ingresar un comando o archivo, presione la tecla Tab para completarlo automáticamente. Si no se completa, significa que hay varios comandos que comienzan con esta cadena. Presione Tab nuevamente para enumerar todos los comandos relacionados.

Alias ​​y accesos directos

alias de comando

establecer alias de comando

alias 别名='原命令'

alias de comando de consulta

alias

orden en que se ejecutan los comandos

  1. El primer orden de ejecución ejecuta el comando con una ruta absoluta o una ruta relativa.
  2. El comando de segundo orden ejecuta el alias.
  3. La tercera orden ejecuta los comandos internos de Bash.
  4. El cuarto orden ejecuta el primer comando que se encuentra en el orden de búsqueda del directorio definido por la variable de entorno $PATH.

Por ejemplo, en lugar de vim, uso vi como alias:

alias vi='vim'

De hecho, vi en sí también es un comando, pero el vi original está en el cuarto orden y el alias tiene una prioridad más alta, por lo que cuando ejecuto vi, es equivalente a ejecutar vim. Si quiero ejecutar el vi original, Necesito usar una ruta absoluta, sin embargo, no se recomienda usar el comando original como un alias.

Hablando de la variable de entorno $PATH, de hecho, la ejecución de todos los comandos en Linux se realiza con rutas absolutas, pero de hecho, solo necesitamos ingresar el nombre del comando al ejecutar los comandos, porque las rutas absolutas de estos comandos se almacenan en Variable de entorno PATH.

Hacer alias permanentes

Modificar el archivo.bashrc

vi /root/.bashrc

Puedes agregarlo en el siguiente formato:

inserte la descripción de la imagen aquí

Teclas de atajo comunes de Bash

tecla de acceso rápido efecto
Ctrl+A Mueva el cursor al principio de la línea de comando. Se usa cuando queremos mover el cursor al principio de la línea de comando si el comando que ingresamos es demasiado largo.
Ctrl + E Mueva el cursor al final de la línea de comando.
Ctrl + C Terminar a la fuerza el comando actual.
Ctrl + L pantalla clara
ctrl+t Elimine o corte el comando antes del cursor.
Ctrl + K Elimine o corte el contenido después del cursor.
Ctrl+Y Pegue lo que se cortó con ctrl+U o ctrl+K.
Ctrl + R Busque en el comando de historial, presione ctrl + R, aparecerá la interfaz de búsqueda, siempre que ingrese el contenido de búsqueda, buscará desde el comando de historial.
Ctrl+D Salga de la terminal actual.
Ctrl+Z Pausa y ponlo en segundo plano.
ctrl+S Pausa la salida de pantalla.
Ctrl + Q Reanudar salida de pantalla.

Redirección de E/S

entrada y salida estándar

equipo nombre de archivo del dispositivo descriptor de archivo Tipos de
teclado /dev/stdin 0 entrada estándar
monitor /dev/sdtout 1 salida estándar
monitor /dev/sdterr 2 salida de error estándar

Dado que el nombre del archivo del dispositivo es difícil de recordar, se describe con un descriptor de archivo.

redirección de salida

Por ejemplo, cuando ingreso una instrucción, la salida debería estar en la pantalla, pero ahora no dejo que salga a la pantalla y la envío a un archivo, es decir, cambio su dirección de salida, lo que se denomina redirección de salida. . Pero, ¿por qué la salida a un archivo? Debido a que el archivo se puede usar como un script ejecutable, el sistema puede ejecutar el script en el momento especificado.

inserte la descripción de la imagen aquí

redirección de salida estándar

Por ejemplo, guardo la salida del comando ls en un archivo:

ls > abc

Luego mira el contenido del archivo abc:

cat abc

Encontraremos que la salida del comando ls se ha guardado en un archivo:

inserte la descripción de la imagen aquí

Si necesitamos agregar la salida de algunos comandos, debemos usar >> en lugar de >, de lo contrario, se sobrescribirá la salida original.

redirección de salida de error estándar

Por ejemplo, para escribir ls en lsd y luego generar el error en el archivo abc, debe agregar 2 adicionales:

lsd 2>> abc

En este punto, el error se ha enviado al archivo.

inserte la descripción de la imagen aquí

De hecho, este método de guardar la salida correcta y la salida incorrecta por separado no es muy útil, porque la premisa de la salida incorrecta es que ya sabemos que el comando es incorrecto, entonces podemos cambiarlo por el correcto.

Comúnmente se utiliza el siguiente método:

Los primeros cuatro métodos son los mismos, es decir, guardar tanto la salida correcta como la salida incorrecta en el mismo archivo.

inserte la descripción de la imagen aquí

redirección de entrada

Nuestra entrada anterior fue ingresada a través del teclado.Si ingresamos a través de un archivo, esto se llama redirección de entrada (no se usa mucho, solo entiéndalo).

wc [选项][文件名]
选项:
	-c	统计字节数
	-w	统计单词书
	-l	统计行数

Ingrese el teclado de estadísticas de wc para ingresar el comando, agregue algo de contenido y luego Ctrl+d para salir, aparecerán tres números, de izquierda a derecha son el número de líneas, palabras y caracteres (incluido el retorno de carro)

inserte la descripción de la imagen aquí

El formato de la redirección de entrada es el siguiente:

命令<文件	把文件作为命令输入

Ejecución secuencial de comandos múltiples y carácter de canalización

Ejecutar múltiples comandos secuencialmente

Ejecutor de comandos múltiples Formato efecto
comando 1; comando 2 Los comandos múltiples se ejecutan secuencialmente sin ninguna conexión lógica entre los comandos.
&& Comando1 && Comando2 AND lógico, cuando el comando 1 se ejecuta correctamente, se ejecutará el comando 2, y cuando no se ejecuta el comando 1, no se ejecutará el comando 2.
|| Comando1 || Comando2 O lógico, cuando el comando 1 se ejecuta incorrectamente, se ejecutará el comando 2, y cuando el comando 1 se ejecuta correctamente, el comando 2 no se ejecutará.

carácter de tubería

La salida correcta del comando 1 se utiliza como objeto de operación del comando 2.

命令1 | 命令2

Veamos para qué se usa el carácter de tubería, si queremos ver los archivos debajo, etc., podemos ingresar:

ll -a /etc/

Pero se encontrará que hay demasiados archivos, lo que no está en línea con nuestros hábitos de visualización. En este momento, podemos usar el comando de visualización de paginación more, pero si se ejecuta more solo, los archivos debajo de etc no se pueden mostrar en una pantalla dividida, entonces podemos usar el carácter de tubería, en ** ll -a /etc/** ejecuta más si se ejecuta con éxito.

ll -a /etc/ | more

Comodines y otros símbolos especiales

comodín

comodín efecto
? coincide con un carácter arbitrario
* Coincide con 0 o cualquier número de cualquier carácter, es decir, puede coincidir con cualquier cosa
[] Coincide con cualquier carácter entre paréntesis.
[-] Coincide con cualquier carácter entre paréntesis, - representa un rango.
[^] NOT lógico, lo que significa coincidencia de caracteres que no están entre paréntesis.

Si queremos eliminar todos los archivos de un directorio, se puede representar con *.

Por ejemplo, podemos ingresar a la carpeta tmp , eliminar todos los archivos en este directorio, asegúrese de ingresar al directorio tmp, ¡no elimine el directorio raíz! ! !

rm -rf *

Luego creamos los siguientes archivos para ver el rol de otros comodines

touch abc
touch abcd
touch 123
touch 0abc

Mostrar archivos con abc después del carácter:

ls *abc

inserte la descripción de la imagen aquí

Si desea mostrar abcd, debe modificarlo para indicar que también se permiten otros caracteres después de abc:

ls *abc*

A diferencia de *, si usa ?, al menos un carácter coincide, por ejemplo:

ls ?abc

En este momento, el archivo abc no se mostrará porque no hay coincidencia de caracteres ? delante de abc, solo se mostrará 0abc

inserte la descripción de la imagen aquí

Veamos el comodín [-]

ls [0-9]abc

inserte la descripción de la imagen aquí

El último es el comodín negado [^]

El siguiente comando muestra archivos con caracteres distintos de 0-9 antes de abc.

ls [^0-9]abc

Otros símbolos especiales en Bash

símbolo efecto
' ' apóstrofe. Todos los símbolos especiales como "$" y "`" (comillas invertidas) entre comillas simples no tienen un significado especial.
“ ” Doble comillas. Los símbolos especiales entre comillas dobles no tienen un significado especial, pero "$", "`" y "\" sí lo tienen.
`` comillas traseras Los contenidos encerrados en acentos graves son comandos del sistema, que se ejecutarán primero en Bash.
PS Al igual que los acentos graves, esto se recomienda.
# # comienza con un comentario.
PS El valor utilizado para llamar a la variable.
\ Los caracteres de escape, los símbolos especiales que siguen a \ pierden su significado especial.

ejemplo:

El papel de los símbolos $, ' ' y " "

[root@aubin tmp]# name=sc
[root@aubin tmp]# echo $name
sc
[root@aubin tmp]# echo '$name'
$name
[root@aubin tmp]# echo "$name"
sc

Los acentos graves, que encierran comandos del sistema, tienen el mismo efecto que $(), se recomienda este último:

inserte la descripción de la imagen aquí

toma nota

inserte la descripción de la imagen aquí

Referencia:
[1] https://www.bilibili.com/video/BV1mW411i7Qf

Supongo que te gusta

Origin blog.csdn.net/watermelon_c/article/details/123901250
Recomendado
Clasificación